summaryrefslogtreecommitdiff
path: root/include/llvm/Support/RecyclingAllocator.h
diff options
context:
space:
mode:
authorDan Gohman <gohman@apple.com>2008-07-07 22:58:06 +0000
committerDan Gohman <gohman@apple.com>2008-07-07 22:58:06 +0000
commite14d81deeb6bb3404ffee5e59ecb88304f112f4a (patch)
tree8c5d9da7ee0f830beed18644f3c553610646806b /include/llvm/Support/RecyclingAllocator.h
parent19d6d424aaa15788c590c2334081da744e6e9f64 (diff)
downloadllvm-e14d81deeb6bb3404ffee5e59ecb88304f112f4a.tar.gz
llvm-e14d81deeb6bb3404ffee5e59ecb88304f112f4a.tar.bz2
llvm-e14d81deeb6bb3404ffee5e59ecb88304f112f4a.tar.xz
Add some basic Pool-allocation infrastructure. This adds a Recycler class,
for handling bookkeeping for deleted objects, as well as the alist class template, for keeping lists of objects allocated from Recyclers, and some related utilities. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@53210 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/llvm/Support/RecyclingAllocator.h')
-rw-r--r--include/llvm/Support/RecyclingAllocator.h60
1 files changed, 60 insertions, 0 deletions
diff --git a/include/llvm/Support/RecyclingAllocator.h b/include/llvm/Support/RecyclingAllocator.h
new file mode 100644
index 0000000000..a338c0eb63
--- /dev/null
+++ b/include/llvm/Support/RecyclingAllocator.h
@@ -0,0 +1,60 @@
+//==- llvm/Support/RecyclingAllocator.h - Recycling Allocator ----*- C++ -*-==//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file defines the RecyclingAllocator class. See the doxygen comment for
+// RecyclingAllocator for more details on the implementation.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_SUPPORT_RECYCLINGALLOCATOR_H
+#define LLVM_SUPPORT_RECYCLINGALLOCATOR_H
+
+#include <cassert>
+#include "llvm/Support/Recycler.h"
+#include "llvm/ADT/STLExtras.h"
+
+namespace llvm {
+
+/// RecyclingAllocator - This class wraps an Allocator, adding the
+/// functionality of recycling deleted objects.
+///
+template<class AllocatorType, class T, class LargestT = T>
+class RecyclingAllocator {
+private:
+ /// Base - Implementation details.
+ ///
+ Recycler<T, LargestT> Base;
+
+ /// Allocator - The wrapped allocator.
+ ///
+ AllocatorType Allocator;
+
+public:
+ ~RecyclingAllocator() { Base.clear(Allocator); }
+
+ /// Allocate - Return a pointer to storage for an object of type
+ /// SubClass. The storage may be either newly allocated or recycled.
+ ///
+ template<class SubClass>
+ SubClass *Allocate() { return Base.Allocate<SubClass>(Allocator); }
+
+ T *Allocate() { return Base.Allocate(Allocator); }
+
+ /// Deallocate - Release storage for the pointed-to object. The
+ /// storage will be kept track of and may be recycled.
+ ///
+ template<class SubClass>
+ void Deallocate(SubClass* E) { return Base.Deallocate(Allocator, E); }
+
+ void PrintStats() { Base.PrintStats(); }
+};
+
+}
+
+#endif