From 7581b64705ed3c5b3711c956504f278c2ea3899e Mon Sep 17 00:00:00 2001 From: Tom Date: Mon, 21 Dec 2020 23:21:09 -0700 Subject: [PATCH] AK: Add Vector::remove overload for removing entire ranges --- AK/Vector.h | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/AK/Vector.h b/AK/Vector.h index 8ea80428524..6e7f5b1886f 100644 --- a/AK/Vector.h +++ b/AK/Vector.h @@ -257,6 +257,27 @@ public: --m_size; } + void remove(size_t index, size_t count) + { + if (count == 0) + return; + ASSERT(index + count > index); + ASSERT(index + count <= m_size); + + if constexpr (Traits::is_trivial()) { + TypedTransfer::copy(slot(index), slot(index + count), m_size - index - count); + } else { + for (size_t i = index; i < index + count; i++) + at(i).~T(); + for (size_t i = index + count; i < m_size; ++i) { + new (slot(i - count)) T(move(at(i))); + at(i).~T(); + } + } + + m_size -= count; + } + void insert(size_t index, T&& value) { ASSERT(index <= size());