aboutsummaryrefslogtreecommitdiffstats
path: root/include/llvm/ADT
diff options
context:
space:
mode:
authorDaniel Dunbar <daniel@zuster.org>2009-08-19 17:48:28 +0000
committerDaniel Dunbar <daniel@zuster.org>2009-08-19 17:48:28 +0000
commitce6ced48cea695b57c2ea292a97764fc8fd4aa2f (patch)
tree07fc575b0ec55a5af765e6a46b4819e28eecfc39 /include/llvm/ADT
parentd46735efc3929f36a6737b2a4b410b62f9a2291f (diff)
downloadexternal_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.h22
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.