summaryrefslogtreecommitdiff
path: root/libs/unordered/test/helpers/allocator.hpp
diff options
context:
space:
mode:
authorAnas Nashif <anas.nashif@intel.com>2012-10-30 12:57:26 -0700
committerAnas Nashif <anas.nashif@intel.com>2012-10-30 12:57:26 -0700
commit1a78a62555be32868418fe52f8e330c9d0f95d5a (patch)
treed3765a80e7d3b9640ec2e930743630cd6b9fce2b /libs/unordered/test/helpers/allocator.hpp
downloadboost-1a78a62555be32868418fe52f8e330c9d0f95d5a.tar.gz
boost-1a78a62555be32868418fe52f8e330c9d0f95d5a.tar.bz2
boost-1a78a62555be32868418fe52f8e330c9d0f95d5a.zip
Imported Upstream version 1.49.0upstream/1.49.0
Diffstat (limited to 'libs/unordered/test/helpers/allocator.hpp')
-rw-r--r--libs/unordered/test/helpers/allocator.hpp84
1 files changed, 84 insertions, 0 deletions
diff --git a/libs/unordered/test/helpers/allocator.hpp b/libs/unordered/test/helpers/allocator.hpp
new file mode 100644
index 0000000000..5482baa06c
--- /dev/null
+++ b/libs/unordered/test/helpers/allocator.hpp
@@ -0,0 +1,84 @@
+
+// Copyright 2006-2009 Daniel James.
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_UNORDERED_TEST_MALLOC_ALLOCATOR_HEADER)
+#define BOOST_UNORDERED_TEST_MALLOC_ALLOCATOR_HEADER
+
+#include <cstddef>
+#include <cstdlib>
+#include <boost/limits.hpp>
+#include <new>
+
+#if defined(BOOST_MSVC)
+#pragma warning(push)
+#pragma warning(disable:4100) // unreferenced formal parameter
+#endif
+
+namespace test
+{
+ template <class T>
+ struct malloc_allocator
+ {
+ typedef std::size_t size_type;
+ typedef std::ptrdiff_t difference_type;
+ typedef T* pointer;
+ typedef T const* const_pointer;
+ typedef T& reference;
+ typedef T const& const_reference;
+ typedef T value_type;
+
+ template <class U> struct rebind { typedef malloc_allocator<U> other; };
+
+ malloc_allocator() {}
+ template <class Y> malloc_allocator(malloc_allocator<Y> const&) {}
+ malloc_allocator(malloc_allocator const&) {}
+
+ pointer address(reference r) { return &r; }
+ const_pointer address(const_reference r) { return &r; }
+
+ pointer allocate(size_type n) {
+ using namespace std;
+ T* ptr = static_cast<T*>(malloc(n * sizeof(T)));
+ if(!ptr) throw std::bad_alloc();
+ return ptr;
+ }
+
+ pointer allocate(size_type n, void const* u) { return allocate(n); }
+
+ void deallocate(pointer p, size_type) {
+ using namespace std;
+ free(p);
+ }
+ void construct(pointer p, T const& t) { new(p) T(t); }
+ void destroy(pointer p) { p->~T(); }
+
+ size_type max_size() const {
+ return (std::numeric_limits<size_type>::max)();
+ }
+
+ bool operator==(malloc_allocator const&) const { return true; }
+ bool operator!=(malloc_allocator const&) const { return false; }
+
+#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
+ template <class T> void deallocate(T* p, size_type) {
+ using namespace std;
+ free(p);
+ }
+ char* _Charalloc(size_type n) {
+ using namespace std;
+ T* ptr = static_cast<T*>(malloc(n * sizeof(char)));
+ if(!ptr) throw std::bad_alloc();
+ return (char*) ptr;
+ }
+#endif
+ };
+}
+
+#if defined(BOOST_MSVC)
+#pragma warning(pop)
+#pragma warning(disable:4100) // unreferenced formal parameter
+#endif
+
+#endif