diff --git a/AK/Vector.h b/AK/Vector.h index a6218d1461..1b40a8f509 100644 --- a/AK/Vector.h +++ b/AK/Vector.h @@ -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; Iterator begin() { return Iterator(*this, 0); } Iterator end() { return Iterator(*this, size()); }