diff options
Diffstat (limited to 'src/core/smallvec_type.hpp')
-rw-r--r-- | src/core/smallvec_type.hpp | 38 |
1 files changed, 34 insertions, 4 deletions
diff --git a/src/core/smallvec_type.hpp b/src/core/smallvec_type.hpp index d70505e8c..ccf8dbaec 100644 --- a/src/core/smallvec_type.hpp +++ b/src/core/smallvec_type.hpp @@ -39,21 +39,39 @@ public: * Copy constructor. * @param other The other vector to copy. */ + SmallVector(const SmallVector &other) : data(NULL), items(0), capacity(0) + { + this->Assign(other); + } + + /** + * Generic copy constructor. + * @param other The other vector to copy. + */ template <uint X> SmallVector(const SmallVector<T, X> &other) : data(NULL), items(0), capacity(0) { - MemCpyT<T>(this->Append(other.Length()), other.Begin(), other.Length()); + this->Assign(other); } /** * Assignment. - * @param other The new vector that. + * @param other The other vector to assign. + */ + SmallVector &operator=(const SmallVector &other) + { + this->Assign(other); + return *this; + } + + /** + * Generic assignment. + * @param other The other vector to assign. */ template <uint X> SmallVector &operator=(const SmallVector<T, X> &other) { - this->Reset(); - MemCpyT<T>(this->Append(other.Length()), other.Begin(), other.Length()); + this->Assign(other); return *this; } @@ -63,6 +81,18 @@ public: } /** + * Assign items from other vector. + */ + template <uint X> + inline void Assign(const SmallVector<T, X> &other) + { + if ((const void *)&other == (void *)this) return; + + this->Clear(); + if (other.Length() > 0) MemCpyT<T>(this->Append(other.Length()), other.Begin(), other.Length()); + } + + /** * Remove all items from the list. */ inline void Clear() |