diff options
author | Chris Lattner <sabre@nondot.org> | 2009-02-03 07:39:50 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2009-02-03 07:39:50 +0000 |
commit | 603884021010e227db6cc3fcc4c7f5e555e4a8dc (patch) | |
tree | e97c4e7789e7b1b2fef66d1d8a3617077db68cf4 /include | |
parent | 3e62b2dc93dae6904f0717612782ab6ebf413e1d (diff) | |
download | llvm-603884021010e227db6cc3fcc4c7f5e555e4a8dc.tar.gz llvm-603884021010e227db6cc3fcc4c7f5e555e4a8dc.tar.bz2 llvm-603884021010e227db6cc3fcc4c7f5e555e4a8dc.tar.xz |
add a method to BumpPtrAllocator that allows allocating elements
with a specified alignment.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@63629 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include')
-rw-r--r-- | include/llvm/Support/Allocator.h | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/include/llvm/Support/Allocator.h b/include/llvm/Support/Allocator.h index b60ebcaddf..97c6d187a7 100644 --- a/include/llvm/Support/Allocator.h +++ b/include/llvm/Support/Allocator.h @@ -58,16 +58,30 @@ public: void *Allocate(size_t Size, size_t Alignment); + /// Allocate space, but do not construct, one object. + /// template <typename T> T *Allocate() { return static_cast<T*>(Allocate(sizeof(T),AlignOf<T>::Alignment)); } + /// Allocate space for an array of objects. This does not construct the + /// objects though. template <typename T> T *Allocate(size_t Num) { return static_cast<T*>(Allocate(Num * sizeof(T), AlignOf<T>::Alignment)); } + /// Allocate space for a specific count of elements and with a specified + /// alignment. + template <typename T> + T *Allocate(size_t Num, unsigned Alignment) { + // Round EltSize up to the specified alignment. + unsigned EltSize = (sizeof(T)+Alignment-1)&~Alignment; + return static_cast<T*>(Allocate(Num * EltSize, Alignment)); + } + + void Deallocate(void * /*Ptr*/) {} void PrintStats() const; |