From: Chris Lattner Date: Tue, 4 Nov 2003 22:38:28 +0000 (+0000) Subject: New file, for use by the pool allocator project X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=c2630f73141076fb3a771d7106cc10fd009edfb7;p=oota-llvm.git New file, for use by the pool allocator project git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@9702 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/Support/MallocAllocator.h b/include/Support/MallocAllocator.h new file mode 100644 index 00000000000..98957d4c8e9 --- /dev/null +++ b/include/Support/MallocAllocator.h @@ -0,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 +#include + +template +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 struct rebind { + typedef MallocAllocator 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 +inline bool operator==(const MallocAllocator &, const MallocAllocator &) { + return true; +} +template +inline bool operator!=(const MallocAllocator&, const MallocAllocator&) { + return false; +} + +#endif diff --git a/include/llvm/Support/MallocAllocator.h b/include/llvm/Support/MallocAllocator.h new file mode 100644 index 00000000000..98957d4c8e9 --- /dev/null +++ b/include/llvm/Support/MallocAllocator.h @@ -0,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 +#include + +template +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 struct rebind { + typedef MallocAllocator 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 +inline bool operator==(const MallocAllocator &, const MallocAllocator &) { + return true; +} +template +inline bool operator!=(const MallocAllocator&, const MallocAllocator&) { + return false; +} + +#endif