]> Dogcows Code - chaz/openbox/blobdiff - otk/userstring.hh
use the UTF-8 codeset
[chaz/openbox] / otk / userstring.hh
index 0690f8022bb734a1c060b4a537c88ef7c092dc30..c7c81d0c8d488b0f1ad4295acabf5b399cf9e300 100644 (file)
 #define   __userstring_hh
 
 #include <string>
+#include <vector>
+
+extern "C" {
+#include <assert.h>
+}
+
+namespace otk {
 
 //! userstring is a std::string with an extra flag specifying if the string is
 //! UTF-8 encoded.
 class userstring : public std::string
 {
+public:
+  //! A vector of userstrings
+  typedef std::vector<userstring> vector;
+  
 private:
   bool _utf8;
 
 public:
   userstring(bool utf8) : std::string(), _utf8(utf8) {}
-  userstring(const userstring& s, bool utf8, size_type pos = 0,
-            size_type n = npos) : std::string(s, pos, n), _utf8(utf8) {}
-  userstring(const charT *s, bool utf8) : std::string(s), _utf8(utf8) {}
-  userstring(const charT* s, size_type n, bool utf8) : std::string(s, n),
-                                                      _utf8(utf8) {}
-  userstring(size_type n, charT c, bool utf8) : std::string(n, c),
-                                               _utf8(utf8) {}
+  userstring(const userstring& s, size_type pos = 0,
+            size_type n = npos) : std::string(s, pos, n), _utf8(s._utf8) {}
+  userstring(const char *s, bool utf8) : std::string(s), _utf8(utf8) {}
+  userstring(const char *s, size_type n, bool utf8) : std::string(s, n),
+                                                     _utf8(utf8) {}
+  userstring(size_type n, char c, bool utf8) : std::string(n, c),
+                                              _utf8(utf8) {}
+  userstring(const_iterator first, const_iterator last, bool utf8) :
+    std::string(first, last), _utf8(utf8) {}
 
   //! Returns if the string is encoded in UTF-8 or not
   inline bool utf8() const { return _utf8; }
+
+  inline void setUtf8(bool u) { _utf8 = u; }
+
+  inline userstring& insert(size_type pos, const userstring& s) {
+    assert(s._utf8 == _utf8);
+    std::string::insert(pos, s);
+    return *this;
+  }
+
+  inline userstring& insert(size_type pos,
+                           const userstring& s,
+                           size_type pos1, size_type n) {
+    assert(s._utf8 == _utf8);
+    std::string::insert(pos, s, pos1, n);
+    return *this;
+  }
+
+  inline userstring& append(const userstring& s) {
+    assert(s._utf8 == _utf8);
+    std::string::append(s);
+    return *this;
+  }
+
+  inline userstring& append(const userstring& s,
+                           size_type pos, size_type n) {
+    assert(s._utf8 == _utf8);
+    std::string::append(s, pos, n);
+    return *this;
+  }
+
+  inline userstring& assign(const userstring& s) {
+    assert(s._utf8 == _utf8);
+    std::string::assign(s);
+    return *this;
+  }
+  
+  inline userstring& assign(const userstring& s,
+                           size_type pos, size_type n) {
+    assert(s._utf8 == _utf8);
+    std::string::assign(s, pos, n);
+    return *this;
+  }
+
+  inline userstring& replace(size_type pos, size_type n,
+                            const userstring& s) {
+    assert(s._utf8 == _utf8);
+    std::string::replace(pos, n, s);
+    return *this;
+  }
+
+  inline userstring& replace(size_type pos, size_type n,
+                            const userstring& s,
+                            size_type pos1, size_type n1) {
+    assert(s._utf8 == _utf8);
+    std::string::replace(pos, n, s, pos1, n1);
+    return *this;
+  }
+
+  inline userstring& operator=(const userstring& s) {
+    return assign(s);
+  }
+  
+  inline userstring& operator+=(const userstring& s) {
+    return append(s);
+  }
 };
 
+}
+
 #endif // __userstring_hh
This page took 0.021559 seconds and 4 git commands to generate.