diff options
Diffstat (limited to 'libxsde/xsde/cxx/hybrid')
-rw-r--r-- | libxsde/xsde/cxx/hybrid/base.hxx | 1 | ||||
-rw-r--r-- | libxsde/xsde/cxx/hybrid/sequence.hxx | 12 | ||||
-rw-r--r-- | libxsde/xsde/cxx/hybrid/sequence.ixx | 17 |
3 files changed, 30 insertions, 0 deletions
diff --git a/libxsde/xsde/cxx/hybrid/base.hxx b/libxsde/xsde/cxx/hybrid/base.hxx index 75753bc..ba5090d 100644 --- a/libxsde/xsde/cxx/hybrid/base.hxx +++ b/libxsde/xsde/cxx/hybrid/base.hxx @@ -354,6 +354,7 @@ namespace xsde const char* base_value () const {return x_;} char* base_value () {return x_;} void base_value (char* x) {delete[] x_; x_ = x;} + char* base_value_detach () {char* r = x_; x_ = 0; return r;} operator const char* () const {return x_;} operator char* () {return x_;} diff --git a/libxsde/xsde/cxx/hybrid/sequence.hxx b/libxsde/xsde/cxx/hybrid/sequence.hxx index 6d8f33b..b0cdba2 100644 --- a/libxsde/xsde/cxx/hybrid/sequence.hxx +++ b/libxsde/xsde/cxx/hybrid/sequence.hxx @@ -792,6 +792,18 @@ namespace xsde insert (iterator, T*); #endif + // Detach an object from the sequence at a given position. + // The object pointer at this position in the sequence is + // set to 0. + // + T* + detach (iterator); + + // Attach an object to the sequence at a given position. + // + void + attach (iterator, T*); + #ifndef XSDE_EXCEPTIONS error #else diff --git a/libxsde/xsde/cxx/hybrid/sequence.ixx b/libxsde/xsde/cxx/hybrid/sequence.ixx index 11bc13d..a015e31 100644 --- a/libxsde/xsde/cxx/hybrid/sequence.ixx +++ b/libxsde/xsde/cxx/hybrid/sequence.ixx @@ -569,6 +569,23 @@ namespace xsde return i; } + template <typename T> + inline T* var_seq<T>:: + detach (iterator i) + { + T* r = *i.i_; + *i.i_ = 0; + return r; + } + + template <typename T> + inline void var_seq<T>:: + attach (iterator i, T* x) + { + delete *i.i_; + *i.i_ = x; + } + #ifdef XSDE_EXCEPTIONS template <typename T> inline void var_seq<T>:: |