diff options
author | Chris Lattner <sabre@nondot.org> | 2003-11-07 23:20:56 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2003-11-07 23:20:56 +0000 |
commit | 94db57024faafd58a07ffeeae0fd187dbdcae036 (patch) | |
tree | 126db1d41750689c2806ce1601629432ad2980cb | |
parent | c1a2be18eaf1e9862af973126be1f1ef975185f1 (diff) | |
download | external_llvm-94db57024faafd58a07ffeeae0fd187dbdcae036.zip external_llvm-94db57024faafd58a07ffeeae0fd187dbdcae036.tar.gz external_llvm-94db57024faafd58a07ffeeae0fd187dbdcae036.tar.bz2 |
Provide a specialization of _Alloc_traits, which allows the G++ runtime to avoid
storing an instance of the allocator in each data structure it uses. Yaay.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@9795 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/Support/MallocAllocator.h | 15 | ||||
-rw-r--r-- | include/llvm/Support/MallocAllocator.h | 15 |
2 files changed, 26 insertions, 4 deletions
diff --git a/include/Support/MallocAllocator.h b/include/Support/MallocAllocator.h index e063f31..1ba25b0 100644 --- a/include/Support/MallocAllocator.h +++ b/include/Support/MallocAllocator.h @@ -44,11 +44,11 @@ struct MallocAllocator { 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) { + static pointer allocate(size_t n, void* hint = 0) { return (pointer)malloc(n*sizeof(T)); } - void deallocate(pointer p, size_t n) { + static void deallocate(pointer p, size_t n) { free((void*)p); } @@ -69,4 +69,15 @@ inline bool operator!=(const MallocAllocator<T>&, const MallocAllocator<T>&) { return false; } +namespace std { + template<typename Type, typename Type2> + struct _Alloc_traits<Type, ::MallocAllocator<Type2> > { + static const bool _S_instanceless = true; + typedef ::MallocAllocator<Type> base_alloc_type; + typedef ::MallocAllocator<Type> _Alloc_type; + typedef ::MallocAllocator<Type> allocator_type; + }; +} + + #endif diff --git a/include/llvm/Support/MallocAllocator.h b/include/llvm/Support/MallocAllocator.h index e063f31..1ba25b0 100644 --- a/include/llvm/Support/MallocAllocator.h +++ b/include/llvm/Support/MallocAllocator.h @@ -44,11 +44,11 @@ struct MallocAllocator { 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) { + static pointer allocate(size_t n, void* hint = 0) { return (pointer)malloc(n*sizeof(T)); } - void deallocate(pointer p, size_t n) { + static void deallocate(pointer p, size_t n) { free((void*)p); } @@ -69,4 +69,15 @@ inline bool operator!=(const MallocAllocator<T>&, const MallocAllocator<T>&) { return false; } +namespace std { + template<typename Type, typename Type2> + struct _Alloc_traits<Type, ::MallocAllocator<Type2> > { + static const bool _S_instanceless = true; + typedef ::MallocAllocator<Type> base_alloc_type; + typedef ::MallocAllocator<Type> _Alloc_type; + typedef ::MallocAllocator<Type> allocator_type; + }; +} + + #endif |