hash_traits.hpp 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. /* Hash function characterization.
  2. *
  3. * Copyright 2022 Joaquin M Lopez Munoz.
  4. * Distributed under the Boost Software License, Version 1.0.
  5. * (See accompanying file LICENSE_1_0.txt or copy at
  6. * http://www.boost.org/LICENSE_1_0.txt)
  7. *
  8. * See https://www.boost.org/libs/unordered for library home page.
  9. */
  10. #ifndef BOOST_UNORDERED_HASH_TRAITS_HPP
  11. #define BOOST_UNORDERED_HASH_TRAITS_HPP
  12. #include <boost/type_traits/make_void.hpp>
  13. #include <boost/type_traits/integral_constant.hpp>
  14. namespace boost{
  15. namespace unordered{
  16. namespace detail{
  17. template<typename Hash,typename=void>
  18. struct hash_is_avalanching_impl: boost::false_type{};
  19. template<typename Hash>
  20. struct hash_is_avalanching_impl<Hash,
  21. typename boost::make_void<typename Hash::is_avalanching>::type>:
  22. boost::true_type{};
  23. } /* namespace detail */
  24. /* Each trait can be partially specialized by users for concrete hash functions
  25. * when actual characterization differs from default.
  26. */
  27. /* hash_is_avalanching<Hash>::value is true when the type Hash::is_avalanching
  28. * is present, false otherwise.
  29. */
  30. template<typename Hash>
  31. struct hash_is_avalanching: detail::hash_is_avalanching_impl<Hash>::type{};
  32. } /* namespace unordered */
  33. } /* namespace boost */
  34. #endif