1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-26 03:27:45 +00:00

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