aboutsummaryrefslogtreecommitdiff
path: root/libxsde/xsde/cxx/ro-string.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'libxsde/xsde/cxx/ro-string.hxx')
-rw-r--r--libxsde/xsde/cxx/ro-string.hxx281
1 files changed, 281 insertions, 0 deletions
diff --git a/libxsde/xsde/cxx/ro-string.hxx b/libxsde/xsde/cxx/ro-string.hxx
new file mode 100644
index 0000000..aebe6e3
--- /dev/null
+++ b/libxsde/xsde/cxx/ro-string.hxx
@@ -0,0 +1,281 @@
+// file : xsde/cxx/ro-string.hxx
+// author : Boris Kolpackov <boris@codesynthesis.com>
+// copyright : Copyright (c) 2005-2009 Code Synthesis Tools CC
+// license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+#ifndef XSDE_CXX_RO_STRING_HXX
+#define XSDE_CXX_RO_STRING_HXX
+
+#include <xsde/cxx/config.hxx>
+
+#include <stddef.h> // size_t
+
+#ifdef XSDE_STL
+# include <string>
+#endif
+
+#ifdef XSDE_IOSTREAM
+# include <iosfwd>
+#endif
+
+#include <xsde/cxx/string.hxx>
+
+namespace xsde
+{
+ namespace cxx
+ {
+ // Read-only string.
+ //
+ struct ro_string
+ {
+ typedef size_t size_type;
+ static const size_t npos;
+
+ public:
+ ro_string ();
+ ro_string (const char*);
+ ro_string (const char*, size_t);
+ ro_string (const string&);
+
+#ifdef XSDE_STL
+ ro_string (const std::string&);
+ operator std::string () const;
+#endif
+
+ private:
+ ro_string (const ro_string&);
+
+ ro_string&
+ operator= (const ro_string&);
+
+ public:
+ // The returned string is not necessarily terminated with '\0'.
+ // If size() returns 0, the returned pointer may be 0.
+ //
+ const char*
+ data () const;
+
+ size_t
+ size () const;
+
+ size_t
+ length () const;
+
+ public:
+ bool
+ empty () const;
+
+ char
+ operator[] (size_t) const;
+
+ public:
+ void
+ assign (const char*);
+
+ void
+ assign (const char*, size_t);
+
+ void
+ assign (const string&);
+
+#ifdef XSDE_STL
+ void
+ assign (const std::string&);
+#endif
+
+ public:
+ int
+ compare (const ro_string&) const;
+
+ int
+ compare (const char*) const;
+
+ int
+ compare (const char*, size_t) const;
+
+ int
+ compare (const string&) const;
+
+#ifdef XSDE_STL
+ int
+ compare (const std::string&) const;
+#endif
+
+ public:
+ size_t
+ find (char, size_t pos = 0) const;
+
+ private:
+ const char* data_;
+ size_t size_;
+ };
+
+
+ // operator ==
+ //
+
+ bool
+ operator== (const ro_string&, const ro_string&);
+
+ bool
+ operator== (const ro_string&, const char*);
+
+ bool
+ operator== (const char*, const ro_string&);
+
+ bool
+ operator== (const ro_string&, const string&);
+
+ bool
+ operator== (const string&, const ro_string&);
+
+#ifdef XSDE_STL
+ bool
+ operator== (const ro_string&, const std::string&);
+
+ bool
+ operator== (const std::string&, const ro_string&);
+#endif
+
+
+ // operator !=
+ //
+
+ bool
+ operator!= (const ro_string&, const ro_string&);
+
+ bool
+ operator!= (const ro_string&, const char*);
+
+ bool
+ operator!= (const char*, const ro_string&);
+
+ bool
+ operator!= (const ro_string&, const string&);
+
+ bool
+ operator!= (const string&, const ro_string&);
+
+#ifdef XSDE_STL
+ bool
+ operator!= (const ro_string&, const std::string&);
+
+ bool
+ operator!= (const std::string&, const ro_string&);
+#endif
+
+
+ // operator <
+ //
+
+ bool
+ operator< (const ro_string&, const ro_string&);
+
+ bool
+ operator< (const ro_string&, const char*);
+
+ bool
+ operator< (const char*, const ro_string&);
+
+#ifdef XSDE_STL
+ bool
+ operator< (const ro_string&, const std::string&);
+
+ bool
+ operator< (const std::string&, const ro_string&);
+#endif
+
+
+ // operator >
+ //
+
+ bool
+ operator> (const ro_string&, const ro_string&);
+
+ bool
+ operator> (const ro_string&, const char*);
+
+ bool
+ operator> (const char*, const ro_string&);
+
+#ifdef XSDE_STL
+ bool
+ operator> (const ro_string&, const std::string&);
+
+ bool
+ operator> (const std::string&, const ro_string&);
+#endif
+
+
+ // operator <=
+ //
+
+ bool
+ operator<= (const ro_string&, const ro_string&);
+
+ bool
+ operator<= (const ro_string&, const char*);
+
+ bool
+ operator<= (const char*, const ro_string&);
+
+#ifdef XSDE_STL
+ bool
+ operator<= (const ro_string&, const std::string&);
+
+ bool
+ operator<= (const std::string&, const ro_string&);
+#endif
+
+
+ // operator>=
+ //
+
+ bool
+ operator>= (const ro_string&, const ro_string&);
+
+ bool
+ operator>= (const ro_string&, const char*);
+
+ bool
+ operator>= (const char*, const ro_string&);
+
+#ifdef XSDE_STL
+ bool
+ operator>= (const ro_string&, const std::string&);
+
+ bool
+ operator>= (const std::string&, const ro_string&);
+#endif
+
+ // operator +=
+ //
+#ifdef XSDE_STL
+ std::string&
+ operator+= (std::string&, const ro_string&);
+#endif
+
+ // operator <<
+ //
+#ifdef XSDE_IOSTREAM
+ std::ostream&
+ operator<< (std::ostream&, const ro_string&);
+#endif
+
+ // Trim leading and trailing XML whitespaces. Return the new
+ // string size.
+ //
+ size_t
+ trim_left (ro_string&);
+
+ size_t
+ trim_right (ro_string&);
+
+ size_t
+ trim (ro_string&);
+ }
+}
+
+#include <xsde/cxx/ro-string.ixx>
+
+#endif // XSDE_CXX_RO_STRING_HXX