| 
									
										
										
										
											2007-07-01 11:54:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-03-27 23:38:01 +00:00
										 |  |  | // Copyright 2006-2008 Daniel James.
 | 
					
						
							| 
									
										
										
										
											2007-07-01 11:54:22 +00:00
										 |  |  | // 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>
 | 
					
						
							| 
									
										
										
										
											2008-01-20 17:37:21 +00:00
										 |  |  | #include <new>
 | 
					
						
							| 
									
										
										
										
											2007-07-01 11:54:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											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) { | 
					
						
							| 
									
										
										
										
											2008-01-10 22:30:46 +00:00
										 |  |  |             using namespace std; | 
					
						
							| 
									
										
										
										
											2008-01-20 17:37:21 +00:00
										 |  |  |             T* ptr = static_cast<T*>(malloc(n * sizeof(T))); | 
					
						
							|  |  |  |             if(!ptr) throw std::bad_alloc(); | 
					
						
							|  |  |  |             return ptr; | 
					
						
							| 
									
										
										
										
											2007-07-01 11:54:22 +00:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-01-13 16:19:26 +00:00
										 |  |  |         pointer allocate(size_type n, void const* u) { return allocate(n); } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-01-10 22:30:46 +00:00
										 |  |  |         void deallocate(pointer p, size_type) { | 
					
						
							|  |  |  |             using namespace std; | 
					
						
							|  |  |  |             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) { | 
					
						
							| 
									
										
										
										
											2008-01-10 22:30:46 +00:00
										 |  |  |             using namespace std; | 
					
						
							| 
									
										
										
										
											2007-07-07 09:39:31 +00:00
										 |  |  |             free(p); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         char* _Charalloc(size_type n) { | 
					
						
							| 
									
										
										
										
											2008-01-10 22:30:46 +00:00
										 |  |  |             using namespace std; | 
					
						
							| 
									
										
										
										
											2008-01-20 17:37:21 +00:00
										 |  |  |             T* ptr = static_cast<T*>(malloc(n * sizeof(char))); | 
					
						
							|  |  |  |             if(!ptr) throw std::bad_alloc(); | 
					
						
							| 
									
										
											  
											
												Add the new allocator constructors, use composition instead of inheritance for the implementation and some small fixes.
Merged revisions 43922,43962,43966,43971,43981,43995-43996,44042,44046-44048,44057 via svnmerge from 
https://svn.boost.org/svn/boost/branches/unordered/trunk
........
  r43922 | danieljames | 2008-03-29 14:55:59 +0000 (Sat, 29 Mar 2008) | 1 line
  
  Fix some typos in the reference documentation.
........
  r43962 | danieljames | 2008-03-31 18:29:59 +0100 (Mon, 31 Mar 2008) | 1 line
  
  Add a name variable to the release script, so that I can have different release names in different branches.
........
  r43966 | danieljames | 2008-03-31 18:43:16 +0100 (Mon, 31 Mar 2008) | 1 line
  
  Fix the image directory for standalone docs.
........
  r43971 | danieljames | 2008-03-31 19:17:25 +0100 (Mon, 31 Mar 2008) | 1 line
  
  Fix the unordered stylesheet.
........
  r43981 | danieljames | 2008-04-01 13:31:26 +0100 (Tue, 01 Apr 2008) | 2 lines
  
  Cast the pointer in the Visual C++ 6.5 _Charalloc method.
........
  r43995 | danieljames | 2008-04-02 12:50:27 +0100 (Wed, 02 Apr 2008) | 1 line
  
  Try using the interprocess containers for testing. Compilation is a bit slower but hopefully I'll run into less cross-platform problems.
........
  r43996 | danieljames | 2008-04-02 13:25:49 +0100 (Wed, 02 Apr 2008) | 1 line
  
  Revert my experiment with the interprocess containers. It didn't work out.
........
  r44042 | danieljames | 2008-04-04 20:38:09 +0100 (Fri, 04 Apr 2008) | 1 line
  
  Make hash table data a member of hash table, instead of a base.
........
  r44046 | danieljames | 2008-04-05 12:38:05 +0100 (Sat, 05 Apr 2008) | 1 line
  
  Remove rvalue_ref from Jamfile.v2 - I didn't mean to check it in.
........
  r44047 | danieljames | 2008-04-05 12:39:38 +0100 (Sat, 05 Apr 2008) | 1 line
  
  New constructors with allocators.
........
  r44048 | danieljames | 2008-04-05 12:58:11 +0100 (Sat, 05 Apr 2008) | 1 line
  
  Document the new constructors.
........
  r44057 | danieljames | 2008-04-05 17:08:23 +0100 (Sat, 05 Apr 2008) | 1 line
  
  Fix some bugs in the exception testing code.
........
[SVN r44417]
											
										 
											2008-04-14 15:10:26 +00:00
										 |  |  |             return (char*) ptr; | 
					
						
							| 
									
										
										
										
											2007-07-07 09:39:31 +00:00
										 |  |  |         } | 
					
						
							|  |  |  | #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
 |