aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2003-11-07 23:20:56 +0000
committerChris Lattner <sabre@nondot.org>2003-11-07 23:20:56 +0000
commit94db57024faafd58a07ffeeae0fd187dbdcae036 (patch)
tree126db1d41750689c2806ce1601629432ad2980cb
parentc1a2be18eaf1e9862af973126be1f1ef975185f1 (diff)
downloadexternal_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.h15
-rw-r--r--include/llvm/Support/MallocAllocator.h15
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