From baadde122b9bf3e77e51b003670d68bbd477afe2 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Sun, 3 May 2020 18:38:16 +0200 Subject: [PATCH] AK: Add Vector::resize_and_keep_capacity() This function is just like resize() except it does not deallocate the vector buffer when shrinking. --- AK/Vector.h | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) 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()); }