aboutsummaryrefslogtreecommitdiff
path: root/libxsde/xsde/cxx/hybrid/sequence.txx
diff options
context:
space:
mode:
Diffstat (limited to 'libxsde/xsde/cxx/hybrid/sequence.txx')
-rw-r--r--libxsde/xsde/cxx/hybrid/sequence.txx28
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);