![]() |
aGrUM 3.2.0
a C++ library for (probabilistic) graphical models
|
Generic hash functions for numeric keys smaller than or equal to Size. More...
#include <agrum/base/core/hashFunc.h>
Public Member Functions | |
| HashFuncSmallKey () | |
| Class constructor. | |
| Size | operator() (const Key &key) const final |
| Computes the hashed value of a key. | |
| void | resize (const Size new_size) |
| Update the hash function to take into account a resize of the hash table. | |
| Size | size () const |
| Returns the hash table size as known by the hash function. | |
Static Public Member Functions | |
| static Size | castToSize (const Key &key) |
| Returns the value of a key as a Size. | |
Protected Attributes | |
| Size | hash_size_ {Size(0)} |
| The size of the hash table. | |
| unsigned int | hash_log2_size_ {0} |
| Log of the number of slots of the hash table in base 2. | |
| Size | hash_mask_ {Size(0)} |
| performing y = x & hash_mask_ guarantees that y is a slot index of the hash table | |
| unsigned int | right_shift_ {0} |
| performing y = x >> right_shift_ guarantees that y is a slot index of the hash table | |
Generic hash functions for numeric keys smaller than or equal to Size.
| Key | The type hashed by this hash function. |
Definition at line 266 of file hashFunc.h.
| gum::HashFuncSmallKey< Key >::HashFuncSmallKey | ( | ) |
Class constructor.
|
static |
|
finalvirtual |
Computes the hashed value of a key.
The classes inheriting from HashFuncBase should always declare Operator() as follows:
and its implementation should be something like:
By doing this, compilers optimize the code so that it is significantly speeded-up because no virtual table will be used and everything is most certainly inlined. Of course, you need to define a static method castToSize which should take as argument a const Key& and return a Size
| key | The key to compute the hashed value. |
Implements gum::HashFuncBase< Key >.
|
inherited |
Update the hash function to take into account a resize of the hash table.
When the user wishes to resize the gum::HashTable so that the array is of size s, the gum::HashTable resizes itself to the smallest power of 2 greater than or equal to s. This new size is computed by function gum::HashFuncBase::resize(gum::Size). Hence, s should be the size of the array of lists, not the number of elements stored into the gum::HashTable.
| new_size | The hashtable's size wished by the user. Actually, a hashtable of size n is an array of n lists. |
| SizeError | Raised if s is too small. |
|
inherited |
Returns the hash table size as known by the hash function.
|
protectedinherited |
Log of the number of slots of the hash table in base 2.
Definition at line 229 of file hashFunc.h.
|
protectedinherited |
performing y = x & hash_mask_ guarantees that y is a slot index of the hash table
To transform a Size x into a slot index of the hash table, you can either use x & hash_mask_ or x >> right_shift_ depending on whether you want to exploit the least significant bits of x (&) or the most significant one (>>).
Definition at line 240 of file hashFunc.h.
|
protectedinherited |
The size of the hash table.
Definition at line 226 of file hashFunc.h.
|
protectedinherited |
performing y = x >> right_shift_ guarantees that y is a slot index of the hash table
To transform a Size x into a slot index of the hash table, you can either use x & hash_mask_ or x >> right_shift_ depending on whether you want to exploit the least significant bits of x (&) or the most significant one (>>).
Definition at line 251 of file hashFunc.h.