diff options
author | Anas Nashif <anas.nashif@intel.com> | 2012-10-30 12:57:26 -0700 |
---|---|---|
committer | Anas Nashif <anas.nashif@intel.com> | 2012-10-30 12:57:26 -0700 |
commit | 1a78a62555be32868418fe52f8e330c9d0f95d5a (patch) | |
tree | d3765a80e7d3b9640ec2e930743630cd6b9fce2b /libs/unordered/test/helpers/allocator.hpp | |
download | boost-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.hpp | 84 |
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 |