roo_collections
API Documentation for roo_collections
Loading...
Searching...
No Matches
roo_collections::FlatSmallHashtable< Entry, Key, HashFn, KeyFn, KeyCmpFn > Class Template Reference

Flat, memory-conscious hash table optimized for small collections. More...

#include <flat_small_hashtable.h>

Inheritance diagram for roo_collections::FlatSmallHashtable< Entry, Key, HashFn, KeyFn, KeyCmpFn >:
[legend]

Data Structures

class  ConstIterator
 Constant forward iterator. More...
 
class  Iterator
 Mutable forward iterator. More...
 

Public Types

using key_type = Key
 
using value_type = Entry
 
using hasher = HashFn
 
using key_equal = KeyCmpFn
 
using iterator = Iterator
 
using const_iterator = ConstIterator
 

Public Member Functions

template<typename InputIt >
 FlatSmallHashtable (InputIt first, InputIt last, HashFn hash_fn=HashFn(), KeyFn key_fn=KeyFn(), KeyCmpFn key_cmp_fn=KeyCmpFn())
 Constructs a table from an iterator range.
 
 FlatSmallHashtable (std::initializer_list< Entry > init, HashFn hash_fn=HashFn(), KeyFn key_fn=KeyFn(), KeyCmpFn key_cmp_fn=KeyCmpFn())
 Constructs a table from an initializer list.
 
 FlatSmallHashtable (HashFn hash_fn=HashFn(), KeyFn key_fn=KeyFn(), KeyCmpFn key_cmp_fn=KeyCmpFn())
 Constructs an empty table with default initial capacity.
 
 FlatSmallHashtable (uint16_t size_hint, HashFn hash_fn=HashFn(), KeyFn key_fn=KeyFn(), KeyCmpFn key_cmp_fn=KeyCmpFn())
 Constructs an empty table sized for size_hint elements.
 
 FlatSmallHashtable (FlatSmallHashtable &&other)
 Move constructor.
 
 FlatSmallHashtable (const FlatSmallHashtable &other)
 Copy constructor.
 
 ~FlatSmallHashtable ()
 Destructor.
 
FlatSmallHashtableoperator= (FlatSmallHashtable &&other)
 Move assignment.
 
FlatSmallHashtableoperator= (const FlatSmallHashtable &other)
 Copy assignment.
 
bool operator== (const FlatSmallHashtable &other) const
 Equality comparison by key/value content.
 
bool operator!= (const FlatSmallHashtable &other)
 
uint16_t ht_len () const
 Returns the internal bucket array length.
 
ConstIterator begin () const
 Returns an iterator to the first element.
 
Iterator begin ()
 Returns a mutable iterator to the first element.
 
Iterator end ()
 Returns iterator past the end.
 
ConstIterator end () const
 Returns const iterator past the end.
 
uint16_t size () const
 Returns the number of stored elements.
 
bool empty () const
 Returns whether the table is empty.
 
uint16_t capacity () const
 Returns the number of elements insertable before rehashing.
 
ConstIterator find (const Key &key) const
 Finds key and returns a const iterator to the matching entry.
 
template<typename K , typename = has_is_transparent_t<HashFn, K>, typename = has_is_transparent_t<KeyCmpFn, K>>
ConstIterator find (const K &key) const
 Heterogeneous lookup overload of find.
 
bool erase (const Key &key)
 Removes an entry by key.
 
template<typename K , typename = has_is_transparent_t<HashFn, K>, typename = has_is_transparent_t<KeyCmpFn, K>>
bool erase (const K &key)
 Heterogeneous key overload of erase.
 
Iterator erase (const ConstIterator &itr)
 Removes the entry at itr and returns iterator to the next entry.
 
void clear ()
 Removes all entries while preserving current allocated capacity.
 
void compact ()
 Rebuilds the table to remove tombstones and shrink capacity.
 
bool contains (const Key &key) const
 Returns whether key exists in the table.
 
template<typename K , typename = has_is_transparent_t<HashFn, K>, typename = has_is_transparent_t<KeyCmpFn, K>>
bool contains (const K &key) const
 Heterogeneous key overload of contains.
 
std::pair< Iterator, boolinsert (Entry val)
 Inserts val if key is not present.
 

Protected Member Functions

Iterator lookup (const Key &key)
 
template<typename K , typename = has_is_transparent_t<HashFn, K>, typename = has_is_transparent_t<KeyCmpFn, K>>
Iterator lookup (const K &key)
 

Friends

class ConstIterator
 
class Iterator
 

Detailed Description

template<typename Entry, typename Key, typename HashFn = DefaultHashFn<Key>, typename KeyFn = DefaultKeyFn<Entry>, typename KeyCmpFn = std::equal_to<Key>>
class roo_collections::FlatSmallHashtable< Entry, Key, HashFn, KeyFn, KeyCmpFn >

Flat, memory-conscious hash table optimized for small collections.

Uses open addressing with quadratic probing and stores entries in contiguous arrays for low overhead. Maximum supported size is approximately 64k elements.

Template Parameters
EntryStored entry type.
KeyKey type used for lookup.
HashFnHash function.
KeyFnExtracts a key from an entry.
KeyCmpFnKey equality predicate.

Definition at line 182 of file flat_small_hashtable.h.

Member Typedef Documentation

◆ const_iterator

template<typename Entry , typename Key , typename HashFn = DefaultHashFn<Key>, typename KeyFn = DefaultKeyFn<Entry>, typename KeyCmpFn = std::equal_to<Key>>
using roo_collections::FlatSmallHashtable< Entry, Key, HashFn, KeyFn, KeyCmpFn >::const_iterator = ConstIterator

Definition at line 286 of file flat_small_hashtable.h.

◆ hasher

template<typename Entry , typename Key , typename HashFn = DefaultHashFn<Key>, typename KeyFn = DefaultKeyFn<Entry>, typename KeyCmpFn = std::equal_to<Key>>
using roo_collections::FlatSmallHashtable< Entry, Key, HashFn, KeyFn, KeyCmpFn >::hasher = HashFn

Definition at line 283 of file flat_small_hashtable.h.

◆ iterator

template<typename Entry , typename Key , typename HashFn = DefaultHashFn<Key>, typename KeyFn = DefaultKeyFn<Entry>, typename KeyCmpFn = std::equal_to<Key>>
using roo_collections::FlatSmallHashtable< Entry, Key, HashFn, KeyFn, KeyCmpFn >::iterator = Iterator

Definition at line 285 of file flat_small_hashtable.h.

◆ key_equal

template<typename Entry , typename Key , typename HashFn = DefaultHashFn<Key>, typename KeyFn = DefaultKeyFn<Entry>, typename KeyCmpFn = std::equal_to<Key>>
using roo_collections::FlatSmallHashtable< Entry, Key, HashFn, KeyFn, KeyCmpFn >::key_equal = KeyCmpFn

Definition at line 284 of file flat_small_hashtable.h.

◆ key_type

template<typename Entry , typename Key , typename HashFn = DefaultHashFn<Key>, typename KeyFn = DefaultKeyFn<Entry>, typename KeyCmpFn = std::equal_to<Key>>
using roo_collections::FlatSmallHashtable< Entry, Key, HashFn, KeyFn, KeyCmpFn >::key_type = Key

Definition at line 281 of file flat_small_hashtable.h.

◆ value_type

template<typename Entry , typename Key , typename HashFn = DefaultHashFn<Key>, typename KeyFn = DefaultKeyFn<Entry>, typename KeyCmpFn = std::equal_to<Key>>
using roo_collections::FlatSmallHashtable< Entry, Key, HashFn, KeyFn, KeyCmpFn >::value_type = Entry

Definition at line 282 of file flat_small_hashtable.h.

Constructor & Destructor Documentation

◆ FlatSmallHashtable() [1/6]

template<typename Entry , typename Key , typename HashFn = DefaultHashFn<Key>, typename KeyFn = DefaultKeyFn<Entry>, typename KeyCmpFn = std::equal_to<Key>>
template<typename InputIt >
roo_collections::FlatSmallHashtable< Entry, Key, HashFn, KeyFn, KeyCmpFn >::FlatSmallHashtable ( InputIt  first,
InputIt  last,
HashFn  hash_fn = HashFn(),
KeyFn  key_fn = KeyFn(),
KeyCmpFn  key_cmp_fn = KeyCmpFn() 
)
inline

Constructs a table from an iterator range.

Definition at line 290 of file flat_small_hashtable.h.

References roo_collections::FlatSmallHashtable< Entry, Key, HashFn, KeyFn, KeyCmpFn >::insert().

◆ FlatSmallHashtable() [2/6]

template<typename Entry , typename Key , typename HashFn = DefaultHashFn<Key>, typename KeyFn = DefaultKeyFn<Entry>, typename KeyCmpFn = std::equal_to<Key>>
roo_collections::FlatSmallHashtable< Entry, Key, HashFn, KeyFn, KeyCmpFn >::FlatSmallHashtable ( std::initializer_list< Entry init,
HashFn  hash_fn = HashFn(),
KeyFn  key_fn = KeyFn(),
KeyCmpFn  key_cmp_fn = KeyCmpFn() 
)
inline

Constructs a table from an initializer list.

Definition at line 300 of file flat_small_hashtable.h.

◆ FlatSmallHashtable() [3/6]

template<typename Entry , typename Key , typename HashFn = DefaultHashFn<Key>, typename KeyFn = DefaultKeyFn<Entry>, typename KeyCmpFn = std::equal_to<Key>>
roo_collections::FlatSmallHashtable< Entry, Key, HashFn, KeyFn, KeyCmpFn >::FlatSmallHashtable ( HashFn  hash_fn = HashFn(),
KeyFn  key_fn = KeyFn(),
KeyCmpFn  key_cmp_fn = KeyCmpFn() 
)
inline

Constructs an empty table with default initial capacity.

Definition at line 307 of file flat_small_hashtable.h.

◆ FlatSmallHashtable() [4/6]

template<typename Entry , typename Key , typename HashFn = DefaultHashFn<Key>, typename KeyFn = DefaultKeyFn<Entry>, typename KeyCmpFn = std::equal_to<Key>>
roo_collections::FlatSmallHashtable< Entry, Key, HashFn, KeyFn, KeyCmpFn >::FlatSmallHashtable ( uint16_t  size_hint,
HashFn  hash_fn = HashFn(),
KeyFn  key_fn = KeyFn(),
KeyCmpFn  key_cmp_fn = KeyCmpFn() 
)
inline

Constructs an empty table sized for size_hint elements.

Parameters
size_hintExpected number of items.

Definition at line 313 of file flat_small_hashtable.h.

References roo_collections::kRadkePrimes.

◆ FlatSmallHashtable() [5/6]

template<typename Entry , typename Key , typename HashFn = DefaultHashFn<Key>, typename KeyFn = DefaultKeyFn<Entry>, typename KeyCmpFn = std::equal_to<Key>>
roo_collections::FlatSmallHashtable< Entry, Key, HashFn, KeyFn, KeyCmpFn >::FlatSmallHashtable ( FlatSmallHashtable< Entry, Key, HashFn, KeyFn, KeyCmpFn > &&  other)
inline

Move constructor.

Definition at line 334 of file flat_small_hashtable.h.

◆ FlatSmallHashtable() [6/6]

template<typename Entry , typename Key , typename HashFn = DefaultHashFn<Key>, typename KeyFn = DefaultKeyFn<Entry>, typename KeyCmpFn = std::equal_to<Key>>
roo_collections::FlatSmallHashtable< Entry, Key, HashFn, KeyFn, KeyCmpFn >::FlatSmallHashtable ( const FlatSmallHashtable< Entry, Key, HashFn, KeyFn, KeyCmpFn > &  other)
inline

Copy constructor.

Definition at line 352 of file flat_small_hashtable.h.

References roo_collections::kRadkePrimes.

◆ ~FlatSmallHashtable()

template<typename Entry , typename Key , typename HashFn = DefaultHashFn<Key>, typename KeyFn = DefaultKeyFn<Entry>, typename KeyCmpFn = std::equal_to<Key>>
roo_collections::FlatSmallHashtable< Entry, Key, HashFn, KeyFn, KeyCmpFn >::~FlatSmallHashtable ( )
inline

Destructor.

Definition at line 373 of file flat_small_hashtable.h.

Member Function Documentation

◆ begin() [1/2]

template<typename Entry , typename Key , typename HashFn = DefaultHashFn<Key>, typename KeyFn = DefaultKeyFn<Entry>, typename KeyCmpFn = std::equal_to<Key>>
Iterator roo_collections::FlatSmallHashtable< Entry, Key, HashFn, KeyFn, KeyCmpFn >::begin ( )
inline

Returns a mutable iterator to the first element.

Definition at line 462 of file flat_small_hashtable.h.

References roo_collections::FlatSmallHashtable< Entry, Key, HashFn, KeyFn, KeyCmpFn >::ht_len().

◆ begin() [2/2]

template<typename Entry , typename Key , typename HashFn = DefaultHashFn<Key>, typename KeyFn = DefaultKeyFn<Entry>, typename KeyCmpFn = std::equal_to<Key>>
ConstIterator roo_collections::FlatSmallHashtable< Entry, Key, HashFn, KeyFn, KeyCmpFn >::begin ( ) const
inline

Returns an iterator to the first element.

Definition at line 452 of file flat_small_hashtable.h.

References roo_collections::FlatSmallHashtable< Entry, Key, HashFn, KeyFn, KeyCmpFn >::ht_len().

◆ capacity()

template<typename Entry , typename Key , typename HashFn = DefaultHashFn<Key>, typename KeyFn = DefaultKeyFn<Entry>, typename KeyCmpFn = std::equal_to<Key>>
uint16_t roo_collections::FlatSmallHashtable< Entry, Key, HashFn, KeyFn, KeyCmpFn >::capacity ( ) const
inline

Returns the number of elements insertable before rehashing.

Definition at line 484 of file flat_small_hashtable.h.

Referenced by roo_collections::FlatSmallHashtable< Entry, Key, HashFn, KeyFn, KeyCmpFn >::insert().

◆ clear()

template<typename Entry , typename Key , typename HashFn = DefaultHashFn<Key>, typename KeyFn = DefaultKeyFn<Entry>, typename KeyCmpFn = std::equal_to<Key>>
void roo_collections::FlatSmallHashtable< Entry, Key, HashFn, KeyFn, KeyCmpFn >::clear ( )
inline

Removes all entries while preserving current allocated capacity.

Definition at line 628 of file flat_small_hashtable.h.

References roo_collections::kRadkePrimes.

Referenced by roo_collections::FlatSmallHashtable< Entry, Key, HashFn, KeyFn, KeyCmpFn >::insert().

◆ compact()

template<typename Entry , typename Key , typename HashFn = DefaultHashFn<Key>, typename KeyFn = DefaultKeyFn<Entry>, typename KeyCmpFn = std::equal_to<Key>>
void roo_collections::FlatSmallHashtable< Entry, Key, HashFn, KeyFn, KeyCmpFn >::compact ( )
inline

Rebuilds the table to remove tombstones and shrink capacity.

Definition at line 641 of file flat_small_hashtable.h.

References roo_collections::initialCapacityIdx(), and roo_collections::FlatSmallHashtable< Entry, Key, HashFn, KeyFn, KeyCmpFn >::size().

◆ contains() [1/2]

template<typename Entry , typename Key , typename HashFn = DefaultHashFn<Key>, typename KeyFn = DefaultKeyFn<Entry>, typename KeyCmpFn = std::equal_to<Key>>
template<typename K , typename = has_is_transparent_t<HashFn, K>, typename = has_is_transparent_t<KeyCmpFn, K>>
bool roo_collections::FlatSmallHashtable< Entry, Key, HashFn, KeyFn, KeyCmpFn >::contains ( const K key) const
inline

◆ contains() [2/2]

template<typename Entry , typename Key , typename HashFn = DefaultHashFn<Key>, typename KeyFn = DefaultKeyFn<Entry>, typename KeyCmpFn = std::equal_to<Key>>
bool roo_collections::FlatSmallHashtable< Entry, Key, HashFn, KeyFn, KeyCmpFn >::contains ( const Key key) const
inline

◆ empty()

template<typename Entry , typename Key , typename HashFn = DefaultHashFn<Key>, typename KeyFn = DefaultKeyFn<Entry>, typename KeyCmpFn = std::equal_to<Key>>
bool roo_collections::FlatSmallHashtable< Entry, Key, HashFn, KeyFn, KeyCmpFn >::empty ( ) const
inline

Returns whether the table is empty.

Definition at line 481 of file flat_small_hashtable.h.

Referenced by roo_collections::FlatSmallHashtable< Entry, Key, HashFn, KeyFn, KeyCmpFn >::insert().

◆ end() [1/2]

◆ end() [2/2]

template<typename Entry , typename Key , typename HashFn = DefaultHashFn<Key>, typename KeyFn = DefaultKeyFn<Entry>, typename KeyCmpFn = std::equal_to<Key>>
ConstIterator roo_collections::FlatSmallHashtable< Entry, Key, HashFn, KeyFn, KeyCmpFn >::end ( ) const
inline

Returns const iterator past the end.

Definition at line 475 of file flat_small_hashtable.h.

References roo_collections::FlatSmallHashtable< Entry, Key, HashFn, KeyFn, KeyCmpFn >::ht_len().

◆ erase() [1/3]

template<typename Entry , typename Key , typename HashFn = DefaultHashFn<Key>, typename KeyFn = DefaultKeyFn<Entry>, typename KeyCmpFn = std::equal_to<Key>>
Iterator roo_collections::FlatSmallHashtable< Entry, Key, HashFn, KeyFn, KeyCmpFn >::erase ( const ConstIterator itr)
inline

◆ erase() [2/3]

template<typename Entry , typename Key , typename HashFn = DefaultHashFn<Key>, typename KeyFn = DefaultKeyFn<Entry>, typename KeyCmpFn = std::equal_to<Key>>
template<typename K , typename = has_is_transparent_t<HashFn, K>, typename = has_is_transparent_t<KeyCmpFn, K>>
bool roo_collections::FlatSmallHashtable< Entry, Key, HashFn, KeyFn, KeyCmpFn >::erase ( const K key)
inline

Heterogeneous key overload of erase.

Returns
true if an entry was removed.

Definition at line 587 of file flat_small_hashtable.h.

References roo_collections::fastmod(), and roo_collections::FlatSmallHashtable< Entry, Key, HashFn, KeyFn, KeyCmpFn >::ht_len().

◆ erase() [3/3]

template<typename Entry , typename Key , typename HashFn = DefaultHashFn<Key>, typename KeyFn = DefaultKeyFn<Entry>, typename KeyCmpFn = std::equal_to<Key>>
bool roo_collections::FlatSmallHashtable< Entry, Key, HashFn, KeyFn, KeyCmpFn >::erase ( const Key key)
inline

◆ find() [1/2]

template<typename Entry , typename Key , typename HashFn = DefaultHashFn<Key>, typename KeyFn = DefaultKeyFn<Entry>, typename KeyCmpFn = std::equal_to<Key>>
template<typename K , typename = has_is_transparent_t<HashFn, K>, typename = has_is_transparent_t<KeyCmpFn, K>>
ConstIterator roo_collections::FlatSmallHashtable< Entry, Key, HashFn, KeyFn, KeyCmpFn >::find ( const K key) const
inline

◆ find() [2/2]

◆ ht_len()

template<typename Entry , typename Key , typename HashFn = DefaultHashFn<Key>, typename KeyFn = DefaultKeyFn<Entry>, typename KeyCmpFn = std::equal_to<Key>>
uint16_t roo_collections::FlatSmallHashtable< Entry, Key, HashFn, KeyFn, KeyCmpFn >::ht_len ( ) const
inline

◆ insert()

◆ lookup() [1/2]

template<typename Entry , typename Key , typename HashFn = DefaultHashFn<Key>, typename KeyFn = DefaultKeyFn<Entry>, typename KeyCmpFn = std::equal_to<Key>>
template<typename K , typename = has_is_transparent_t<HashFn, K>, typename = has_is_transparent_t<KeyCmpFn, K>>
Iterator roo_collections::FlatSmallHashtable< Entry, Key, HashFn, KeyFn, KeyCmpFn >::lookup ( const K key)
inlineprotected

◆ lookup() [2/2]

◆ operator!=()

template<typename Entry , typename Key , typename HashFn = DefaultHashFn<Key>, typename KeyFn = DefaultKeyFn<Entry>, typename KeyCmpFn = std::equal_to<Key>>
bool roo_collections::FlatSmallHashtable< Entry, Key, HashFn, KeyFn, KeyCmpFn >::operator!= ( const FlatSmallHashtable< Entry, Key, HashFn, KeyFn, KeyCmpFn > &  other)
inline

Definition at line 446 of file flat_small_hashtable.h.

◆ operator=() [1/2]

template<typename Entry , typename Key , typename HashFn = DefaultHashFn<Key>, typename KeyFn = DefaultKeyFn<Entry>, typename KeyCmpFn = std::equal_to<Key>>
FlatSmallHashtable & roo_collections::FlatSmallHashtable< Entry, Key, HashFn, KeyFn, KeyCmpFn >::operator= ( const FlatSmallHashtable< Entry, Key, HashFn, KeyFn, KeyCmpFn > &  other)
inline

Copy assignment.

Definition at line 407 of file flat_small_hashtable.h.

References roo_collections::kRadkePrimes.

◆ operator=() [2/2]

template<typename Entry , typename Key , typename HashFn = DefaultHashFn<Key>, typename KeyFn = DefaultKeyFn<Entry>, typename KeyCmpFn = std::equal_to<Key>>
FlatSmallHashtable & roo_collections::FlatSmallHashtable< Entry, Key, HashFn, KeyFn, KeyCmpFn >::operator= ( FlatSmallHashtable< Entry, Key, HashFn, KeyFn, KeyCmpFn > &&  other)
inline

Move assignment.

Definition at line 379 of file flat_small_hashtable.h.

◆ operator==()

template<typename Entry , typename Key , typename HashFn = DefaultHashFn<Key>, typename KeyFn = DefaultKeyFn<Entry>, typename KeyCmpFn = std::equal_to<Key>>
bool roo_collections::FlatSmallHashtable< Entry, Key, HashFn, KeyFn, KeyCmpFn >::operator== ( const FlatSmallHashtable< Entry, Key, HashFn, KeyFn, KeyCmpFn > &  other) const
inline

Equality comparison by key/value content.

Definition at line 433 of file flat_small_hashtable.h.

References roo_collections::FlatSmallHashtable< Entry, Key, HashFn, KeyFn, KeyCmpFn >::size().

◆ size()

Friends And Related Symbol Documentation

◆ ConstIterator

template<typename Entry , typename Key , typename HashFn = DefaultHashFn<Key>, typename KeyFn = DefaultKeyFn<Entry>, typename KeyCmpFn = std::equal_to<Key>>
friend class ConstIterator
friend

Definition at line 798 of file flat_small_hashtable.h.

◆ Iterator

template<typename Entry , typename Key , typename HashFn = DefaultHashFn<Key>, typename KeyFn = DefaultKeyFn<Entry>, typename KeyCmpFn = std::equal_to<Key>>
friend class Iterator
friend

Definition at line 799 of file flat_small_hashtable.h.


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