AK: Add Vector::resize_and_keep_capacity()

This function is just like resize() except it does not deallocate the
vector buffer when shrinking.
This commit is contained in:
Andreas Kling 2020-05-03 18:38:16 +02:00
parent e7abbc6655
commit baadde122b

View file

@ -539,14 +539,17 @@ public:
m_capacity = new_capacity;
}
void shrink(size_t new_size)
void shrink(size_t new_size, bool keep_capacity = false)
{
ASSERT(new_size <= size());
if (new_size == size())
return;
if (!new_size) {
clear();
if (keep_capacity)
clear_with_capacity();
else
clear();
return;
}
@ -555,10 +558,10 @@ public:
m_size = new_size;
}
void resize(size_t new_size)
void resize(size_t new_size, bool keep_capacity = false)
{
if (new_size <= size())
return shrink(new_size);
return shrink(new_size, keep_capacity);
ensure_capacity(new_size);
for (size_t i = size(); i < new_size; ++i)
@ -566,6 +569,11 @@ public:
m_size = new_size;
}
void resize_and_keep_capacity(size_t new_size)
{
return resize(new_size, true);
}
using Iterator = VectorIterator<Vector, T>;
Iterator begin() { return Iterator(*this, 0); }
Iterator end() { return Iterator(*this, size()); }