add a method to BumpPtrAllocator that allows allocating elements
authorChris Lattner <sabre@nondot.org>
Tue, 3 Feb 2009 07:39:50 +0000 (07:39 +0000)
committerChris Lattner <sabre@nondot.org>
Tue, 3 Feb 2009 07:39:50 +0000 (07:39 +0000)
with a specified alignment.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@63629 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Support/Allocator.h

index b60ebcaddf472bc797b9f055de7e4f04fb993356..97c6d187a72297f2115317380925f3fe61f3fc5f 100644 (file)
@@ -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;