mirror of
https://github.com/NoelFB/blah.git
synced 2025-02-21 13:58:28 +08:00
vector assert
This commit is contained in:
parent
8d6bd102f5
commit
86bcd17f6a
@ -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>
|
||||||
|
Loading…
Reference in New Issue
Block a user