| 
									
										
										
										
											2007-07-01 11:54:22 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | // Copyright 2006-2007 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>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-08-14 09:55:30 +00:00
										 |  |  | #if defined(BOOST_MSVC)
 | 
					
						
							|  |  |  | #pragma warning(push)
 | 
					
						
							|  |  |  | #pragma warning(disable:4100) // unreferenced formal parameter
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-07-01 11:54:22 +00:00
										 |  |  | 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() {} | 
					
						
							| 
									
										
										
										
											2007-08-14 09:55:30 +00:00
										 |  |  |         template <class Y> malloc_allocator(malloc_allocator<Y> const&) {} | 
					
						
							|  |  |  |         malloc_allocator(malloc_allocator const&) {} | 
					
						
							| 
									
										
										
										
											2007-07-01 11:54:22 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         pointer address(reference r) { return &r; } | 
					
						
							|  |  |  |         const_pointer address(const_reference r) { return &r; } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         pointer allocate(size_type n) { | 
					
						
							|  |  |  |             return static_cast<T*>(malloc(n * sizeof(T))); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         pointer allocate(size_type n, const_pointer u) { return allocate(n); } | 
					
						
							| 
									
										
										
										
											2007-08-14 09:55:30 +00:00
										 |  |  |         void deallocate(pointer p, size_type) { free(p); } | 
					
						
							| 
									
										
										
										
											2007-07-01 11:54:22 +00:00
										 |  |  |         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& x) const { return true; } | 
					
						
							|  |  |  |         bool operator!=(malloc_allocator const& x) const { return false; } | 
					
						
							| 
									
										
										
										
											2007-07-07 09:39:31 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | #if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
 | 
					
						
							|  |  |  |         template <class T> void deallocate(T* p, size_type) { | 
					
						
							|  |  |  |             free(p); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         char* _Charalloc(size_type n) { | 
					
						
							|  |  |  |             return static_cast<char*>(malloc(n * sizeof(char))); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2007-07-01 11:54:22 +00:00
										 |  |  |     }; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-08-14 09:55:30 +00:00
										 |  |  | #if defined(BOOST_MSVC)
 | 
					
						
							|  |  |  | #pragma warning(pop)
 | 
					
						
							|  |  |  | #pragma warning(disable:4100) // unreferenced formal parameter
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-07-01 11:54:22 +00:00
										 |  |  | #endif
 |