mirror of
https://github.com/SerenityOS/serenity
synced 2024-07-21 18:15:58 +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:
parent
e7abbc6655
commit
baadde122b
16
AK/Vector.h
16
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<Vector, T>;
|
||||
Iterator begin() { return Iterator(*this, 0); }
|
||||
Iterator end() { return Iterator(*this, size()); }
|
||||
|
|
Loading…
Reference in a new issue