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