|
| array_set () |
|
| array_set (size_type bucket_count, const Hash &hash=Hash()) |
|
template<class InputIt , typename std::enable_if< is_iterator< InputIt >::value >::type * = nullptr> |
| array_set (InputIt first, InputIt last, size_type bucket_count=ht::DEFAULT_INIT_BUCKET_COUNT, const Hash &hash=Hash()) |
|
| array_set (std::initializer_list< std::basic_string_view< CharT >> init, size_type bucket_count=ht::DEFAULT_INIT_BUCKET_COUNT, const Hash &hash=Hash()) |
|
array_set & | operator= (std::initializer_list< std::basic_string_view< CharT >> ilist) |
|
iterator | begin () noexcept |
|
const_iterator | begin () const noexcept |
|
const_iterator | cbegin () const noexcept |
|
iterator | end () noexcept |
|
const_iterator | end () const noexcept |
|
const_iterator | cend () const noexcept |
|
bool | empty () const noexcept |
|
size_type | size () const noexcept |
|
size_type | max_size () const noexcept |
|
size_type | max_key_size () const noexcept |
|
void | shrink_to_fit () |
|
void | clear () noexcept |
|
std::pair< iterator, bool > | insert (const std::basic_string_view< CharT > &key) |
|
std::pair< iterator, bool > | insert_ks (const CharT *key, size_type key_size) |
|
template<class InputIt , typename std::enable_if< is_iterator< InputIt >::value >::type * = nullptr> |
void | insert (InputIt first, InputIt last) |
|
void | insert (std::initializer_list< std::basic_string_view< CharT >> ilist) |
|
std::pair< iterator, bool > | emplace (const std::basic_string_view< CharT > &key) |
|
std::pair< iterator, bool > | emplace_ks (const CharT *key, size_type key_size) |
|
iterator | erase (const_iterator pos) |
|
iterator | erase (const_iterator first, const_iterator last) |
|
size_type | erase (const std::basic_string_view< CharT > &key) |
|
size_type | erase_ks (const CharT *key, size_type key_size) |
|
size_type | erase (const std::basic_string_view< CharT > &key, std::size_t precalculated_hash) |
|
size_type | erase_ks (const CharT *key, size_type key_size, std::size_t precalculated_hash) |
|
void | swap (array_set &other) |
|
size_type | count (const std::basic_string_view< CharT > &key) const |
|
size_type | count_ks (const CharT *key, size_type key_size) const |
|
size_type | count (const std::basic_string_view< CharT > &key, std::size_t precalculated_hash) const |
|
size_type | count_ks (const CharT *key, size_type key_size, std::size_t precalculated_hash) const |
|
iterator | find (const std::basic_string_view< CharT > &key) |
|
const_iterator | find (const std::basic_string_view< CharT > &key) const |
|
iterator | find_ks (const CharT *key, size_type key_size) |
|
const_iterator | find_ks (const CharT *key, size_type key_size) const |
|
iterator | find (const std::basic_string_view< CharT > &key, std::size_t precalculated_hash) |
|
const_iterator | find (const std::basic_string_view< CharT > &key, std::size_t precalculated_hash) const |
|
iterator | find_ks (const CharT *key, size_type key_size, std::size_t precalculated_hash) |
|
const_iterator | find_ks (const CharT *key, size_type key_size, std::size_t precalculated_hash) const |
|
std::pair< iterator, iterator > | equal_range (const std::basic_string_view< CharT > &key) |
|
std::pair< const_iterator, const_iterator > | equal_range (const std::basic_string_view< CharT > &key) const |
|
std::pair< iterator, iterator > | equal_range_ks (const CharT *key, size_type key_size) |
|
std::pair< const_iterator, const_iterator > | equal_range_ks (const CharT *key, size_type key_size) const |
|
std::pair< iterator, iterator > | equal_range (const std::basic_string_view< CharT > &key, std::size_t precalculated_hash) |
|
std::pair< const_iterator, const_iterator > | equal_range (const std::basic_string_view< CharT > &key, std::size_t precalculated_hash) const |
|
std::pair< iterator, iterator > | equal_range_ks (const CharT *key, size_type key_size, std::size_t precalculated_hash) |
|
std::pair< const_iterator, const_iterator > | equal_range_ks (const CharT *key, size_type key_size, std::size_t precalculated_hash) const |
|
size_type | bucket_count () const |
|
size_type | max_bucket_count () const |
|
float | load_factor () const |
|
float | max_load_factor () const |
|
void | max_load_factor (float ml) |
|
void | rehash (size_type count) |
|
void | reserve (size_type count) |
|
hasher | hash_function () const |
|
key_equal | key_eq () const |
|
iterator | mutable_iterator (const_iterator it) noexcept |
|
template<class Serializer > |
void | serialize (Serializer &serializer) const |
|
template<class CharT, class Hash = tsl::ah::str_hash<CharT>, class KeyEqual = tsl::ah::str_equal<CharT>, bool StoreNullTerminator = true, class KeySizeT = std::uint16_t, class IndexSizeT = std::uint32_t, class GrowthPolicy = tsl::ah::power_of_two_growth_policy<2>>
class tsl::array_set< CharT, Hash, KeyEqual, StoreNullTerminator, KeySizeT, IndexSizeT, GrowthPolicy >
Implementation of a cache-conscious string hash set.
The set stores the strings as const CharT*
. If StoreNullTerminator
is true, the strings are stored with the a null-terminator (the key()
method of the iterators will return a pointer to this null-terminated string). Otherwise the null character is not stored (which allow an economy of 1 byte per string).
The size of a key string is limited to std::numeric_limits<KeySizeT>::max() - 1
. That is 65 535 characters by default, but can be raised with the KeySizeT
template parameter. See max_key_size()
for an easy access to this limit.
The number of elements in the set is limited to std::numeric_limits<IndexSizeT>::max()
. That is 4 294 967 296 elements, but can be raised with the IndexSizeT
template parameter. See max_size()
for an easy access to this limit.
Iterators invalidation:
- clear, operator=: always invalidate the iterators.
- insert, emplace, operator[]: always invalidate the iterators.
- erase: always invalidate the iterators.
- shrink_to_fit: always invalidate the iterators.
template<class CharT , class Hash = tsl::ah::str_hash<CharT>, class KeyEqual = tsl::ah::str_equal<CharT>, bool StoreNullTerminator = true, class KeySizeT = std::uint16_t, class IndexSizeT = std::uint32_t, class GrowthPolicy = tsl::ah::power_of_two_growth_policy<2>>
template<class Deserializer >
static array_set tsl::array_set< CharT, Hash, KeyEqual, StoreNullTerminator, KeySizeT, IndexSizeT, GrowthPolicy >::deserialize |
( |
Deserializer & |
deserializer, |
|
|
bool |
hash_compatible = false |
|
) |
| |
|
inlinestatic |
Deserialize a previouly serialized set through the deserializer
parameter.
The deserializer
parameter must be a function object that supports the following calls:
template<typename U> U operator()();
where the types std::uint64_t
, float
and T
must be supported for U.
void operator()(CharT* value_out, std::size_t value_size);
If the deserialized hash set type is hash compatible with the serialized set, the deserialization process can be sped up by setting hash_compatible
to true. To be hash compatible, the Hash (take care of the 32-bits vs 64 bits), KeyEqual, GrowthPolicy, StoreNullTerminator, KeySizeT and IndexSizeT must behave the same than the one used on the serialazed set. Otherwise the behaviour is undefined with hash_compatible
sets to true, .
The behaviour is undefined if the type CharT
of the array_set
is not the same as the types used during serialization.
The implementation leaves binary compatibilty (endianness, IEEE 754 for floats, ...) of the types it deserializes in the hands of the Deserializer
function object if compatibilty is required.
template<class CharT , class Hash = tsl::ah::str_hash<CharT>, class KeyEqual = tsl::ah::str_equal<CharT>, bool StoreNullTerminator = true, class KeySizeT = std::uint16_t, class IndexSizeT = std::uint32_t, class GrowthPolicy = tsl::ah::power_of_two_growth_policy<2>>
template<class Serializer >
void tsl::array_set< CharT, Hash, KeyEqual, StoreNullTerminator, KeySizeT, IndexSizeT, GrowthPolicy >::serialize |
( |
Serializer & |
serializer | ) |
const |
|
inline |
Serialize the set through the serializer
parameter.
The serializer
parameter must be a function object that supports the following calls:
void operator()(const U& value);
where the types std::uint64_t
and float
must be supported for U.
void operator()(const CharT* value, std::size_t value_size);
The implementation leaves binary compatibilty (endianness, IEEE 754 for floats, ...) of the types it serializes in the hands of the Serializer
function object if compatibilty is required.