[llvm-commits] CVS: llvm/include/Support/MallocAllocator.h
Chris Lattner
lattner at cs.uiuc.edu
Tue Nov 4 16:39:01 PST 2003
Changes in directory llvm/include/Support:
MallocAllocator.h added (r1.1)
---
Log message:
New file, for use by the pool allocator project
---
Diffs of the changes: (+68 -0)
Index: llvm/include/Support/MallocAllocator.h
diff -c /dev/null llvm/include/Support/MallocAllocator.h:1.1
*** /dev/null Tue Nov 4 16:38:38 2003
--- llvm/include/Support/MallocAllocator.h Tue Nov 4 16:38:28 2003
***************
*** 0 ****
--- 1,68 ----
+ //===-- Support/MallocAllocator.h - Allocator using malloc/free -*- C++ -*-===//
+ //
+ // The LLVM Compiler Infrastructure
+ //
+ // This file was developed by the LLVM research group and is distributed under
+ // the University of Illinois Open Source License. See LICENSE.TXT for details.
+ //
+ //===----------------------------------------------------------------------===//
+ //
+ // This file defines MallocAllocator class, an STL compatible allocator which
+ // just uses malloc/free to get and release memory. The default allocator uses
+ // the STL pool allocator runtime library, this explicitly avoids it.
+ //
+ // This file is used for variety of purposes, including the pool allocator
+ // project and testing, regardless of whether or not it's used directly in the
+ // LLVM code, so don't delete this from CVS if you think it's unused!
+ //
+ //===----------------------------------------------------------------------===//
+
+ #ifndef SUPPORT_MALLOCALLOCATOR_H
+ #define SUPPORT_MALLOCALLOCATOR_H
+
+ #include <cstdlib>
+ #include <memory>
+
+ template<typename T>
+ struct MallocAllocator {
+ typedef size_t size_type;
+ typedef ptrdiff_t difference_type;
+ typedef T* pointer;
+ typedef const T* const_pointer;
+ typedef T& reference;
+ typedef const T& const_reference;
+ typedef T value_type;
+ template <class U> struct rebind {
+ typedef MallocAllocator<U> other;
+ };
+
+ pointer address(reference x) const { return &x; }
+ const_pointer address(const_reference x) const { return &x; }
+ size_type max_size() const { return ~0 / sizeof(T); }
+
+ pointer allocate(size_t n, void* hint = 0) {
+ return (pointer)malloc(n*sizeof(T));
+ }
+
+ void deallocate(pointer p, size_t n) {
+ free((void*)p);
+ }
+
+ void construct(pointer p, const T &val) {
+ new((void*)p) T(val);
+ }
+ void destroy(pointer p) {
+ p->~T();
+ }
+ };
+
+ template<typename T>
+ inline bool operator==(const MallocAllocator<T> &, const MallocAllocator<T> &) {
+ return true;
+ }
+ template<typename T>
+ inline bool operator!=(const MallocAllocator<T>&, const MallocAllocator<T>&) {
+ return false;
+ }
+
+ #endif
More information about the llvm-commits
mailing list