aboutsummaryrefslogtreecommitdiff
path: root/libxsde/xsde/cxx/string-sequence-stl.ixx
diff options
context:
space:
mode:
Diffstat (limited to 'libxsde/xsde/cxx/string-sequence-stl.ixx')
-rw-r--r--libxsde/xsde/cxx/string-sequence-stl.ixx204
1 files changed, 204 insertions, 0 deletions
diff --git a/libxsde/xsde/cxx/string-sequence-stl.ixx b/libxsde/xsde/cxx/string-sequence-stl.ixx
new file mode 100644
index 0000000..be05012
--- /dev/null
+++ b/libxsde/xsde/cxx/string-sequence-stl.ixx
@@ -0,0 +1,204 @@
+// file : xsde/cxx/string-sequence-stl.ixx
+// author : Boris Kolpackov <boris@codesynthesis.com>
+// copyright : Copyright (c) 2005-2009 Code Synthesis Tools CC
+// license : GNU GPL v2 + exceptions; see accompanying LICENSE file
+
+namespace xsde
+{
+ namespace cxx
+ {
+ inline string_sequence::
+ ~string_sequence ()
+ {
+ clear ();
+ }
+
+ inline size_t string_sequence::
+ max_size () const
+ {
+ return size_t (-1) / sizeof (std::string);
+ }
+
+ inline void string_sequence::
+ swap (string_sequence& x)
+ {
+ swap_ (x);
+ }
+
+ inline std::string* string_sequence::
+ begin ()
+ {
+ return static_cast<std::string*> (data_);
+ }
+
+ inline const std::string* string_sequence::
+ begin () const
+ {
+ // g++ 2.95 does not like static_cast here.
+ //
+ return (const std::string*) (data_);
+ }
+
+ inline std::string* string_sequence::
+ end ()
+ {
+ return static_cast<std::string*> (data_) + size_;
+ }
+
+ inline const std::string* string_sequence::
+ end () const
+ {
+ return ((const std::string*) (data_)) + size_;
+ }
+
+ inline std::string& string_sequence::
+ front ()
+ {
+ return *static_cast<std::string*> (data_);
+ }
+
+ inline const std::string& string_sequence::
+ front () const
+ {
+ return *((const std::string*) (data_));
+ }
+
+ inline std::string& string_sequence::
+ back ()
+ {
+ return static_cast<std::string*> (data_)[size_ - 1];
+ }
+
+ inline const std::string& string_sequence::
+ back () const
+ {
+ return ((const std::string*) (data_))[size_ - 1];
+ }
+
+ inline std::string& string_sequence::
+ operator[] (size_t i)
+ {
+ return static_cast<std::string*> (data_)[i];
+ }
+
+ inline const std::string& string_sequence::
+ operator[] (size_t i) const
+ {
+ return ((const std::string*) (data_))[i];
+ }
+
+ inline void string_sequence::
+ pop_back ()
+ {
+ typedef std::string type;
+ static_cast<std::string*> (data_)[size_ - 1].~type ();
+ --size_;
+ }
+
+ inline std::string* string_sequence::
+ erase (std::string* i)
+ {
+ if (i != static_cast<std::string*> (data_) + (size_ - 1))
+ erase_ (i, sizeof (std::string), &move_forward_);
+ else
+ {
+ typedef std::string type;
+ static_cast<std::string*> (data_)[size_ - 1].~type ();
+ --size_;
+ }
+
+ return i;
+ }
+
+#ifdef XSDE_EXCEPTIONS
+ inline void string_sequence::
+ push_back (const std::string& x)
+ {
+ if (capacity_ < size_ + 1)
+ grow_ (0, sizeof (std::string), &move_);
+
+ new (static_cast<std::string*> (data_) + size_) std::string (x);
+ size_++;
+ }
+
+ inline std::string* string_sequence::
+ insert (std::string* i, const std::string& x)
+ {
+ std::string* p = static_cast<std::string*> (
+ insert_ (i, sizeof (std::string), &move_, &move_backward_));
+ *p = x;
+ return p;
+ }
+
+ inline void string_sequence::
+ reserve (size_t n)
+ {
+ if (capacity_ < n)
+ grow_ (n, sizeof (std::string*), &move_);
+ }
+#else
+ inline sequence_base::error string_sequence::
+ push_back (const std::string& x)
+ {
+ error r = error_none;
+
+ if (capacity_ < size_ + 1)
+ r = grow_ (0, sizeof (std::string), &move_);
+
+ if (r == error_none)
+ {
+ new (static_cast<std::string*> (data_) + size_) std::string (x);
+ size_++;
+ }
+
+ return r;
+ }
+
+ inline sequence_base::error string_sequence::
+ insert (std::string* i, const std::string& x)
+ {
+ std::string* p = static_cast<std::string*> (
+ insert_ (i, sizeof (std::string), &move_, &move_backward_));
+
+ if (p)
+ {
+ *p = x;
+ return error_none;
+ }
+ else
+ return error_no_memory;
+ }
+
+ inline sequence_base::error string_sequence::
+ insert (std::string* i, const std::string& x, std::string*& r)
+ {
+ std::string* p = static_cast<std::string*> (
+ insert_ (i, sizeof (std::string), &move_, &move_backward_));
+
+ if (p)
+ {
+ *p = x;
+ r = p;
+ return error_none;
+ }
+ else
+ return error_no_memory;
+ }
+
+ inline sequence_base::error string_sequence::
+ reserve (size_t n)
+ {
+ error r = error_none;
+ if (capacity_ < n)
+ r = grow_ (n, sizeof (std::string), &move_);
+ return r;
+ }
+#endif
+
+ inline bool
+ operator!= (const string_sequence& x, const string_sequence& y)
+ {
+ return !(x == y);
+ }
+ }
+}