1 ///////////////////////////////////////////////////////////////////////////// 2 // 3 // (C) Copyright Ion Gaztanaga 2015-2015. 4 // 5 // Distributed under the Boost Software License, Version 1.0. 6 // (See accompanying file LICENSE_1_0.txt or copy at 7 // http://www.boost.org/LICENSE_1_0.txt) 8 // 9 // See http://www.boost.org/libs/intrusive for documentation. 10 // 11 ///////////////////////////////////////////////////////////////////////////// 12 #ifndef BOOST_INTRUSIVE_TEST_UNORDERED_TEST_COMMON_HPP 13 #define BOOST_INTRUSIVE_TEST_UNORDERED_TEST_COMMON_HPP 14 15 #include <boost/intrusive/unordered_set_hook.hpp> 16 #include <boost/intrusive/detail/mpl.hpp> 17 #include "bptr_value.hpp" 18 #include "test_common.hpp" 19 20 namespace boost { 21 namespace intrusive { 22 23 template<class VoidPointer> 24 struct unordered_hooks 25 { 26 typedef unordered_set_base_hook<void_pointer<VoidPointer> > base_hook_type; 27 typedef unordered_set_base_hook 28 < link_mode<auto_unlink> 29 , void_pointer<VoidPointer> 30 , tag<void> 31 , store_hash<true> 32 > auto_base_hook_type; 33 34 typedef unordered_set_member_hook 35 < void_pointer<VoidPointer> 36 , optimize_multikey<true> 37 > member_hook_type; 38 typedef unordered_set_member_hook 39 < link_mode<auto_unlink>, void_pointer<VoidPointer> 40 , store_hash<true> 41 , optimize_multikey<true> 42 > auto_member_hook_type; 43 typedef nonhook_node_member< unordered_node_traits< VoidPointer, true, true >, 44 unordered_algorithms 45 > nonhook_node_member_type; 46 }; 47 48 template < class ValueTraits, bool DefaultHolder, bool Map > 49 struct unordered_rebinder_common 50 { 51 typedef typename ValueTraits::value_type value_type; 52 typedef typename detail::if_c 53 < DefaultHolder 54 , typename detail::if_c 55 < detail::is_same<value_type, BPtr_Value>::value 56 , header_holder_type< bounded_pointer_holder< BPtr_Value > > 57 , void 58 >::type 59 , header_holder_type< heap_node_holder< typename ValueTraits::node_ptr > > 60 >::type holder_opt; 61 typedef typename detail::if_c 62 < Map, key_of_value<int_holder_key_of_value<value_type> >, void 63 >::type key_of_value_opt; 64 }; 65 66 } //namespace intrusive { 67 } //namespace boost { 68 69 #endif //BOOST_INTRUSIVE_TEST_UNORDERED_TEST_COMMON_HPP 70