Allow BumpVectorContext to conditionally own the underlying BumpPtrAllocator.

llvm-svn: 83884
This commit is contained in:
Ted Kremenek 2009-10-12 19:54:17 +00:00
parent 2a01709204
commit a81b3256a4
1 changed files with 17 additions and 2 deletions

View File

@ -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>