• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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