From 94db57024faafd58a07ffeeae0fd187dbdcae036 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Fri, 7 Nov 2003 23:20:56 +0000 Subject: [PATCH] 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 --- include/Support/MallocAllocator.h | 15 +++++++++++++-- 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 e063f312ab2..1ba25b0d65e 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&, const MallocAllocator&) { return false; } +namespace std { + template + struct _Alloc_traits > { + static const bool _S_instanceless = true; + typedef ::MallocAllocator base_alloc_type; + typedef ::MallocAllocator _Alloc_type; + typedef ::MallocAllocator allocator_type; + }; +} + + #endif diff --git a/include/llvm/Support/MallocAllocator.h b/include/llvm/Support/MallocAllocator.h index e063f312ab2..1ba25b0d65e 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&, const MallocAllocator&) { return false; } +namespace std { + template + struct _Alloc_traits > { + static const bool _S_instanceless = true; + typedef ::MallocAllocator base_alloc_type; + typedef ::MallocAllocator _Alloc_type; + typedef ::MallocAllocator allocator_type; + }; +} + + #endif -- 2.34.1