1 /* Used in Boost.MultiIndex tests. 2 * 3 * Copyright 2003-2018 Joaquin M Lopez Munoz. 4 * Distributed under the Boost Software License, Version 1.0. 5 * (See accompanying file LICENSE_1_0.txt or copy at 6 * http://www.boost.org/LICENSE_1_0.txt) 7 * 8 * See http://www.boost.org/libs/multi_index for library home page. 9 */ 10 11 #ifndef BOOST_MULTI_INDEX_TEST_SMALL_ALLOCATOR_HPP 12 #define BOOST_MULTI_INDEX_TEST_SMALL_ALLOCATOR_HPP 13 14 #include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */ 15 16 template<typename T> 17 class small_allocator 18 { 19 public: 20 typedef unsigned char size_type; 21 typedef signed char difference_type; 22 typedef T* pointer; 23 typedef const T* const_pointer; 24 typedef void* void_pointer; 25 typedef const void* const_void_pointer; 26 typedef T& reference; 27 typedef const T& const_reference; 28 typedef T value_type; 29 template<class U>struct rebind{typedef small_allocator<U> other;}; 30 small_allocator()31 small_allocator(){} small_allocator(const small_allocator<T> &)32 small_allocator(const small_allocator<T>&){} small_allocator(const small_allocator<U> &,int=0)33 template<class U>small_allocator(const small_allocator<U>&,int=0){} 34 allocate(size_type n)35 pointer allocate(size_type n) 36 { 37 return pointer((T*)(new char[n*sizeof(T)])); 38 } 39 deallocate(pointer p,size_type)40 void deallocate(pointer p,size_type) 41 { 42 delete[](char *)&*p; 43 } 44 max_size() const45 size_type max_size()const{return (size_type)(-1);} 46 operator ==(const small_allocator &,const small_allocator &)47 friend bool operator==(const small_allocator&,const small_allocator&) 48 { 49 return true; 50 } 51 operator !=(const small_allocator &,const small_allocator &)52 friend bool operator!=(const small_allocator&,const small_allocator&) 53 { 54 return false; 55 } 56 }; 57 58 #endif 59