Add MemoryBufferRef(MemoryBuffer&) constructor.
[oota-llvm.git] / include / llvm / Support / RecyclingAllocator.h
index 8e957f1b26453de00b74c4821e0439d495941120..001d1cf7c3df2f08e85776ef7cb94e63a12479ca 100644 (file)
@@ -41,7 +41,7 @@ public:
   /// SubClass. The storage may be either newly allocated or recycled.
   ///
   template<class SubClass>
-  SubClass *Allocate() { return Base.Allocate<SubClass>(Allocator); }
+  SubClass *Allocate() { return Base.template Allocate<SubClass>(Allocator); }
 
   T *Allocate() { return Base.Allocate(Allocator); }
 
@@ -51,9 +51,27 @@ public:
   template<class SubClass>
   void Deallocate(SubClass* E) { return Base.Deallocate(Allocator, E); }
 
-  void PrintStats() { Base.PrintStats(); }
+  void PrintStats() {
+    Allocator.PrintStats();
+    Base.PrintStats();
+  }
 };
 
 }
 
+template<class AllocatorType, class T, size_t Size, size_t Align>
+inline void *operator new(size_t size,
+                          llvm::RecyclingAllocator<AllocatorType,
+                                                   T, Size, Align> &Allocator) {
+  assert(size <= Size && "allocation size exceeded");
+  return Allocator.Allocate();
+}
+
+template<class AllocatorType, class T, size_t Size, size_t Align>
+inline void operator delete(void *E,
+                            llvm::RecyclingAllocator<AllocatorType,
+                                                     T, Size, Align> &A) {
+  A.Deallocate(E);
+}
+
 #endif