36#ifndef LIBUTILITIES_BASICUTILS_HASHUTILS
37#define LIBUTILITIES_BASICUTILS_HASHUTILS
48template <
typename T,
typename... Args>
49inline void hash_combine(std::size_t &seed,
const T &v, Args... args)
52 seed ^= hasher(v) + 0x9e3779b9 + (seed << 6) + (seed >> 2);
56template <
typename T,
typename... Args>
64template <
typename Iter> std::size_t
hash_range(Iter first, Iter last)
67 for (; first != last; ++first)
74template <
typename Iter>
82 template <
typename T> std::size_t
operator()(
const T &t)
const
84 return std::hash<T>{}(t);
87 template <
typename T1,
typename T2>
93 template <
typename... T>
94 std::size_t
operator()(
const std::tuple<T...> &tup)
const
96 return operator()(tup, std::make_index_sequence<
sizeof...(T)>());
99 template <
typename... T,
size_t... I>
101 std::index_sequence<I...>)
const
std::size_t hash_range(Iter first, Iter last)
void hash_combine(std::size_t &seed)
std::size_t operator()(const T &t) const
std::size_t operator()(const std::tuple< T... > &tup, std::index_sequence< I... >) const
std::size_t operator()(const std::tuple< T... > &tup) const
std::size_t operator()(const std::pair< T1, T2 > &p) const