24#include <spot/misc/hashfunc.hh>
26#include <unordered_map>
27#include <unordered_set>
77 template<
typename T,
typename U>
78 std::size_t
operator()(
const std::pair<T, U> &p)
const noexcept
81 if constexpr (std::is_integral<T>::value
82 &&
sizeof(T) <=
sizeof(std::size_t)/2
83 && std::is_integral<U>::value
84 &&
sizeof(
U) <=
sizeof(std::size_t)/2)
86 constexpr unsigned shift = (
sizeof(std::size_t)/2)*CHAR_BIT;
87 std::size_t h = p.first;
97 return wang32_hash(
static_cast<size_t>(th(p.first)) ^
98 static_cast<size_t>(uh(p.second)));
105 static const unsigned primes[144] =
107 295075531, 334214857, 314607103, 314607191, 334214891, 334214779,
108 295075421, 472882073, 256203329, 275604599, 314606953, 256203397,
109 275604547, 256203631, 275604617, 472882141, 472882297, 472882219,
110 256203229, 256203469, 275604643, 472882169, 275604803, 472882283,
111 295075463, 334214593, 295075213, 256203373, 314607019, 314607193,
112 295075399, 256203523, 314607001, 295075289, 256203293, 256203641,
113 256203307, 314607047, 295075373, 314607053, 314606977, 334214681,
114 275604691, 275604577, 472882447, 314607031, 275605019, 472882477,
115 472882499, 314607173, 295075241, 295075471, 295075367, 256203559,
116 314607233, 275604881, 334214941, 472882103, 275604821, 472882511,
117 295075357, 472882517, 314607023, 256203317, 295075337, 275605007,
118 472882391, 256203223, 334214723, 295075381, 295075423, 275604733,
119 314607113, 256203257, 472882453, 256203359, 295075283, 314607043,
120 256203403, 472882259, 314606891, 472882253, 314606917, 256203349,
121 256203457, 295075457, 472882171, 314607229, 295075513, 472882429,
122 334214953, 275604841, 295075309, 472882099, 334214467, 334214939,
123 275604869, 314607077, 314607089, 275604947, 275605027, 295075379,
124 334214861, 314606909, 334214911, 314607199, 275604983, 314606969,
125 256203221, 334214899, 256203611, 256203679, 472882337, 275604767,
126 472882199, 295075523, 472882049, 275604817, 334214561, 334214581,
127 334214663, 295075489, 295075163, 334214869, 334214521, 295075499,
128 275604913, 334214753, 334214687, 256203491, 295075153, 334214893,
129 472882411, 472882117, 275604793, 334214833, 334214591, 314607091,
130 256203419, 275604727, 256203659, 275604961, 334214557, 275604677
size_t wang32_hash(size_t key)
Thomas Wang's 32 bit hash function.
Definition hashfunc.hh:37
std::hash< std::string > string_hash
A hash function for strings.
Definition hash.hh:53
size_t knuth32_hash(size_t key)
Knuth's Multiplicative hash function.
Definition hashfunc.hh:56
Definition automata.hh:26
A hash function that returns identity.
Definition hash.hh:59
size_t operator()(const T &s) const noexcept
< Return s as its hash.
Definition hash.hh:66
Hash functor for std::pair combining hashes of both elements.
Definition hash.hh:75
std::size_t operator()(const std::pair< T, U > &p) const noexcept
Hash a pair by combining hashes of both elements.
Definition hash.hh:78
A hash function for pointers.
Definition hash.hh:36
size_t operator()(const T *p) const noexcept
Hash p using Knuth's multiplicative hash.
Definition hash.hh:45