24 #ifndef TSL_ROBIN_SET_H 25 #define TSL_ROBIN_SET_H 30 #include <initializer_list> 32 #include <type_traits> 75 template <
class Key,
class Hash = std::hash<Key>,
class KeyEqual = std::equal_to<Key>,
76 class Allocator = std::allocator<Key>,
bool StoreHash = false,
77 class GrowthPolicy = tsl::rh::power_of_two_growth_policy<2>>
94 StoreHash, GrowthPolicy>;
117 const KeyEqual &equal = KeyEqual(),
const Allocator &alloc = Allocator())
118 :
m_ht(bucket_count_, hash, equal, alloc,
ht::DEFAULT_MAX_LOAD_FACTOR)
123 :
robin_set(bucket_count_, Hash(), KeyEqual(), alloc)
128 :
robin_set(bucket_count_, hash, KeyEqual(), alloc)
134 template <
class InputIt>
136 const Hash &hash = Hash(),
const KeyEqual &equal = KeyEqual(),
137 const Allocator &alloc = Allocator())
138 :
robin_set(bucket_count_, hash, equal, alloc)
143 template <
class InputIt>
145 :
robin_set(first, last, bucket_count_, Hash(), KeyEqual(), alloc)
149 template <
class InputIt>
151 const Allocator &alloc)
152 :
robin_set(first, last, bucket_count_, hash, KeyEqual(), alloc)
158 const KeyEqual &equal = KeyEqual(),
const Allocator &alloc = Allocator())
164 const Allocator &alloc)
170 const Allocator &alloc)
224 template <
class InputIt>
void insert(InputIt first, InputIt last) {
m_ht.
insert(first, last); }
226 void insert(std::initializer_list<value_type> ilist)
237 template <
class... Args> std::pair<iterator, bool>
emplace(Args &&... args)
265 return m_ht.
erase(key, precalculated_hash);
272 template <
class K,
class KE = KeyEqual,
273 typename std::enable_if<has_is_transparent<KE>::value>::type * =
nullptr>
286 template <
class K,
class KE = KeyEqual,
287 typename std::enable_if<has_is_transparent<KE>::value>::type * =
nullptr>
290 return m_ht.
erase(key, precalculated_hash);
307 return m_ht.
count(key, precalculated_hash);
314 template <
class K,
class KE = KeyEqual,
315 typename std::enable_if<has_is_transparent<KE>::value>::type * =
nullptr>
328 template <
class K,
class KE = KeyEqual,
329 typename std::enable_if<has_is_transparent<KE>::value>::type * =
nullptr>
332 return m_ht.
count(key, precalculated_hash);
344 return m_ht.
find(key, precalculated_hash);
354 return m_ht.
find(key, precalculated_hash);
361 template <
class K,
class KE = KeyEqual,
362 typename std::enable_if<has_is_transparent<KE>::value>::type * =
nullptr>
375 template <
class K,
class KE = KeyEqual,
376 typename std::enable_if<has_is_transparent<KE>::value>::type * =
nullptr>
379 return m_ht.
find(key, precalculated_hash);
385 template <
class K,
class KE = KeyEqual,
386 typename std::enable_if<has_is_transparent<KE>::value>::type * =
nullptr>
399 template <
class K,
class KE = KeyEqual,
400 typename std::enable_if<has_is_transparent<KE>::value>::type * =
nullptr>
403 return m_ht.
find(key, precalculated_hash);
413 std::pair<iterator, iterator>
equal_range(
const Key &key, std::size_t precalculated_hash)
418 std::pair<const_iterator, const_iterator>
equal_range(
const Key &key)
const 426 std::pair<const_iterator, const_iterator>
equal_range(
const Key & key,
427 std::size_t precalculated_hash)
const 436 template <
class K,
class KE = KeyEqual,
437 typename std::enable_if<has_is_transparent<KE>::value>::type * =
nullptr>
450 template <
class K,
class KE = KeyEqual,
451 typename std::enable_if<has_is_transparent<KE>::value>::type * =
nullptr>
452 std::pair<iterator, iterator>
equal_range(
const K &key, std::size_t precalculated_hash)
460 template <
class K,
class KE = KeyEqual,
461 typename std::enable_if<has_is_transparent<KE>::value>::type * =
nullptr>
462 std::pair<const_iterator, const_iterator>
equal_range(
const K &key)
const 470 template <
class K,
class KE = KeyEqual,
471 typename std::enable_if<has_is_transparent<KE>::value>::type * =
nullptr>
472 std::pair<const_iterator, const_iterator>
equal_range(
const K & key,
473 std::size_t precalculated_hash)
const 515 for (
const auto &element_lhs : lhs) {
516 const auto it_element_rhs = rhs.
find(element_lhs);
517 if (it_element_rhs == rhs.
cend()) {
540 template <
class Key,
class Hash = std::hash<Key>,
class KeyEqual = std::equal_to<Key>,
541 class Allocator = std::allocator<Key>,
bool StoreHash = false>
typename ht::reference reference
Definition: robin_set.h:104
std::pair< iterator, iterator > equal_range(const K &key)
Definition: robin_hash.h:886
Definition: robin_set.h:83
const_iterator find(const Key &key) const
Definition: robin_set.h:347
value_type & reference
Definition: robin_hash.h:323
size_type erase(const key_type &key, std::size_t precalculated_hash)
Definition: robin_set.h:263
iterator end() noexcept
Definition: robin_hash.h:593
size_type count(const K &key, std::size_t precalculated_hash) const
Definition: robin_set.h:330
std::pair< iterator, bool > insert(value_type &&value)
Definition: robin_set.h:212
robin_set(InputIt first, InputIt last, size_type bucket_count_, const Allocator &alloc)
Definition: robin_set.h:144
std::size_t size_type
Definition: robin_hash.h:318
iterator mutable_iterator(const_iterator pos)
Definition: robin_set.h:507
const_iterator begin() const noexcept
Definition: robin_set.h:191
const_iterator find(const K &key, std::size_t precalculated_hash) const
Definition: robin_set.h:401
iterator find(const K &key, std::size_t precalculated_hash)
Definition: robin_set.h:377
iterator insert(const_iterator hint, value_type &&value)
Definition: robin_set.h:219
size_type bucket_count() const
Definition: robin_hash.h:912
size_type max_bucket_count() const
Definition: robin_hash.h:914
iterator end() noexcept
Definition: robin_set.h:194
typename ht::const_pointer const_pointer
Definition: robin_set.h:107
const value_type & const_reference
Definition: robin_hash.h:324
std::pair< iterator, bool > insert(P &&value)
Definition: robin_hash.h:621
std::pair< iterator, iterator > equal_range(const Key &key, std::size_t precalculated_hash)
Definition: robin_set.h:413
float load_factor() const
Definition: robin_hash.h:922
typename KeySelect::key_type key_type
Definition: robin_hash.h:316
size_type erase(const key_type &key)
Definition: robin_set.h:256
iterator insert(const_iterator hint, const value_type &value)
Definition: robin_set.h:214
Definition: hopscotch_growth_policy.h:37
typename ht::const_reference const_reference
Definition: robin_set.h:105
robin_set(size_type bucket_count_, const Allocator &alloc)
Definition: robin_set.h:122
size_type size() const noexcept
Definition: robin_set.h:202
std::pair< iterator, bool > emplace(Args &&... args)
Definition: robin_set.h:237
iterator emplace_hint(const_iterator hint, Args &&... args)
Definition: robin_set.h:248
std::pair< iterator, bool > insert(const value_type &value)
Definition: robin_set.h:210
Key value_type
Definition: robin_hash.h:317
typename ht::pointer pointer
Definition: robin_set.h:106
Key key_type
Definition: robin_set.h:86
iterator begin() noexcept
Definition: robin_hash.h:571
typename ht::difference_type difference_type
Definition: robin_set.h:100
size_type count(const K &key) const
Definition: robin_hash.h:857
typename ht::iterator iterator
Definition: robin_set.h:108
hasher hash_function() const
Definition: robin_set.h:497
robin_set(size_type bucket_count_, const Hash &hash, const Allocator &alloc)
Definition: robin_set.h:127
void clear() noexcept
Definition: robin_hash.h:611
const value_type * const_pointer
Definition: robin_hash.h:326
size_type bucket_count() const
Definition: robin_set.h:481
iterator erase(const_iterator first, const_iterator last)
Definition: robin_set.h:255
iterator erase(iterator pos)
Definition: robin_hash.h:707
robin_set(InputIt first, InputIt last, size_type bucket_count_=ht::DEFAULT_INIT_BUCKETS_SIZE, const Hash &hash=Hash(), const KeyEqual &equal=KeyEqual(), const Allocator &alloc=Allocator())
Definition: robin_set.h:135
const_iterator cend() const noexcept
Definition: robin_set.h:196
const_iterator cbegin() const noexcept
Definition: robin_hash.h:583
size_type size() const noexcept
Definition: robin_hash.h:604
void max_load_factor(float ml)
Definition: robin_set.h:489
friend void swap(robin_set &lhs, robin_set &rhs)
Definition: robin_set.h:530
std::pair< const_iterator, const_iterator > equal_range(const Key &key, std::size_t precalculated_hash) const
Definition: robin_set.h:426
const_iterator cend() const noexcept
Definition: robin_hash.h:597
KeyEqual key_equal
Definition: robin_hash.h:321
size_type erase(const K &key)
Definition: robin_set.h:274
iterator find(const K &key)
Definition: robin_set.h:363
iterator erase(const_iterator pos)
Definition: robin_set.h:254
robin_set(std::initializer_list< value_type > init, size_type bucket_count_, const Allocator &alloc)
Definition: robin_set.h:163
iterator mutable_iterator(const_iterator pos)
Definition: robin_hash.h:960
bool empty() const noexcept
Definition: robin_set.h:201
std::pair< const_iterator, const_iterator > equal_range(const K &key, std::size_t precalculated_hash) const
Definition: robin_set.h:472
std::pair< iterator, iterator > equal_range(const K &key, std::size_t precalculated_hash)
Definition: robin_set.h:452
key_equal key_eq() const
Definition: robin_set.h:498
void rehash(size_type count_)
Definition: robin_set.h:491
iterator emplace_hint(const_iterator hint, Args &&... args)
Definition: robin_hash.h:680
size_type max_size() const noexcept
Definition: robin_hash.h:606
robin_set()
Definition: robin_set.h:114
robin_iterator< true > const_iterator
Definition: robin_hash.h:328
void swap(robin_hash &other)
Definition: robin_hash.h:796
const_iterator find(const Key &key, std::size_t precalculated_hash) const
Definition: robin_set.h:352
iterator erase(iterator pos)
Definition: robin_set.h:253
key_type & operator()(Key &key) noexcept
Definition: robin_set.h:90
typename ht::size_type size_type
Definition: robin_set.h:99
const_iterator find(const K &key) const
Definition: robin_set.h:387
Allocator allocator_type
Definition: robin_hash.h:322
robin_set(const Allocator &alloc)
Definition: robin_set.h:132
typename ht::key_equal key_equal
Definition: robin_set.h:102
size_type count(const Key &key) const
Definition: robin_set.h:298
typename ht::key_type key_type
Definition: robin_set.h:97
std::pair< const_iterator, const_iterator > equal_range(const Key &key) const
Definition: robin_set.h:418
robin_set(size_type bucket_count_, const Hash &hash=Hash(), const KeyEqual &equal=KeyEqual(), const Allocator &alloc=Allocator())
Definition: robin_set.h:116
iterator find(const K &key)
Definition: robin_hash.h:869
size_type count(const K &key) const
Definition: robin_set.h:316
Definition: robin_hash.h:52
allocator_type get_allocator() const
Definition: robin_set.h:185
void rehash(size_type count_)
Definition: robin_hash.h:939
typename ht::allocator_type allocator_type
Definition: robin_set.h:103
const_iterator cbegin() const noexcept
Definition: robin_set.h:192
Definition: robin_set.h:78
void reserve(size_type count_)
Definition: robin_set.h:492
typename ht::value_type value_type
Definition: robin_set.h:98
std::pair< const_iterator, const_iterator > equal_range(const K &key) const
Definition: robin_set.h:462
const key_type & operator()(const Key &key) const noexcept
Definition: robin_set.h:88
robin_set & operator=(std::initializer_list< value_type > ilist)
Definition: robin_set.h:175
key_equal key_eq() const
Definition: robin_hash.h:955
std::pair< iterator, iterator > equal_range(const Key &key)
Definition: robin_set.h:406
robin_set(InputIt first, InputIt last, size_type bucket_count_, const Hash &hash, const Allocator &alloc)
Definition: robin_set.h:150
static const size_type DEFAULT_INIT_BUCKETS_SIZE
Definition: robin_hash.h:1204
struct anonymous_namespace{Ioss_SmartAssert.C}::assert_initializer init
typename ht::hasher hasher
Definition: robin_set.h:101
Hash hasher
Definition: robin_hash.h:320
size_type count(const Key &key, std::size_t precalculated_hash) const
Definition: robin_set.h:305
friend bool operator==(const robin_set &lhs, const robin_set &rhs)
Definition: robin_set.h:509
void reserve(size_type count_)
Definition: robin_hash.h:945
hasher hash_function() const
Definition: robin_hash.h:953
size_type max_bucket_count() const
Definition: robin_set.h:482
robin_iterator< false > iterator
Definition: robin_hash.h:327
size_type erase(const K &key, std::size_t precalculated_hash)
Definition: robin_set.h:288
std::pair< iterator, bool > emplace(Args &&... args)
Definition: robin_hash.h:675
robin_set(std::initializer_list< value_type > init, size_type bucket_count_, const Hash &hash, const Allocator &alloc)
Definition: robin_set.h:169
Definition: robin_hash.h:302
float load_factor() const
Definition: robin_set.h:487
iterator find(const Key &key)
Definition: robin_set.h:335
friend bool operator!=(const robin_set &lhs, const robin_set &rhs)
Definition: robin_set.h:525
void clear() noexcept
Definition: robin_set.h:208
const_iterator end() const noexcept
Definition: robin_set.h:195
void insert(std::initializer_list< value_type > ilist)
Definition: robin_set.h:226
std::pair< iterator, iterator > equal_range(const K &key)
Definition: robin_set.h:438
iterator find(const Key &key, std::size_t precalculated_hash)
Definition: robin_set.h:342
void insert(InputIt first, InputIt last)
Definition: robin_set.h:224
std::ptrdiff_t difference_type
Definition: robin_hash.h:319
float max_load_factor() const
Definition: robin_hash.h:931
robin_set(std::initializer_list< value_type > init, size_type bucket_count_=ht::DEFAULT_INIT_BUCKETS_SIZE, const Hash &hash=Hash(), const KeyEqual &equal=KeyEqual(), const Allocator &alloc=Allocator())
Definition: robin_set.h:156
detail_robin_hash::robin_hash< Key, KeySelect, void, Hash, KeyEqual, Allocator, StoreHash, GrowthPolicy > ht
Definition: robin_set.h:94
size_type max_size() const noexcept
Definition: robin_set.h:203
bool empty() const noexcept
Definition: robin_hash.h:602
void swap(robin_set &other)
Definition: robin_set.h:293
iterator begin() noexcept
Definition: robin_set.h:190
value_type * pointer
Definition: robin_hash.h:325
ht m_ht
Definition: robin_set.h:533
typename ht::const_iterator const_iterator
Definition: robin_set.h:109
allocator_type get_allocator() const
Definition: robin_hash.h:566
float max_load_factor() const
Definition: robin_set.h:488