Browse Source

Add bare_allocator archetype that implements the minimal possible allocator interface.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@215691 91177308-0d34-0410-b5e6-96231b3b80d8
Eric Fiselier 11 years ago
parent
commit
31b9c44aa7
1 changed files with 29 additions and 1 deletions
  1. 29 1
      test/support/min_allocator.h

+ 29 - 1
test/support/min_allocator.h

@@ -10,6 +10,34 @@
 #ifndef MIN_ALLOCATOR_H
 #define MIN_ALLOCATOR_H
 
+#include <cstddef>
+
+template <class T>
+class bare_allocator
+{
+public:
+    typedef T value_type;
+
+    bare_allocator() {}
+
+    template <class U>
+    bare_allocator(bare_allocator<U>) {}
+
+    T* allocate(std::size_t n)
+    {
+        return static_cast<T*>(::operator new(n*sizeof(T)));
+    }
+
+    void deallocate(T* p, std::size_t)
+    {
+        return ::operator delete(static_cast<void*>(p));
+    }
+
+    friend bool operator==(bare_allocator, bare_allocator) {return true;}
+    friend bool operator!=(bare_allocator x, bare_allocator y) {return !(x == y);}
+};
+
+
 #if __cplusplus >= 201103L
 
 #include <memory>
@@ -71,7 +99,7 @@ public:
     explicit min_pointer(min_pointer<void> p) : ptr_(static_cast<T*>(p.ptr_)) {}
 
     explicit operator bool() const {return ptr_ != nullptr;}
-    
+
     typedef std::ptrdiff_t difference_type;
     typedef T& reference;
     typedef T* pointer;