// Copyright Daniel James 2006. Use, modification, and distribution are // subject to 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_OBJECTS_HEADER) #define BOOST_UNORDERED_TEST_OBJECTS_HEADER #include #include "../helpers/fwd.hpp" #include namespace test { // Note that the default hash function will work for any equal_to (but not // very well). class object; class hash; class less; class equal_to; template class allocator; class object { friend class hash; friend class equal_to; friend class less; int tag1_, tag2_; public: explicit object(int t1 = 0, int t2 = 0) : tag1_(t1), tag2_(t2) {} friend bool operator==(object const& x1, object const& x2) { return x1.tag1_ == x2.tag1_ && x1.tag2_ == x2.tag2_; } friend bool operator!=(object const& x1, object const& x2) { return x1.tag1_ != x2.tag1_ || x1.tag2_ != x2.tag2_; } friend bool operator<(object const& x1, object const& x2) { return x1.tag1_ < x2.tag1_ || (x1.tag1_ == x2.tag1_ && x1.tag2_ < x2.tag2_); } friend object generate(object const*) { int* x; return object(generate(x), generate(x)); } friend std::ostream& operator<<(std::ostream& out, object const& o) { return out<<"("< class allocator { public: 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 struct rebind { typedef allocator other; }; explicit allocator(int t = 0) {} template allocator(allocator const& x) {} allocator(allocator const&) {} ~allocator() {} pointer address(reference r) { return pointer(&r); } const_pointer address(const_reference r) { return const_pointer(&r); } pointer allocate(size_type n) { return pointer(static_cast(::operator new(n * sizeof(T)))); } pointer allocate(size_type n, const_pointer u) { return pointer(static_cast(::operator new(n * sizeof(T)))); } void deallocate(pointer p, size_type n) { ::operator delete((void*) p); } void construct(pointer p, T const& t) { new(p) T(t); } void destroy(pointer p) { p->~T(); } size_type max_size() const { return 1000; } }; template inline bool operator==(allocator const& x, allocator const& y) { return true; } template inline bool operator!=(allocator const& x, allocator const& y) { return false; } } #endif