diff options
author | Dan Gohman <gohman@apple.com> | 2008-07-07 22:58:06 +0000 |
---|---|---|
committer | Dan Gohman <gohman@apple.com> | 2008-07-07 22:58:06 +0000 |
commit | e14d81deeb6bb3404ffee5e59ecb88304f112f4a (patch) | |
tree | 8c5d9da7ee0f830beed18644f3c553610646806b /include/llvm/Support/RecyclingAllocator.h | |
parent | 19d6d424aaa15788c590c2334081da744e6e9f64 (diff) | |
download | llvm-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.h | 60 |
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 |