unordered_test_common.hpp 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  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. #include <boost/intrusive/unordered_set_hook.hpp>
  15. #include <boost/intrusive/detail/mpl.hpp>
  16. #include "bptr_value.hpp"
  17. #include "test_common.hpp"
  18. namespace boost {
  19. namespace intrusive {
  20. template<class VoidPointer>
  21. struct unordered_hooks
  22. {
  23. typedef unordered_set_base_hook<void_pointer<VoidPointer> > base_hook_type;
  24. typedef unordered_set_base_hook
  25. < link_mode<auto_unlink>
  26. , void_pointer<VoidPointer>
  27. , tag<void>
  28. , store_hash<true>
  29. > auto_base_hook_type;
  30. typedef unordered_set_member_hook
  31. < void_pointer<VoidPointer>
  32. , optimize_multikey<true>
  33. > member_hook_type;
  34. typedef unordered_set_member_hook
  35. < link_mode<auto_unlink>, void_pointer<VoidPointer>
  36. , store_hash<true>
  37. , optimize_multikey<true>
  38. > auto_member_hook_type;
  39. typedef nonhook_node_member< unordered_node_traits< VoidPointer, true, true >,
  40. unordered_algorithms
  41. > nonhook_node_member_type;
  42. };
  43. template < class ValueTraits, bool DefaultHolder, bool Map >
  44. struct unordered_rebinder_common
  45. {
  46. typedef typename ValueTraits::value_type value_type;
  47. typedef typename detail::if_c
  48. < DefaultHolder
  49. , typename detail::if_c
  50. < detail::is_same<value_type, BPtr_Value>::value
  51. , header_holder_type< bounded_pointer_holder< BPtr_Value > >
  52. , void
  53. >::type
  54. , header_holder_type< heap_node_holder< typename ValueTraits::node_ptr > >
  55. >::type holder_opt;
  56. typedef typename detail::if_c
  57. < Map, key_of_value<int_holder_key_of_value<value_type> >, void
  58. >::type key_of_value_opt;
  59. };
  60. } //namespace intrusive {
  61. } //namespace boost {
  62. #endif //BOOST_INTRUSIVE_TEST_UNORDERED_TEST_COMMON_HPP