diff options
author | Daniel Dunbar <daniel@zuster.org> | 2009-08-19 17:48:28 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2009-08-19 17:48:28 +0000 |
commit | ce6ced48cea695b57c2ea292a97764fc8fd4aa2f (patch) | |
tree | 07fc575b0ec55a5af765e6a46b4819e28eecfc39 /include/llvm/ADT | |
parent | d46735efc3929f36a6737b2a4b410b62f9a2291f (diff) | |
download | external_llvm-ce6ced48cea695b57c2ea292a97764fc8fd4aa2f.zip external_llvm-ce6ced48cea695b57c2ea292a97764fc8fd4aa2f.tar.gz external_llvm-ce6ced48cea695b57c2ea292a97764fc8fd4aa2f.tar.bz2 |
Add SmallVector::{capacity,set_size}.
- These allow clients to make use of the extra elements in the vector which
have already been allocated, without requiring them to be value initialized.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@79433 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/llvm/ADT')
-rw-r--r-- | include/llvm/ADT/SmallVector.h | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/include/llvm/ADT/SmallVector.h b/include/llvm/ADT/SmallVector.h index f59a438..dd3a6d0 100644 --- a/include/llvm/ADT/SmallVector.h +++ b/include/llvm/ADT/SmallVector.h @@ -122,11 +122,11 @@ public: reference operator[](unsigned idx) { - assert (Begin + idx < End); + assert(Begin + idx < End); return Begin[idx]; } const_reference operator[](unsigned idx) const { - assert (Begin + idx < End); + assert(Begin + idx < End); return Begin[idx]; } @@ -399,6 +399,24 @@ public: RHS.begin(), RHS.end()); } + /// capacity - Return the total number of elements in the currently allocated + /// buffer. + size_t capacity() const { return Capacity - Begin; } + + /// set_size - Set the array size to \arg N, which the current array must have + /// enough capacity for. + /// + /// This does not construct or destroy any elements in the vector. + /// + /// Clients can use this in conjunction with capacity() to write past the end + /// of the buffer when they know that more elements are available, and only + /// update the size later. This avoids the cost of value initializing elements + /// which will only be overwritten. + void set_size(unsigned N) { + assert(N <= capacity()); + End = Begin + N; + } + private: /// isSmall - Return true if this is a smallvector which has not had dynamic /// memory allocated for it. |