Aprepro 5.0x
Loading...
Searching...
No Matches
tsl::detail_robin_hash::bucket_entry< ValueType, StoreHash > Class Template Reference

#include <robin_hash.h>

Inheritance diagram for tsl::detail_robin_hash::bucket_entry< ValueType, StoreHash >:
Collaboration diagram for tsl::detail_robin_hash::bucket_entry< ValueType, StoreHash >:

Public Types

using value_type = ValueType
 
using distance_type = std::int16_t
 

Public Member Functions

 bucket_entry () noexcept
 
 bucket_entry (bool last_bucket) noexcept
 
 bucket_entry (const bucket_entry &other) noexcept(std::is_nothrow_copy_constructible< value_type >::value)
 
 bucket_entry (bucket_entry &&other) noexcept(std::is_nothrow_move_constructible< value_type >::value)
 
bucket_entryoperator= (const bucket_entry &other) noexcept(std::is_nothrow_copy_constructible< value_type >::value)
 
bucket_entryoperator= (bucket_entry &&)=delete
 
 ~bucket_entry () noexcept
 
void clear () noexcept
 
bool empty () const noexcept
 
value_typevalue () noexcept
 
const value_typevalue () const noexcept
 
distance_type dist_from_ideal_bucket () const noexcept
 
bool last_bucket () const noexcept
 
void set_as_last_bucket () noexcept
 
template<typename... Args>
void set_value_of_empty_bucket (distance_type dist_from_ideal_bucket, truncated_hash_type my_hash, Args &&...value_type_args)
 
void swap_with_value_in_bucket (distance_type &dist_from_ideal_bucket, truncated_hash_type &my_hash, value_type &value)
 
- Public Member Functions inherited from tsl::detail_robin_hash::bucket_entry_hash< StoreHash >
bool bucket_hash_equal (std::size_t) const noexcept
 
truncated_hash_type truncated_hash () const noexcept
 

Static Public Member Functions

static truncated_hash_type truncate_hash (std::size_t my_hash) noexcept
 

Static Public Attributes

static const distance_type EMPTY_MARKER_DIST_FROM_IDEAL_BUCKET = -1
 
static const distance_type DIST_FROM_IDEAL_BUCKET_LIMIT = 4096
 

Private Types

using bucket_hash = bucket_entry_hash<StoreHash>
 
using storage = typename std::aligned_storage<sizeof(value_type), alignof(value_type)>::type
 

Private Member Functions

void destroy_value () noexcept
 

Private Attributes

distance_type m_dist_from_ideal_bucket
 
bool m_last_bucket {false}
 
storage m_value
 

Additional Inherited Members

- Protected Member Functions inherited from tsl::detail_robin_hash::bucket_entry_hash< StoreHash >
void set_hash (truncated_hash_type) noexcept
 

Detailed Description

template<typename ValueType, bool StoreHash>
class tsl::detail_robin_hash::bucket_entry< ValueType, StoreHash >

Each bucket entry has:

  • A value of type ValueType.
  • An integer to store how far the value of the bucket, if any, is from its ideal bucket (ex: if the current bucket 5 has the value 'foo' and ‘hash('foo’) % nb_buckets== 3,dist_from_ideal_bucket()will return 2 as the current value of the bucket is two buckets away from its ideal bucket) If there is no value in the bucket (i.e.empty()is true) dist_from_ideal_bucket()will be < 0.
  • A marker which tells us if the bucket is the last bucket of the bucket array (useful for the iterator of the hash table).
  • IfStoreHash` is true, 32 bits of the hash of the value, if any, are also stored in the bucket. If the size of the hash is more than 32 bits, it is truncated. We don't store the full hash as storing the hash is a potential opportunity to use the unused space due to the alignment of the bucket_entry structure. We can thus potentially store the hash without any extra space (which would not be possible with 64 bits of the hash).

Member Typedef Documentation

◆ bucket_hash

template<typename ValueType , bool StoreHash>
using tsl::detail_robin_hash::bucket_entry< ValueType, StoreHash >::bucket_hash = bucket_entry_hash<StoreHash>
private

◆ distance_type

template<typename ValueType , bool StoreHash>
using tsl::detail_robin_hash::bucket_entry< ValueType, StoreHash >::distance_type = std::int16_t

◆ storage

template<typename ValueType , bool StoreHash>
using tsl::detail_robin_hash::bucket_entry< ValueType, StoreHash >::storage = typename std::aligned_storage<sizeof(value_type), alignof(value_type)>::type
private

◆ value_type

template<typename ValueType , bool StoreHash>
using tsl::detail_robin_hash::bucket_entry< ValueType, StoreHash >::value_type = ValueType

Constructor & Destructor Documentation

◆ bucket_entry() [1/4]

template<typename ValueType , bool StoreHash>
tsl::detail_robin_hash::bucket_entry< ValueType, StoreHash >::bucket_entry ( )
inlinenoexcept

◆ bucket_entry() [2/4]

template<typename ValueType , bool StoreHash>
tsl::detail_robin_hash::bucket_entry< ValueType, StoreHash >::bucket_entry ( bool last_bucket)
inlinenoexcept

◆ bucket_entry() [3/4]

template<typename ValueType , bool StoreHash>
tsl::detail_robin_hash::bucket_entry< ValueType, StoreHash >::bucket_entry ( const bucket_entry< ValueType, StoreHash > & other)
inlinenoexcept

◆ bucket_entry() [4/4]

template<typename ValueType , bool StoreHash>
tsl::detail_robin_hash::bucket_entry< ValueType, StoreHash >::bucket_entry ( bucket_entry< ValueType, StoreHash > && other)
inlinenoexcept

Never really used, but still necessary as we must call resize on an empty std::vector<bucket_entry>. and we need to support move-only types. See robin_hash constructor for details.

◆ ~bucket_entry()

template<typename ValueType , bool StoreHash>
tsl::detail_robin_hash::bucket_entry< ValueType, StoreHash >::~bucket_entry ( )
inlinenoexcept

Member Function Documentation

◆ clear()

template<typename ValueType , bool StoreHash>
void tsl::detail_robin_hash::bucket_entry< ValueType, StoreHash >::clear ( )
inlinenoexcept

◆ destroy_value()

template<typename ValueType , bool StoreHash>
void tsl::detail_robin_hash::bucket_entry< ValueType, StoreHash >::destroy_value ( )
inlineprivatenoexcept

◆ dist_from_ideal_bucket()

template<typename ValueType , bool StoreHash>
distance_type tsl::detail_robin_hash::bucket_entry< ValueType, StoreHash >::dist_from_ideal_bucket ( ) const
inlinenoexcept

◆ empty()

template<typename ValueType , bool StoreHash>
bool tsl::detail_robin_hash::bucket_entry< ValueType, StoreHash >::empty ( ) const
inlinenoexcept

◆ last_bucket()

template<typename ValueType , bool StoreHash>
bool tsl::detail_robin_hash::bucket_entry< ValueType, StoreHash >::last_bucket ( ) const
inlinenoexcept

◆ operator=() [1/2]

template<typename ValueType , bool StoreHash>
bucket_entry & tsl::detail_robin_hash::bucket_entry< ValueType, StoreHash >::operator= ( bucket_entry< ValueType, StoreHash > && )
delete

◆ operator=() [2/2]

template<typename ValueType , bool StoreHash>
bucket_entry & tsl::detail_robin_hash::bucket_entry< ValueType, StoreHash >::operator= ( const bucket_entry< ValueType, StoreHash > & other)
inlinenoexcept

◆ set_as_last_bucket()

template<typename ValueType , bool StoreHash>
void tsl::detail_robin_hash::bucket_entry< ValueType, StoreHash >::set_as_last_bucket ( )
inlinenoexcept

◆ set_value_of_empty_bucket()

template<typename ValueType , bool StoreHash>
template<typename... Args>
void tsl::detail_robin_hash::bucket_entry< ValueType, StoreHash >::set_value_of_empty_bucket ( distance_type dist_from_ideal_bucket,
truncated_hash_type my_hash,
Args &&... value_type_args )
inline

◆ swap_with_value_in_bucket()

template<typename ValueType , bool StoreHash>
void tsl::detail_robin_hash::bucket_entry< ValueType, StoreHash >::swap_with_value_in_bucket ( distance_type & dist_from_ideal_bucket,
truncated_hash_type & my_hash,
value_type & value )
inline

◆ truncate_hash()

template<typename ValueType , bool StoreHash>
static truncated_hash_type tsl::detail_robin_hash::bucket_entry< ValueType, StoreHash >::truncate_hash ( std::size_t my_hash)
inlinestaticnoexcept

◆ value() [1/2]

template<typename ValueType , bool StoreHash>
const value_type & tsl::detail_robin_hash::bucket_entry< ValueType, StoreHash >::value ( ) const
inlinenoexcept

◆ value() [2/2]

template<typename ValueType , bool StoreHash>
value_type & tsl::detail_robin_hash::bucket_entry< ValueType, StoreHash >::value ( )
inlinenoexcept

Member Data Documentation

◆ DIST_FROM_IDEAL_BUCKET_LIMIT

template<typename ValueType , bool StoreHash>
const distance_type tsl::detail_robin_hash::bucket_entry< ValueType, StoreHash >::DIST_FROM_IDEAL_BUCKET_LIMIT = 4096
static

◆ EMPTY_MARKER_DIST_FROM_IDEAL_BUCKET

template<typename ValueType , bool StoreHash>
const distance_type tsl::detail_robin_hash::bucket_entry< ValueType, StoreHash >::EMPTY_MARKER_DIST_FROM_IDEAL_BUCKET = -1
static

◆ m_dist_from_ideal_bucket

template<typename ValueType , bool StoreHash>
distance_type tsl::detail_robin_hash::bucket_entry< ValueType, StoreHash >::m_dist_from_ideal_bucket
private

◆ m_last_bucket

template<typename ValueType , bool StoreHash>
bool tsl::detail_robin_hash::bucket_entry< ValueType, StoreHash >::m_last_bucket {false}
private

◆ m_value

template<typename ValueType , bool StoreHash>
storage tsl::detail_robin_hash::bucket_entry< ValueType, StoreHash >::m_value
private

The documentation for this class was generated from the following file: