22 struct prime_number_hash_policy;
23 struct power_of_two_hash_policy;
24 struct fibonacci_hash_policy;
27 template<
typename Result,
typename Functor>
struct FunctorStorage : Functor {
31 template<
typename... Args> Result
operator()(Args&&... args) {
return static_cast<Functor&
>(*this)(std::forward<Args>(args)...); }
33 template<
typename... Args> Result
operator()(Args&&... args)
const {
return static_cast<const Functor&
>(*this)(std::forward<Args>(args)...); }
36 template<
typename Result,
typename... Args>
struct FunctorStorage<Result, Result (*)(Args...)> {
37 typedef Result (*function_ptr)(Args...);
40 Result
operator()(Args... args)
const {
return function(std::forward<Args>(args)...); }
41 operator function_ptr&() {
return function; }
42 operator const function_ptr&() {
return function; }
81 static constexpr int8_t min_lookups = 4;
94 template<
typename... Args>
void emplace(
const int8_t distance, Args&&... args) {
95 new(std::addressof(
value))
T(std::forward<Args>(args)...);
112 static constexpr int8_t table[64] = {63, 0, 58, 1, 59, 47, 53, 2, 60, 39, 48, 27, 54, 33, 42, 3, 61, 51, 37, 40, 49, 18, 28, 20, 55, 30, 34, 11, 43,
113 14, 22, 4, 62, 57, 46, 52, 38, 26, 32, 41, 50, 36, 17, 19, 29, 10, 13, 21, 56, 45, 25, 31, 35, 16, 9, 12, 44, 24, 15, 8, 23, 7, 6, 5};
118 value |= value >> 16;
119 value |= value >> 32;
120 return table[((value - (value >> 1)) * 0x07EDD5E59A4E28C2) >> 58];
150 template<
typename T,
typename FindKey,
typename ArgumentHash,
typename Hasher,
typename ArgumentEqual,
typename Equal,
typename ArgumentAlloc,
typename EntryAlloc>
179 template<
typename It>
185 template<
typename It>
188 template<
typename It>
223 if(
this == std::addressof(other))
227 if(AllocatorTraits::propagate_on_container_copy_assignment::value) {
228 if(
static_cast<EntryAlloc&
>(*
this) !=
static_cast<const EntryAlloc&
>(other)) {
234 static_cast<Hasher&
>(*this) = other;
235 static_cast<Equal&
>(*this) = other;
241 if(
this == std::addressof(other))
243 else if(AllocatorTraits::propagate_on_container_move_assignment::value) {
248 }
else if(
static_cast<EntryAlloc&
>(*
this) ==
static_cast<EntryAlloc&
>(other)) {
258 static_cast<Hasher&
>(*this) = std::move(other);
259 static_cast<Equal&
>(*this) = std::move(other);
325 for(
int8_t distance = 0; it->distance_from_desired >= distance; ++distance, ++it) {
351 int8_t distance_from_desired = 0;
385 it->distance_from_desired = -1;
395 if(it->has_value()) {
415 current->destroy_value();
417 for(
EntryPointer next = current +
ptrdiff_t(1); !next->is_at_desired_position(); ++current, ++next) {
418 current->emplace(next->distance_from_desired - 1, std::move(next->value));
419 next->destroy_value();
428 if(it->has_value()) {
439 target->emplace(it->distance_from_desired -
num_to_move, std::move(it->value));
472 if(AllocatorTraits::propagate_on_container_swap::value)
473 swap(
static_cast<EntryAlloc&
>(*
this),
static_cast<EntryAlloc&
>(other));
477 size_t max_size()
const {
return (AllocatorTraits::max_size(*
this)) /
sizeof(
Entry); }
503 return std::max(detailv3::min_lookups,
desired);
521 template<
typename Key,
typename... Args>
527 return emplace(std::forward<Key>(
key), std::forward<Args>(args)...);
529 current_entry->emplace(distance_from_desired, std::forward<Key>(
key), std::forward<Args>(args)...);
542 }
else if(
current_entry->distance_from_desired < distance_from_desired) {
545 ++distance_from_desired;
547 ++distance_from_desired;
575 template<
typename L,
typename R>
bool compares_equal(
const L& lhs,
const R& rhs) {
return static_cast<Equal&
>(*this)(lhs, rhs); }
795 static constexpr const std::uint64_t
prime_list[] = {2ll
u, 3ll
u, 5ll
u, 7ll
u, 11ll
u, 13ll
u, 17ll
u, 23ll
u, 29ll
u, 37ll
u, 47ll
u, 59ll
u, 73ll
u, 97ll
u,
796 127ll
u, 151ll
u, 197ll
u, 251ll
u, 313ll
u, 397ll
u, 499ll
u, 631ll
u, 797ll
u, 1009ll
u, 1259ll
u, 1597ll
u, 2011ll
u, 2539ll
u, 3203ll
u, 4027ll
u, 5087ll
u,
797 6421ll
u, 8089ll
u, 10193ll
u, 12853ll
u, 16193ll
u, 20399ll
u, 25717ll
u, 32401ll
u, 40823ll
u, 51437ll
u, 64811ll
u, 81649ll
u, 102877ll
u, 129607ll
u,
798 163307ll
u, 205759ll
u, 259229ll
u, 326617ll
u, 411527ll
u, 518509ll
u, 653267ll
u, 823117ll
u, 1037059ll
u, 1306601ll
u, 1646237ll
u, 2074129ll
u,
799 2613229ll
u, 3292489ll
u, 4148279ll
u, 5226491ll
u, 6584983ll
u, 8296553ll
u, 10453007ll
u, 13169977ll
u, 16593127ll
u, 20906033ll
u, 26339969ll
u,
800 33186281ll
u, 41812097ll
u, 52679969ll
u, 66372617ll
u, 83624237ll
u, 105359939ll
u, 132745199ll
u, 167248483ll
u, 210719881ll
u, 265490441ll
u,
801 334496971ll
u, 421439783ll
u, 530980861ll
u, 668993977ll
u, 842879579ll
u, 1061961721ll
u, 1337987929ll
u, 1685759167ll
u, 2123923447ll
u, 2675975881ll
u,
802 3371518343ll
u, 4247846927ll
u, 5351951779ll
u, 6743036717ll
u, 8495693897ll
u, 10703903591ll
u, 13486073473ll
u, 16991387857ll
u, 21407807219ll
u,
803 26972146961ll
u, 33982775741ll
u, 42815614441ll
u, 53944293929ll
u, 67965551447ll
u, 85631228929ll
u, 107888587883ll
u, 135931102921ll
u,
804 171262457903ll
u, 215777175787ll
u, 271862205833ll
u, 342524915839ll
u, 431554351609ll
u, 543724411781ll
u, 685049831731ll
u, 863108703229ll
u,
805 1087448823553ll
u, 1370099663459ll
u, 1726217406467ll
u, 2174897647073ll
u, 2740199326961ll
u, 3452434812973ll
u, 4349795294267ll
u, 5480398654009ll
u,
806 6904869625999ll
u, 8699590588571ll
u, 10960797308051ll
u, 13809739252051ll
u, 17399181177241ll
u, 21921594616111ll
u, 27619478504183ll
u,
807 34798362354533ll
u, 43843189232363ll
u, 55238957008387ll
u, 69596724709081ll
u, 87686378464759ll
u, 110477914016779ll
u, 139193449418173ll
u,
808 175372756929481ll
u, 220955828033581ll
u, 278386898836457ll
u, 350745513859007ll
u, 441911656067171ll
u, 556773797672909ll
u, 701491027718027ll
u,
809 883823312134381ll
u, 1113547595345903ll
u, 1402982055436147ll
u, 1767646624268779ll
u, 2227095190691797ll
u, 2805964110872297ll
u,
810 3535293248537579ll
u, 4454190381383713ll
u, 5611928221744609ll
u, 7070586497075177ll
u, 8908380762767489ll
u, 11223856443489329ll
u,
811 14141172994150357ll
u, 17816761525534927ll
u, 22447712886978529ll
u, 28282345988300791ll
u, 35633523051069991ll
u, 44895425773957261ll
u,
812 56564691976601587ll
u, 71267046102139967ll
u, 89790851547914507ll
u, 113129383953203213ll
u, 142534092204280003ll
u, 179581703095829107ll
u,
813 226258767906406483ll
u, 285068184408560057ll
u, 359163406191658253ll
u, 452517535812813007ll
u, 570136368817120201ll
u, 718326812383316683ll
u,
814 905035071625626043ll
u, 1140272737634240411ll
u, 1436653624766633509ll
u, 1810070143251252131ll
u, 2280545475268481167ll
u, 2873307249533267101ll
u,
815 3620140286502504283ll
u, 4561090950536962147ll
u, 5746614499066534157ll
u, 7240280573005008577ll
u, 9122181901073924329ll
u, 11493228998133068689ll
u,
816 14480561146010017169ll
u, 18446744073709551557ll
u};
817 static constexpr size_t (*
const mod_functions[])(
size_t) = {&
mod0, &
mod2, &
mod3, &
mod5, &
mod7, &
mod11, &
mod13, &
mod17, &
mod23, &
mod29, &
mod37,
818 &
mod47, &
mod59, &
mod73, &
mod97, &
mod127, &
mod151, &
mod197, &
mod251, &
mod313, &
mod397, &
mod499, &
mod631, &
mod797, &
mod1009, &
mod1259, &
mod1597,
819 &
mod2011, &
mod2539, &
mod3203, &
mod4027, &
mod5087, &
mod6421, &
mod8089, &
mod10193, &
mod12853, &
mod16193, &
mod20399, &
mod25717, &
mod32401,
820 &
mod40823, &
mod51437, &
mod64811, &
mod81649, &
mod102877, &
mod129607, &
mod163307, &
mod205759, &
mod259229, &
mod326617, &
mod411527, &
mod518509,
821 &
mod653267, &
mod823117, &
mod1037059, &
mod1306601, &
mod1646237, &
mod2074129, &
mod2613229, &
mod3292489, &
mod4148279, &
mod5226491, &
mod6584983,
822 &
mod8296553, &
mod10453007, &
mod13169977, &
mod16593127, &
mod20906033, &
mod26339969, &
mod33186281, &
mod41812097, &
mod52679969, &
mod66372617,
867 size_t keep_in_range(
const size_t index,
const size_t num_slots_minus_one)
const {
return index & num_slots_minus_one; }
880 template<
typename K,
typename V,
typename H = std::hash<K>,
typename E = std::equal_to<>,
typename A = std::allocator<Pair<K, V>>>
882 :
public detailv3::SherwoodV3Table<Pair<K, V>, K, H, detailv3::KeyOrValueHasher<K, Pair<K, V>, H>, E, detailv3::KeyOrValueEquality<K, Pair<K, V>, E>,
883 A, typename std::allocator_traits<A>::template rebind_alloc<detailv3::SherwoodV3Entry<Pair<K, V>>>> {
898 if(
found == this->end())
899 throw std::out_of_range(
"Argument passed to at() was not in the map.");
900 return found->second;
904 if(
found == this->end())
905 throw std::out_of_range(
"Argument passed to at() was not in the map.");
906 return found->second;
931 if(lhs.size() != rhs.size())
934 auto found = rhs.find(value.first);
935 if(
found == rhs.end())
937 else if(value.second !=
found->second)
946 operator V()
const {
return V(); }
950 template<
typename T,
typename H = std::hash<T>,
typename E = std::equal_to<>,
typename A = std::allocator<T>>
952 typename std::allocator_traits<A>::template rebind_alloc<detailv3::SherwoodV3Entry<T>>> {
971 for(
const T& value : lhs) {
972 if(rhs.
find(value) == rhs.
end())
Definition FlatHashMap.hpp:883
Table::iterator insert_or_assign(typename Table::const_iterator, const key_type &key, M &&m)
Definition FlatHashMap.hpp:923
V & at(const K &key)
Definition FlatHashMap.hpp:896
Table::iterator insert_or_assign(typename Table::const_iterator, key_type &&key, M &&m)
Definition FlatHashMap.hpp:926
Pair< typename Table::iterator, bool > emplace()
Definition FlatHashMap.hpp:910
K key_type
Definition FlatHashMap.hpp:888
Pair< typename Table::iterator, bool > insert_or_assign(key_type &&key, M &&m)
Definition FlatHashMap.hpp:917
friend bool operator!=(const FlatHashMap &lhs, const FlatHashMap &rhs)
Definition FlatHashMap.hpp:942
V & operator[](const K &key)
Definition FlatHashMap.hpp:894
const V & at(const K &key) const
Definition FlatHashMap.hpp:902
V mapped_type
Definition FlatHashMap.hpp:889
friend bool operator==(const FlatHashMap &lhs, const FlatHashMap &rhs)
Definition FlatHashMap.hpp:930
V & operator[](K &&key)
Definition FlatHashMap.hpp:895
FlatHashMap()
Definition FlatHashMap.hpp:892
Pair< typename Table::iterator, bool > insert_or_assign(const key_type &key, M &&m)
Definition FlatHashMap.hpp:911
Definition FlatHashMap.hpp:952
friend bool operator==(const FlatHashSet &lhs, const FlatHashSet &rhs)
Definition FlatHashMap.hpp:968
Pair< typename Table::iterator, bool > emplace(const key_type &arg)
Definition FlatHashMap.hpp:963
Pair< typename Table::iterator, bool > emplace(key_type &arg)
Definition FlatHashMap.hpp:964
friend bool operator!=(const FlatHashSet &lhs, const FlatHashSet &rhs)
Definition FlatHashMap.hpp:977
Pair< typename Table::iterator, bool > emplace(Args &&... args)
Definition FlatHashMap.hpp:962
Pair< typename Table::iterator, bool > emplace(key_type &&arg)
Definition FlatHashMap.hpp:966
Pair< typename Table::iterator, bool > emplace(const key_type &&arg)
Definition FlatHashMap.hpp:965
FlatHashSet()
Definition FlatHashMap.hpp:960
T key_type
Definition FlatHashMap.hpp:957
Definition FlatHashMap.hpp:151
void insert(std::initializer_list< value_type > il)
Definition FlatHashMap.hpp:370
SherwoodV3Table(SherwoodV3Table &&other) noexcept
Definition FlatHashMap.hpp:215
std::ptrdiff_t difference_type
Definition FlatHashMap.hpp:160
SherwoodV3Table()
Definition FlatHashMap.hpp:169
EntryPointer entries
Definition FlatHashMap.hpp:494
HashPolicySelector< ArgumentHash >::type hash_policy
Definition FlatHashMap.hpp:496
const allocator_type & get_allocator() const
Definition FlatHashMap.hpp:267
size_t num_buckets_for_reserve(const size_t num_elements) const
Definition FlatHashMap.hpp:506
void swap(SherwoodV3Table &other)
Definition FlatHashMap.hpp:467
size_t max_size() const
Definition FlatHashMap.hpp:477
iterator find(const FindKey &key)
Definition FlatHashMap.hpp:322
SherwoodV3Table & operator=(SherwoodV3Table &&other) noexcept
Definition FlatHashMap.hpp:240
const_iterator cbegin() const
Definition FlatHashMap.hpp:317
void reset_to_empty_state()
Definition FlatHashMap.hpp:565
size_t erase(const FindKey &key)
Definition FlatHashMap.hpp:447
size_t hash_object(const U &key) const
Definition FlatHashMap.hpp:574
size_t num_slots_minus_one
Definition FlatHashMap.hpp:495
SherwoodV3Table(std::initializer_list< T > il, size_type bucket_count, const ArgumentHash &hash, const ArgumentAlloc &alloc)
Definition FlatHashMap.hpp:200
detailv3::SherwoodV3Entry< T > Entry
Definition FlatHashMap.hpp:152
size_t bucket_count() const
Definition FlatHashMap.hpp:478
Pair< iterator, bool > insert(value_type &&value)
Definition FlatHashMap.hpp:360
Pair< iterator, bool > insert(const value_type &value)
Definition FlatHashMap.hpp:359
value_type & reference
Definition FlatHashMap.hpp:164
typename AllocatorTraits::pointer EntryPointer
Definition FlatHashMap.hpp:154
void rehash(size_t num_buckets)
Definition FlatHashMap.hpp:372
void swap_pointers(SherwoodV3Table &other)
Definition FlatHashMap.hpp:511
iterator insert(const_iterator, const value_type &value)
Definition FlatHashMap.hpp:362
void grow()
Definition FlatHashMap.hpp:557
bool compares_equal(const L &lhs, const R &rhs)
Definition FlatHashMap.hpp:575
iterator begin()
Definition FlatHashMap.hpp:305
void rehash_for_other_container(const SherwoodV3Table &other)
Definition FlatHashMap.hpp:509
int8_t max_lookups
Definition FlatHashMap.hpp:497
~SherwoodV3Table()
Definition FlatHashMap.hpp:262
SherwoodV3Table(size_type bucket_count, const ArgumentHash &hash, const ArgumentAlloc &alloc)
Definition FlatHashMap.hpp:176
size_t hash_object(const U &key)
Definition FlatHashMap.hpp:573
SherwoodV3Table(std::initializer_list< T > il, size_type bucket_count=0, const ArgumentHash &hash=ArgumentHash(), const ArgumentEqual &equal=ArgumentEqual(), const ArgumentAlloc &alloc=ArgumentAlloc())
Definition FlatHashMap.hpp:191
float max_load_factor() const
Definition FlatHashMap.hpp:489
bool empty() const
Definition FlatHashMap.hpp:491
EntryAlloc allocator_type
Definition FlatHashMap.hpp:163
size_t count(const FindKey &key) const
Definition FlatHashMap.hpp:332
void insert(It begin, It end)
Definition FlatHashMap.hpp:365
const_iterator cend() const
Definition FlatHashMap.hpp:320
SherwoodV3Table(const SherwoodV3Table &other)
Definition FlatHashMap.hpp:202
templated_iterator< const value_type > const_iterator
Definition FlatHashMap.hpp:303
const_iterator begin() const
Definition FlatHashMap.hpp:311
SherwoodV3Table(SherwoodV3Table &&other, const ArgumentAlloc &alloc) noexcept
Definition FlatHashMap.hpp:218
Pair< const_iterator, const_iterator > equal_range(const FindKey &key) const
Definition FlatHashMap.hpp:340
SherwoodV3Table(It first, It last, size_type bucket_count, const ArgumentHash &hash, const ArgumentAlloc &alloc)
Definition FlatHashMap.hpp:189
SherwoodV3Table(It first, It last, size_type bucket_count, const ArgumentAlloc &alloc)
Definition FlatHashMap.hpp:186
const ArgumentEqual & key_eq() const
Definition FlatHashMap.hpp:268
float _max_load_factor
Definition FlatHashMap.hpp:498
size_t size_type
Definition FlatHashMap.hpp:159
Pair< iterator, bool > emplace_new_key(int8_t distance_from_desired, EntryPointer current_entry, Key &&key, Args &&... args)
Definition FlatHashMap.hpp:522
void clear()
Definition FlatHashMap.hpp:457
templated_iterator< value_type > iterator
Definition FlatHashMap.hpp:302
void shrink_to_fit()
Definition FlatHashMap.hpp:465
size_t size() const
Definition FlatHashMap.hpp:476
SherwoodV3Table(It first, It last, size_type bucket_count=0, const ArgumentHash &hash=ArgumentHash(), const ArgumentEqual &equal=ArgumentEqual(), const ArgumentAlloc &alloc=ArgumentAlloc())
Definition FlatHashMap.hpp:180
iterator end()
Definition FlatHashMap.hpp:318
value_type * pointer
Definition FlatHashMap.hpp:166
const ArgumentHash & hash_function() const
Definition FlatHashMap.hpp:269
size_t num_elements
Definition FlatHashMap.hpp:499
void deallocate_data(EntryPointer begin, const size_t num_slots_minus_one, const int8_t max_lookups)
Definition FlatHashMap.hpp:559
float load_factor() const
Definition FlatHashMap.hpp:481
SherwoodV3Table(size_type bucket_count, const ArgumentAlloc &alloc)
Definition FlatHashMap.hpp:175
ArgumentHash hasher
Definition FlatHashMap.hpp:161
iterator emplace_hint(const_iterator, Args &&... args)
Definition FlatHashMap.hpp:361
T value_type
Definition FlatHashMap.hpp:158
std::allocator_traits< EntryAlloc > AllocatorTraits
Definition FlatHashMap.hpp:153
void max_load_factor(const float value)
Definition FlatHashMap.hpp:488
const value_type * const_pointer
Definition FlatHashMap.hpp:167
Pair< iterator, iterator > equal_range(const FindKey &key)
Definition FlatHashMap.hpp:333
const value_type & const_reference
Definition FlatHashMap.hpp:165
SherwoodV3Table(const SherwoodV3Table &other, const ArgumentAlloc &alloc)
Definition FlatHashMap.hpp:204
Pair< iterator, bool > emplace(Key &&key, Args &&... args)
Definition FlatHashMap.hpp:348
const_iterator end() const
Definition FlatHashMap.hpp:319
SherwoodV3Table & operator=(const SherwoodV3Table &other)
Definition FlatHashMap.hpp:222
SherwoodV3Table(const size_type bucket_count, const ArgumentHash &hash=ArgumentHash(), const ArgumentEqual &equal=ArgumentEqual(), const ArgumentAlloc &alloc=ArgumentAlloc())
Definition FlatHashMap.hpp:170
size_t bucket(const FindKey &key) const
Definition FlatHashMap.hpp:480
convertible_to_iterator erase(const_iterator to_erase)
Definition FlatHashMap.hpp:413
static int8_t compute_max_lookups(const size_t num_buckets)
Definition FlatHashMap.hpp:501
iterator erase(const_iterator begin_it, const_iterator end_it)
Definition FlatHashMap.hpp:424
SherwoodV3Table(std::initializer_list< T > il, size_type bucket_count, const ArgumentAlloc &alloc)
Definition FlatHashMap.hpp:198
SherwoodV3Table(const ArgumentAlloc &alloc)
Definition FlatHashMap.hpp:178
size_type max_bucket_count() const
Definition FlatHashMap.hpp:479
ArgumentEqual key_equal
Definition FlatHashMap.hpp:162
iterator insert(const_iterator, value_type &&value)
Definition FlatHashMap.hpp:363
void reserve(const size_t num_elements)
Definition FlatHashMap.hpp:403
const_iterator find(const FindKey &key) const
Definition FlatHashMap.hpp:331
void void_t
Definition FlatHashMap.hpp:144
size_t next_power_of_two(std::uint64_t i)
Definition FlatHashMap.hpp:132
int8_t log2(std::uint64_t value)
Definition FlatHashMap.hpp:111
Definition Application.hpp:19
std::pair< First, Second > Pair
Pair is a struct template that provides a way to store two heterogeneous objects as a single unit.
Definition Pair.hpp:18
constexpr FindAlgorithmFunctor find
Finds the first element equal to another element.
Definition Find.hpp:70
@ Key
The event is of type KeyEvent.
void copy(const A &a, B &b, T &&t=T())
Copies values from one container to another.
Definition Iterator.hpp:564
constexpr size_t hash(const T &v)
Generates a hash for the provided type.
Definition Hash.hpp:25
decltype(&*std::declval< I >() found)(const I &it, C &container)
Returns a pointer to the value if found, otherwise nullptr.
Definition Iterator.hpp:572
Definition FlatHashMap.hpp:945
A reflection pre-processor that creates a hash for an object.
Definition Hash.hpp:48
size_t hash
The computed hash.
Definition Hash.hpp:56
void operator()(T &, const T &)
Definition FlatHashMap.hpp:128
void operator()(T &, T &&)
Definition FlatHashMap.hpp:129
Definition FlatHashMap.hpp:123
void operator()(T &lhs, T &&rhs)
Definition FlatHashMap.hpp:125
void operator()(T &lhs, const T &rhs)
Definition FlatHashMap.hpp:124
FunctorStorage(const function_ptr function)
Definition FlatHashMap.hpp:39
Result operator()(Args... args) const
Definition FlatHashMap.hpp:40
function_ptr function
Definition FlatHashMap.hpp:38
Definition FlatHashMap.hpp:27
FunctorStorage(const Functor &functor)
Definition FlatHashMap.hpp:29
Result operator()(Args &&... args) const
Definition FlatHashMap.hpp:33
Result operator()(Args &&... args)
Definition FlatHashMap.hpp:31
T::hash_policy type
Definition FlatHashMap.hpp:148
Definition FlatHashMap.hpp:146
fibonacci_hash_policy type
Definition FlatHashMap.hpp:146
Definition FlatHashMap.hpp:57
FunctorStorage< bool, key_equal > equality_storage
Definition FlatHashMap.hpp:58
bool operator()(const Pair< FL, SL > &lhs, const Pair< FR, SR > &rhs)
Definition FlatHashMap.hpp:77
bool operator()(const value_type &lhs, const Pair< F, S > &rhs)
Definition FlatHashMap.hpp:71
KeyOrValueEquality(const key_equal &equality)
Definition FlatHashMap.hpp:60
bool operator()(const key_type &lhs, const key_type &rhs)
Definition FlatHashMap.hpp:61
KeyOrValueEquality()=default
bool operator()(const key_type &lhs, const Pair< F, S > &rhs)
Definition FlatHashMap.hpp:65
bool operator()(const value_type &lhs, const key_type &rhs)
Definition FlatHashMap.hpp:63
bool operator()(const value_type &lhs, const value_type &rhs)
Definition FlatHashMap.hpp:64
bool operator()(const key_type &lhs, const value_type &rhs)
Definition FlatHashMap.hpp:62
bool operator()(const Pair< F, S > &lhs, const value_type &rhs)
Definition FlatHashMap.hpp:74
bool operator()(const Pair< F, S > &lhs, const key_type &rhs)
Definition FlatHashMap.hpp:68
Definition FlatHashMap.hpp:45
size_t operator()(const value_type &value)
Definition FlatHashMap.hpp:51
size_t operator()(const Pair< F, S > &value)
Definition FlatHashMap.hpp:53
size_t operator()(const key_type &key)
Definition FlatHashMap.hpp:49
KeyOrValueHasher()=default
size_t operator()(const Pair< F, S > &value) const
Definition FlatHashMap.hpp:54
FunctorStorage< size_t, hasher > hasher_storage
Definition FlatHashMap.hpp:46
size_t operator()(const value_type &value) const
Definition FlatHashMap.hpp:52
size_t operator()(const key_type &key) const
Definition FlatHashMap.hpp:50
KeyOrValueHasher(const hasher &hash)
Definition FlatHashMap.hpp:48
Definition FlatHashMap.hpp:82
~SherwoodV3Entry()
Definition FlatHashMap.hpp:85
SherwoodV3Entry()
Definition FlatHashMap.hpp:83
void emplace(const int8_t distance, Args &&... args)
Definition FlatHashMap.hpp:94
bool has_value() const
Definition FlatHashMap.hpp:91
int8_t distance_from_desired
Definition FlatHashMap.hpp:104
bool is_empty() const
Definition FlatHashMap.hpp:92
static SherwoodV3Entry * empty_default_table()
Definition FlatHashMap.hpp:86
SherwoodV3Entry(const int8_t distance_from_desired)
Definition FlatHashMap.hpp:84
bool is_at_desired_position() const
Definition FlatHashMap.hpp:93
static constexpr int8_t special_end_value
Definition FlatHashMap.hpp:105
T value
Definition FlatHashMap.hpp:107
void destroy_value()
Definition FlatHashMap.hpp:99
Definition FlatHashMap.hpp:577
EntryPointer it
Definition FlatHashMap.hpp:578
Definition FlatHashMap.hpp:271
templated_iterator()=default
templated_iterator(EntryPointer current)
Definition FlatHashMap.hpp:273
std::forward_iterator_tag iterator_category
Definition FlatHashMap.hpp:276
ValueType * pointer
Definition FlatHashMap.hpp:279
friend bool operator==(const templated_iterator &lhs, const templated_iterator &rhs)
Definition FlatHashMap.hpp:282
ValueType & operator*() const
Definition FlatHashMap.hpp:297
EntryPointer current
Definition FlatHashMap.hpp:274
ValueType value_type
Definition FlatHashMap.hpp:277
templated_iterator operator++(int)
Definition FlatHashMap.hpp:291
ptrdiff_t difference_type
Definition FlatHashMap.hpp:278
ValueType & reference
Definition FlatHashMap.hpp:280
ValueType * operator->() const
Definition FlatHashMap.hpp:298
templated_iterator & operator++()
Definition FlatHashMap.hpp:285
friend bool operator!=(const templated_iterator &lhs, const templated_iterator &rhs)
Definition FlatHashMap.hpp:283
Definition FlatHashMap.hpp:865
size_t keep_in_range(const size_t index, const size_t num_slots_minus_one) const
Definition FlatHashMap.hpp:867
void commit(const int8_t shift)
Definition FlatHashMap.hpp:873
size_t index_for_hash(const size_t hash, size_t) const
Definition FlatHashMap.hpp:866
int8_t shift
Definition FlatHashMap.hpp:877
void reset()
Definition FlatHashMap.hpp:874
int8_t next_size_over(size_t &size) const
Definition FlatHashMap.hpp:869
Definition FlatHashMap.hpp:854
void reset()
Definition FlatHashMap.hpp:862
size_t keep_in_range(const size_t index, const size_t num_slots_minus_one) const
Definition FlatHashMap.hpp:856
size_t index_for_hash(const size_t hash, const size_t num_slots_minus_one) const
Definition FlatHashMap.hpp:855
int8_t next_size_over(size_t &size) const
Definition FlatHashMap.hpp:857
void commit(int8_t)
Definition FlatHashMap.hpp:861
Definition FlatHashMap.hpp:980
power_of_two_hash_policy hash_policy
Definition FlatHashMap.hpp:980
Definition FlatHashMap.hpp:596
static size_t mod543724411781(const size_t hash)
Definition FlatHashMap.hpp:708
static size_t mod251(const size_t hash)
Definition FlatHashMap.hpp:615
static size_t mod631(const size_t hash)
Definition FlatHashMap.hpp:619
static size_t mod43843189232363(const size_t hash)
Definition FlatHashMap.hpp:727
static size_t mod1061961721(const size_t hash)
Definition FlatHashMap.hpp:681
static size_t mod421439783(const size_t hash)
Definition FlatHashMap.hpp:677
static size_t mod2613229(const size_t hash)
Definition FlatHashMap.hpp:655
static size_t mod27619478504183(const size_t hash)
Definition FlatHashMap.hpp:725
static size_t mod17816761525534927(const size_t hash)
Definition FlatHashMap.hpp:753
static size_t mod10960797308051(const size_t hash)
Definition FlatHashMap.hpp:721
static size_t mod701491027718027(const size_t hash)
Definition FlatHashMap.hpp:739
static size_t mod883823312134381(const size_t hash)
Definition FlatHashMap.hpp:740
static size_t mod0(size_t)
Definition FlatHashMap.hpp:597
static size_t mod105359939(const size_t hash)
Definition FlatHashMap.hpp:671
static size_t mod67965551447(const size_t hash)
Definition FlatHashMap.hpp:699
static size_t mod5226491(const size_t hash)
Definition FlatHashMap.hpp:658
static size_t mod1685759167(const size_t hash)
Definition FlatHashMap.hpp:683
static size_t mod5611928221744609(const size_t hash)
Definition FlatHashMap.hpp:748
static size_t mod397(const size_t hash)
Definition FlatHashMap.hpp:617
static size_t mod83624237(const size_t hash)
Definition FlatHashMap.hpp:670
static size_t mod1306601(const size_t hash)
Definition FlatHashMap.hpp:652
static size_t mod8089(const size_t hash)
Definition FlatHashMap.hpp:630
mod_function current_mod_function
Definition FlatHashMap.hpp:851
static size_t mod59(const size_t hash)
Definition FlatHashMap.hpp:609
static size_t mod1259(const size_t hash)
Definition FlatHashMap.hpp:622
size_t keep_in_range(const size_t index, const size_t num_slots_minus_one) const
Definition FlatHashMap.hpp:848
static size_t mod3620140286502504283(const size_t hash)
Definition FlatHashMap.hpp:776
static size_t mod2675975881(const size_t hash)
Definition FlatHashMap.hpp:685
static size_t mod210719881(const size_t hash)
Definition FlatHashMap.hpp:674
static size_t mod51437(const size_t hash)
Definition FlatHashMap.hpp:638
static size_t mod33982775741(const size_t hash)
Definition FlatHashMap.hpp:696
static size_t mod9122181901073924329(const size_t hash)
Definition FlatHashMap.hpp:780
static size_t mod113129383953203213(const size_t hash)
Definition FlatHashMap.hpp:761
static size_t mod6904869625999(const size_t hash)
Definition FlatHashMap.hpp:719
static size_t mod411527(const size_t hash)
Definition FlatHashMap.hpp:647
static size_t mod556773797672909(const size_t hash)
Definition FlatHashMap.hpp:738
static size_t mod2805964110872297(const size_t hash)
Definition FlatHashMap.hpp:745
static size_t mod220955828033581(const size_t hash)
Definition FlatHashMap.hpp:734
static size_t mod2539(const size_t hash)
Definition FlatHashMap.hpp:625
static size_t mod29(const size_t hash)
Definition FlatHashMap.hpp:606
static size_t mod7070586497075177(const size_t hash)
Definition FlatHashMap.hpp:749
static size_t mod2873307249533267101(const size_t hash)
Definition FlatHashMap.hpp:775
static size_t mod10453007(const size_t hash)
Definition FlatHashMap.hpp:661
static size_t mod1087448823553(const size_t hash)
Definition FlatHashMap.hpp:711
void reset()
Definition FlatHashMap.hpp:845
static size_t mod334496971(const size_t hash)
Definition FlatHashMap.hpp:676
static size_t mod4027(const size_t hash)
Definition FlatHashMap.hpp:627
static size_t mod1370099663459(const size_t hash)
Definition FlatHashMap.hpp:712
static size_t mod530980861(const size_t hash)
Definition FlatHashMap.hpp:678
static size_t mod4148279(const size_t hash)
Definition FlatHashMap.hpp:657
static size_t mod1009(const size_t hash)
Definition FlatHashMap.hpp:621
static size_t mod3452434812973(const size_t hash)
Definition FlatHashMap.hpp:716
static size_t mod1140272737634240411(const size_t hash)
Definition FlatHashMap.hpp:771
static size_t mod570136368817120201(const size_t hash)
Definition FlatHashMap.hpp:768
static size_t mod1597(const size_t hash)
Definition FlatHashMap.hpp:623
static size_t mod22447712886978529(const size_t hash)
Definition FlatHashMap.hpp:754
static size_t mod13169977(const size_t hash)
Definition FlatHashMap.hpp:662
static size_t mod2(const size_t hash)
Definition FlatHashMap.hpp:598
static size_t mod2280545475268481167(const size_t hash)
Definition FlatHashMap.hpp:774
static size_t mod87686378464759(const size_t hash)
Definition FlatHashMap.hpp:730
static size_t mod1810070143251252131(const size_t hash)
Definition FlatHashMap.hpp:773
static size_t mod205759(const size_t hash)
Definition FlatHashMap.hpp:644
static size_t mod11493228998133068689(const size_t hash)
Definition FlatHashMap.hpp:781
static size_t mod431554351609(const size_t hash)
Definition FlatHashMap.hpp:707
static size_t mod12853(const size_t hash)
Definition FlatHashMap.hpp:632
static size_t mod285068184408560057(const size_t hash)
Definition FlatHashMap.hpp:765
static size_t mod259229(const size_t hash)
Definition FlatHashMap.hpp:645
static size_t mod175372756929481(const size_t hash)
Definition FlatHashMap.hpp:733
static size_t mod3(const size_t hash)
Definition FlatHashMap.hpp:599
static size_t mod85631228929(const size_t hash)
Definition FlatHashMap.hpp:700
static size_t mod499(const size_t hash)
Definition FlatHashMap.hpp:618
static size_t mod2740199326961(const size_t hash)
Definition FlatHashMap.hpp:715
static size_t mod13809739252051(const size_t hash)
Definition FlatHashMap.hpp:722
static size_t mod26972146961(const size_t hash)
Definition FlatHashMap.hpp:695
static size_t mod4561090950536962147(const size_t hash)
Definition FlatHashMap.hpp:777
static size_t mod1436653624766633509(const size_t hash)
Definition FlatHashMap.hpp:772
static size_t mod7(const size_t hash)
Definition FlatHashMap.hpp:601
static size_t mod718326812383316683(const size_t hash)
Definition FlatHashMap.hpp:769
static size_t mod1402982055436147(const size_t hash)
Definition FlatHashMap.hpp:742
static size_t mod40823(const size_t hash)
Definition FlatHashMap.hpp:637
static size_t mod97(const size_t hash)
Definition FlatHashMap.hpp:611
static size_t mod5(const size_t hash)
Definition FlatHashMap.hpp:600
static size_t mod10703903591(const size_t hash)
Definition FlatHashMap.hpp:691
static size_t mod110477914016779(const size_t hash)
Definition FlatHashMap.hpp:731
static size_t mod5480398654009(const size_t hash)
Definition FlatHashMap.hpp:718
static size_t mod4349795294267(const size_t hash)
Definition FlatHashMap.hpp:717
static size_t mod653267(const size_t hash)
Definition FlatHashMap.hpp:649
static size_t mod1646237(const size_t hash)
Definition FlatHashMap.hpp:653
static size_t mod17(const size_t hash)
Definition FlatHashMap.hpp:604
static size_t mod5351951779(const size_t hash)
Definition FlatHashMap.hpp:688
static size_t mod129607(const size_t hash)
Definition FlatHashMap.hpp:642
static size_t mod1767646624268779(const size_t hash)
Definition FlatHashMap.hpp:743
static size_t mod64811(const size_t hash)
Definition FlatHashMap.hpp:639
static size_t mod4454190381383713(const size_t hash)
Definition FlatHashMap.hpp:747
static size_t mod52679969(const size_t hash)
Definition FlatHashMap.hpp:668
static size_t mod26339969(const size_t hash)
Definition FlatHashMap.hpp:665
static size_t mod823117(const size_t hash)
Definition FlatHashMap.hpp:650
static size_t mod13(const size_t hash)
Definition FlatHashMap.hpp:603
static size_t mod11(const size_t hash)
Definition FlatHashMap.hpp:602
static size_t mod668993977(const size_t hash)
Definition FlatHashMap.hpp:679
void commit(const mod_function new_mod_function)
Definition FlatHashMap.hpp:844
static size_t mod3371518343(const size_t hash)
Definition FlatHashMap.hpp:686
static size_t mod7240280573005008577(const size_t hash)
Definition FlatHashMap.hpp:779
static size_t mod73(const size_t hash)
Definition FlatHashMap.hpp:610
static size_t mod197(const size_t hash)
Definition FlatHashMap.hpp:614
static size_t mod1337987929(const size_t hash)
Definition FlatHashMap.hpp:682
static size_t mod6743036717(const size_t hash)
Definition FlatHashMap.hpp:689
static size_t mod265490441(const size_t hash)
Definition FlatHashMap.hpp:675
static size_t mod25717(const size_t hash)
Definition FlatHashMap.hpp:635
static size_t mod2074129(const size_t hash)
Definition FlatHashMap.hpp:654
static size_t mod53944293929(const size_t hash)
Definition FlatHashMap.hpp:698
static size_t mod41812097(const size_t hash)
Definition FlatHashMap.hpp:667
static size_t mod278386898836457(const size_t hash)
Definition FlatHashMap.hpp:735
static size_t mod135931102921(const size_t hash)
Definition FlatHashMap.hpp:702
static size_t mod342524915839(const size_t hash)
Definition FlatHashMap.hpp:706
static size_t mod6584983(const size_t hash)
Definition FlatHashMap.hpp:659
static size_t mod102877(const size_t hash)
Definition FlatHashMap.hpp:641
static size_t mod6421(const size_t hash)
Definition FlatHashMap.hpp:629
static size_t mod66372617(const size_t hash)
Definition FlatHashMap.hpp:669
static size_t mod89790851547914507(const size_t hash)
Definition FlatHashMap.hpp:760
static size_t mod3292489(const size_t hash)
Definition FlatHashMap.hpp:656
static size_t mod797(const size_t hash)
Definition FlatHashMap.hpp:620
static size_t mod17399181177241(const size_t hash)
Definition FlatHashMap.hpp:723
static size_t mod1113547595345903(const size_t hash)
Definition FlatHashMap.hpp:741
static size_t mod34798362354533(const size_t hash)
Definition FlatHashMap.hpp:726
static size_t mod142534092204280003(const size_t hash)
Definition FlatHashMap.hpp:762
static size_t mod452517535812813007(const size_t hash)
Definition FlatHashMap.hpp:767
static size_t mod167248483(const size_t hash)
Definition FlatHashMap.hpp:673
static size_t mod14480561146010017169(const size_t hash)
Definition FlatHashMap.hpp:782
static size_t mod18446744073709551557(const size_t hash)
Definition FlatHashMap.hpp:783
static size_t mod441911656067171(const size_t hash)
Definition FlatHashMap.hpp:737
size_t(*)(size_t) mod_function
Definition FlatHashMap.hpp:785
static size_t mod33186281(const size_t hash)
Definition FlatHashMap.hpp:666
static size_t mod8908380762767489(const size_t hash)
Definition FlatHashMap.hpp:750
static size_t mod271862205833(const size_t hash)
Definition FlatHashMap.hpp:705
static size_t mod359163406191658253(const size_t hash)
Definition FlatHashMap.hpp:766
static size_t mod42815614441(const size_t hash)
Definition FlatHashMap.hpp:697
static size_t mod16193(const size_t hash)
Definition FlatHashMap.hpp:633
static size_t mod326617(const size_t hash)
Definition FlatHashMap.hpp:646
static size_t mod151(const size_t hash)
Definition FlatHashMap.hpp:613
static size_t mod2011(const size_t hash)
Definition FlatHashMap.hpp:624
static size_t mod10193(const size_t hash)
Definition FlatHashMap.hpp:631
static size_t mod2123923447(const size_t hash)
Definition FlatHashMap.hpp:684
static size_t mod4247846927(const size_t hash)
Definition FlatHashMap.hpp:687
static size_t mod81649(const size_t hash)
Definition FlatHashMap.hpp:640
static size_t mod1037059(const size_t hash)
Definition FlatHashMap.hpp:651
static size_t mod35633523051069991(const size_t hash)
Definition FlatHashMap.hpp:756
static size_t mod313(const size_t hash)
Definition FlatHashMap.hpp:616
static size_t mod171262457903(const size_t hash)
Definition FlatHashMap.hpp:703
static size_t mod14141172994150357(const size_t hash)
Definition FlatHashMap.hpp:752
static size_t mod21407807219(const size_t hash)
Definition FlatHashMap.hpp:694
static size_t mod163307(const size_t hash)
Definition FlatHashMap.hpp:643
static size_t mod350745513859007(const size_t hash)
Definition FlatHashMap.hpp:736
static size_t mod2174897647073(const size_t hash)
Definition FlatHashMap.hpp:714
static size_t mod842879579(const size_t hash)
Definition FlatHashMap.hpp:680
static size_t mod8699590588571(const size_t hash)
Definition FlatHashMap.hpp:720
static size_t mod37(const size_t hash)
Definition FlatHashMap.hpp:607
static size_t mod71267046102139967(const size_t hash)
Definition FlatHashMap.hpp:759
size_t index_for_hash(const size_t hash, size_t) const
Definition FlatHashMap.hpp:847
static size_t mod863108703229(const size_t hash)
Definition FlatHashMap.hpp:710
static size_t mod179581703095829107(const size_t hash)
Definition FlatHashMap.hpp:763
static size_t mod20399(const size_t hash)
Definition FlatHashMap.hpp:634
static size_t mod32401(const size_t hash)
Definition FlatHashMap.hpp:636
static size_t mod55238957008387(const size_t hash)
Definition FlatHashMap.hpp:728
static size_t mod3535293248537579(const size_t hash)
Definition FlatHashMap.hpp:746
static size_t mod226258767906406483(const size_t hash)
Definition FlatHashMap.hpp:764
static size_t mod56564691976601587(const size_t hash)
Definition FlatHashMap.hpp:758
static size_t mod685049831731(const size_t hash)
Definition FlatHashMap.hpp:709
mod_function next_size_over(size_t &size) const
Definition FlatHashMap.hpp:787
static size_t mod11223856443489329(const size_t hash)
Definition FlatHashMap.hpp:751
static size_t mod139193449418173(const size_t hash)
Definition FlatHashMap.hpp:732
static size_t mod20906033(const size_t hash)
Definition FlatHashMap.hpp:664
static size_t mod905035071625626043(const size_t hash)
Definition FlatHashMap.hpp:770
static size_t mod107888587883(const size_t hash)
Definition FlatHashMap.hpp:701
static size_t mod16991387857(const size_t hash)
Definition FlatHashMap.hpp:693
static size_t mod21921594616111(const size_t hash)
Definition FlatHashMap.hpp:724
static size_t mod127(const size_t hash)
Definition FlatHashMap.hpp:612
static size_t mod518509(const size_t hash)
Definition FlatHashMap.hpp:648
static size_t mod8495693897(const size_t hash)
Definition FlatHashMap.hpp:690
static size_t mod5087(const size_t hash)
Definition FlatHashMap.hpp:628
static size_t mod69596724709081(const size_t hash)
Definition FlatHashMap.hpp:729
static size_t mod3203(const size_t hash)
Definition FlatHashMap.hpp:626
static size_t mod1726217406467(const size_t hash)
Definition FlatHashMap.hpp:713
static size_t mod8296553(const size_t hash)
Definition FlatHashMap.hpp:660
static size_t mod132745199(const size_t hash)
Definition FlatHashMap.hpp:672
static size_t mod215777175787(const size_t hash)
Definition FlatHashMap.hpp:704
static size_t mod16593127(const size_t hash)
Definition FlatHashMap.hpp:663
static size_t mod47(const size_t hash)
Definition FlatHashMap.hpp:608
static size_t mod13486073473(const size_t hash)
Definition FlatHashMap.hpp:692
static size_t mod44895425773957261(const size_t hash)
Definition FlatHashMap.hpp:757
static size_t mod2227095190691797(const size_t hash)
Definition FlatHashMap.hpp:744
static size_t mod23(const size_t hash)
Definition FlatHashMap.hpp:605
static size_t mod28282345988300791(const size_t hash)
Definition FlatHashMap.hpp:755
static size_t mod5746614499066534157(const size_t hash)
Definition FlatHashMap.hpp:778