Reapply r99881 with some fixes: only call destructor in releaseMemory!
[oota-llvm.git] / include / llvm / Support / Allocator.h
index b1f59dc05e7bb892cb2c2c614efc2140c10170dc..a58b9db27faafc3b4aa58adb3c5ae9f75eb17ee7 100644 (file)
@@ -134,6 +134,7 @@ class BumpPtrAllocator {
   static MallocSlabAllocator DefaultSlabAllocator;
 
 public:
+  typedef void (*DTorFunction)(void*);
   BumpPtrAllocator(size_t size = 4096, size_t threshold = 4096,
                    SlabAllocator &allocator = DefaultSlabAllocator);
   ~BumpPtrAllocator();
@@ -142,6 +143,11 @@ public:
   /// to the beginning of it, freeing all memory allocated so far.
   void Reset();
 
+  /// Reset - like Reset(), but call DTorFunction for each allocated
+  /// object. This assumes that all objects allocated with this allocator
+  /// had the same size and alignment specified here.
+  void Reset(size_t Size, size_t Alignment, DTorFunction DTor);
+
   /// Allocate - Allocate space at the specified alignment.
   ///
   void *Allocate(size_t Size, size_t Alignment);