vector assert

This commit is contained in:
Noel Berry 2020-10-24 17:51:40 -07:00
parent 8d6bd102f5
commit 86bcd17f6a

View File

@ -275,33 +275,37 @@ namespace Blah
template<class T> template<class T>
void Vector<T>::erase(const T* position) void Vector<T>::erase(const T* position)
{ {
BLAH_ASSERT(m_size > 0, "Index is out of range");
BLAH_ASSERT(position >= begin() && position < end(), "Index is out of range"); BLAH_ASSERT(position >= begin() && position < end(), "Index is out of range");
const size_t index = position - begin(); if (m_size > 0)
if (index < m_size - 1)
{ {
size_t diff = (m_size - index - 1); const size_t index = position - begin();
if (diff <= 0) diff = 0;
if (std::is_trivially_copyable<T>::value) if (index < m_size - 1)
{ {
m_buffer[index].~T(); size_t diff = (m_size - index - 1);
memmove(m_buffer + index, m_buffer + index + 1, (size_t)diff * sizeof(T)); if (diff <= 0) diff = 0;
if (std::is_trivially_copyable<T>::value)
{
m_buffer[index].~T();
memmove(m_buffer + index, m_buffer + index + 1, (size_t)diff * sizeof(T));
}
else
{
for (auto i = index; i < m_size - 1; i++)
m_buffer[i] = std::move(m_buffer[i + 1]);
m_buffer[m_size - 1].~T();
}
} }
else else
{ {
for (auto i = index; i < m_size - 1; i++) m_buffer[index].~T();
m_buffer[i] = std::move(m_buffer[i + 1]);
m_buffer[m_size - 1].~T();
} }
}
else
{
m_buffer[index].~T();
}
m_size--; m_size--;
}
} }
template<class T> template<class T>