BAN: Optimize Vector copy assignment to reduce allocations

If vector contains enough elements, it will now replace old elements
instead of clearing and reallocating
This commit is contained in:
Bananymous 2024-06-14 00:17:07 +03:00
parent 6707989cd5
commit cc6b80a55b
1 changed files with 5 additions and 2 deletions

View File

@ -138,10 +138,13 @@ namespace BAN
template<typename T> template<typename T>
Vector<T>& Vector<T>::operator=(const Vector<T>& other) Vector<T>& Vector<T>::operator=(const Vector<T>& other)
{ {
clear();
MUST(ensure_capacity(other.size())); MUST(ensure_capacity(other.size()));
for (size_type i = 0; i < other.size(); i++) for (size_type i = 0; i < BAN::Math::min(size(), other.size()); i++)
m_data[i] = other.m_data[i];
for (size_type i = size(); i < other.size(); i++)
new (m_data + i) T(other[i]); new (m_data + i) T(other[i]);
for (size_type i = other.size(); i < size(); i++)
m_data[i].~T();
m_size = other.m_size; m_size = other.m_size;
return *this; return *this;
} }