diff options
-rw-r--r-- | llvm/include/llvm/Support/Allocator.h | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/llvm/include/llvm/Support/Allocator.h b/llvm/include/llvm/Support/Allocator.h index b60ebcaddf4..97c6d187a72 100644 --- a/llvm/include/llvm/Support/Allocator.h +++ b/llvm/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; |