24#include <spot/misc/hashfunc.hh>
26#include <unordered_map>
27#include <unordered_set>
44 size_t operator()(
const T* p)
const noexcept
65 size_t operator()(
const T& s)
const noexcept
74 template<
typename T,
typename U>
75 std::size_t operator()(
const std::pair<T, U> &p)
const noexcept
78 if constexpr (std::is_integral<T>::value
79 &&
sizeof(T) <=
sizeof(std::size_t)/2
80 && std::is_integral<U>::value
81 &&
sizeof(
U) <=
sizeof(std::size_t)/2)
83 constexpr unsigned shift = (
sizeof(std::size_t)/2)*CHAR_BIT;
84 std::size_t h = p.first;
94 return wang32_hash(
static_cast<size_t>(th(p.first)) ^
95 static_cast<size_t>(uh(p.second)));
102 static const unsigned primes[144] =
104 295075531, 334214857, 314607103, 314607191, 334214891, 334214779,
105 295075421, 472882073, 256203329, 275604599, 314606953, 256203397,
106 275604547, 256203631, 275604617, 472882141, 472882297, 472882219,
107 256203229, 256203469, 275604643, 472882169, 275604803, 472882283,
108 295075463, 334214593, 295075213, 256203373, 314607019, 314607193,
109 295075399, 256203523, 314607001, 295075289, 256203293, 256203641,
110 256203307, 314607047, 295075373, 314607053, 314606977, 334214681,
111 275604691, 275604577, 472882447, 314607031, 275605019, 472882477,
112 472882499, 314607173, 295075241, 295075471, 295075367, 256203559,
113 314607233, 275604881, 334214941, 472882103, 275604821, 472882511,
114 295075357, 472882517, 314607023, 256203317, 295075337, 275605007,
115 472882391, 256203223, 334214723, 295075381, 295075423, 275604733,
116 314607113, 256203257, 472882453, 256203359, 295075283, 314607043,
117 256203403, 472882259, 314606891, 472882253, 314606917, 256203349,
118 256203457, 295075457, 472882171, 314607229, 295075513, 472882429,
119 334214953, 275604841, 295075309, 472882099, 334214467, 334214939,
120 275604869, 314607077, 314607089, 275604947, 275605027, 295075379,
121 334214861, 314606909, 334214911, 314607199, 275604983, 314606969,
122 256203221, 334214899, 256203611, 256203679, 472882337, 275604767,
123 472882199, 295075523, 472882049, 275604817, 334214561, 334214581,
124 334214663, 295075489, 295075163, 334214869, 334214521, 295075499,
125 275604913, 334214753, 334214687, 256203491, 295075153, 334214893,
126 472882411, 472882117, 275604793, 334214833, 334214591, 314607091,
127 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:52
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:58
A hash function for pointers.
Definition: hash.hh:36