BAN: Properly allocate/deallocate elements in Vector/Queue
This commit is contained in:
parent
6ed542d6bf
commit
61de71e0d5
|
@ -44,7 +44,7 @@ namespace BAN
|
||||||
{
|
{
|
||||||
for (size_type i = 0; i < m_size; i++)
|
for (size_type i = 0; i < m_size; i++)
|
||||||
m_data[i].~T();
|
m_data[i].~T();
|
||||||
BAN::deallocator(m_data);
|
delete[] m_data;
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
|
@ -95,15 +95,13 @@ namespace BAN
|
||||||
if (m_capacity > size)
|
if (m_capacity > size)
|
||||||
return {};
|
return {};
|
||||||
size_type new_cap = BAN::Math::max<size_type>(size, m_capacity * 3 / 2);
|
size_type new_cap = BAN::Math::max<size_type>(size, m_capacity * 3 / 2);
|
||||||
void* new_data = BAN::allocator(new_cap * sizeof(T));
|
T* new_data = new T[new_cap];
|
||||||
if (new_data == nullptr)
|
if (new_data == nullptr)
|
||||||
return Error::FromString("Queue: Could not allocate memory");
|
return Error::FromString("Queue: Could not allocate memory");
|
||||||
if (m_data)
|
if (m_data)
|
||||||
memcpy(new_data, m_data, m_size * sizeof(T));
|
memcpy(new_data, m_data, m_size * sizeof(T));
|
||||||
BAN::deallocator(m_data);
|
delete[] m_data;
|
||||||
m_data = (T*)new_data;
|
m_data = new_data;
|
||||||
for (size_type i = m_capacity; i < new_cap; i++)
|
|
||||||
m_data[i] = T();
|
|
||||||
m_capacity = new_cap;
|
m_capacity = new_cap;
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
|
@ -67,7 +67,7 @@ namespace BAN
|
||||||
{
|
{
|
||||||
for (size_type i = 0; i < m_size; i++)
|
for (size_type i = 0; i < m_size; i++)
|
||||||
m_data[i].~T();
|
m_data[i].~T();
|
||||||
BAN::deallocator(m_data);
|
delete[] m_data;
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
|
@ -208,15 +208,13 @@ namespace BAN
|
||||||
if (m_capasity >= size)
|
if (m_capasity >= size)
|
||||||
return {};
|
return {};
|
||||||
size_type new_cap = BAN::Math::max<size_type>(size, m_capasity * 3 / 2);
|
size_type new_cap = BAN::Math::max<size_type>(size, m_capasity * 3 / 2);
|
||||||
void* new_data = BAN::allocator(new_cap * sizeof(T));
|
T* new_data = new T[new_cap];
|
||||||
if (new_data == nullptr)
|
if (new_data == nullptr)
|
||||||
return Error::FromString("Vector: Could not allocate memory");
|
return Error::FromString("Vector: Could not allocate memory");
|
||||||
if (m_data)
|
if (m_data)
|
||||||
memcpy(new_data, m_data, m_size * sizeof(T));
|
memcpy(new_data, m_data, m_size * sizeof(T));
|
||||||
BAN::deallocator(m_data);
|
delete[] m_data;
|
||||||
m_data = (T*)new_data;
|
m_data = new_data;
|
||||||
for (size_type i = m_capasity; i < new_cap; i++)
|
|
||||||
m_data[i] = T();
|
|
||||||
m_capasity = new_cap;
|
m_capasity = new_cap;
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue