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
This commit is contained in:
Chris Lattner 2003-11-07 23:20:56 +00:00
parent c1a2be18ea
commit 94db57024f
2 changed files with 26 additions and 4 deletions

View File

@ -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

View File

@ -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