diff options
Diffstat (limited to 'libxsde/xsde/cxx/hybrid/sequence.txx')
-rw-r--r-- | libxsde/xsde/cxx/hybrid/sequence.txx | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/libxsde/xsde/cxx/hybrid/sequence.txx b/libxsde/xsde/cxx/hybrid/sequence.txx index 12faa99..a81ad11 100644 --- a/libxsde/xsde/cxx/hybrid/sequence.txx +++ b/libxsde/xsde/cxx/hybrid/sequence.txx @@ -28,6 +28,34 @@ namespace xsde #ifdef XSDE_EXCEPTIONS template <typename T> void fix_seq<T>:: + assign (const T* p, size_t n) + { + clear (); + reserve (n); + + for (; size_ < n; ++size_) + new (static_cast<T*> (data_) + size_) T (p[size_]); + } +#else + template <typename T> + sequence_base::error fix_seq<T>:: + assign (const T* p, size_t n) + { + clear (); + + if (error r = reserve (n)) + return r; + + for (; size_ < n; ++size_) + new (static_cast<T*> (data_) + size_) T (p[size_]); + + return error_none; + } +#endif + +#ifdef XSDE_EXCEPTIONS + template <typename T> + void fix_seq<T>:: move_ (void* dst, void* src, size_t n) { T* d = static_cast<T*> (dst); |