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:
parent
e7abbc6655
commit
baadde122b
1 changed files with 12 additions and 4 deletions
16
AK/Vector.h
16
AK/Vector.h
|
@ -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()); }
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue