diff options
author | Ted Kremenek <kremenek@apple.com> | 2009-10-12 19:54:17 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2009-10-12 19:54:17 +0000 |
commit | 87342dc37237c6efb9e311bacb12547de3ccbc0f (patch) | |
tree | 16bd5c13d73f962ea00e914c351ce8f3aacc050a /include/clang/Analysis/Support/BumpVector.h | |
parent | cf5deecd7885b544f1197846897513858863e3af (diff) |
Allow BumpVectorContext to conditionally own the underlying BumpPtrAllocator.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@83884 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/clang/Analysis/Support/BumpVector.h')
-rw-r--r-- | include/clang/Analysis/Support/BumpVector.h | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/include/clang/Analysis/Support/BumpVector.h b/include/clang/Analysis/Support/BumpVector.h index 243332fec0..a5e11a1006 100644 --- a/include/clang/Analysis/Support/BumpVector.h +++ b/include/clang/Analysis/Support/BumpVector.h @@ -21,14 +21,29 @@ #include "llvm/Support/type_traits.h" #include "llvm/Support/Allocator.h" +#include "llvm/ADT/PointerIntPair.h" #include <algorithm> namespace clang { class BumpVectorContext { - llvm::BumpPtrAllocator Alloc; + llvm::PointerIntPair<llvm::BumpPtrAllocator*, 1, bool> Alloc; public: - llvm::BumpPtrAllocator &getAllocator() { return Alloc; } + /// Construct a new BumpVectorContext that creates a new BumpPtrAllocator + /// and destroys it when the BumpVectorContext object is destroyed. + BumpVectorContext() : Alloc(new llvm::BumpPtrAllocator(), true) {} + + /// Construct a new BumpVectorContext that reuses an existing + /// BumpPtrAllocator. This BumpPtrAllocator is not destroyed when the + /// BumpVectorContext object is destroyed. + BumpVectorContext(llvm::BumpPtrAllocator &A) : Alloc(&A, false) {} + + ~BumpVectorContext() { + if (Alloc.getInt()) + delete Alloc.getPointer(); + } + + llvm::BumpPtrAllocator &getAllocator() { return *Alloc.getPointer(); } }; template<typename T> |