mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 05:08:13 +00:00
AK: Delete Vector::resize() from Nonnull{Own,Ref}PtrVector.
It's not possible to grow one of these vectors beyond what's already in them since it's not possible to default-construct Nonnull{Own,Ref}Ptr. Add Vector::shrink() which can be used when you want to shrink the Vector and delete resize() from the specialized Vectors.
This commit is contained in:
parent
394168c0ca
commit
1686c4906b
3 changed files with 27 additions and 9 deletions
|
@ -41,6 +41,12 @@ public:
|
||||||
const T& first() const { return at(0); }
|
const T& first() const { return at(0); }
|
||||||
T& last() { return at(size() - 1); }
|
T& last() { return at(size() - 1); }
|
||||||
const T& last() const { return at(size() - 1); }
|
const T& last() const { return at(size() - 1); }
|
||||||
|
|
||||||
|
private:
|
||||||
|
// NOTE: You can't use resize() on a NonnullOwnPtrVector since making the vector
|
||||||
|
// bigger would require being able to default-construct NonnullOwnPtrs.
|
||||||
|
// Instead, use shrink(new_size).
|
||||||
|
void resize(int) = delete;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,6 +41,12 @@ public:
|
||||||
const T& first() const { return at(0); }
|
const T& first() const { return at(0); }
|
||||||
T& last() { return at(size() - 1); }
|
T& last() { return at(size() - 1); }
|
||||||
const T& last() const { return at(size() - 1); }
|
const T& last() const { return at(size() - 1); }
|
||||||
|
|
||||||
|
private:
|
||||||
|
// NOTE: You can't use resize() on a NonnullRefPtrVector since making the vector
|
||||||
|
// bigger would require being able to default-construct NonnullRefPtrs.
|
||||||
|
// Instead, use shrink(new_size).
|
||||||
|
void resize(int) = delete;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
24
AK/Vector.h
24
AK/Vector.h
|
@ -407,8 +407,9 @@ public:
|
||||||
m_capacity = new_capacity;
|
m_capacity = new_capacity;
|
||||||
}
|
}
|
||||||
|
|
||||||
void resize(int new_size)
|
void shrink(int new_size)
|
||||||
{
|
{
|
||||||
|
ASSERT(new_size <= size());
|
||||||
if (new_size == size())
|
if (new_size == size())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -417,14 +418,19 @@ public:
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (new_size > size()) {
|
for (int i = new_size; i < size(); ++i)
|
||||||
ensure_capacity(new_size);
|
at(i).~T();
|
||||||
for (int i = size(); i < new_size; ++i)
|
m_size = new_size;
|
||||||
new (slot(i)) T;
|
}
|
||||||
} else {
|
|
||||||
for (int i = new_size; i < size(); ++i)
|
void resize(int new_size)
|
||||||
at(i).~T();
|
{
|
||||||
}
|
if (new_size <= size())
|
||||||
|
return shrink(new_size);
|
||||||
|
|
||||||
|
ensure_capacity(new_size);
|
||||||
|
for (int i = size(); i < new_size; ++i)
|
||||||
|
new (slot(i)) T;
|
||||||
m_size = new_size;
|
m_size = new_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue