HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
pxr_tsl::rh::prime_growth_policy Class Reference

#include <robin_growth_policy.h>

Public Member Functions

 prime_growth_policy (std::size_t &min_bucket_count_in_out)
 
std::size_t bucket_for_hash (std::size_t hash) const noexcept
 
std::size_t next_bucket_count () const
 
std::size_t max_bucket_count () const
 
void clear () noexcept
 

Detailed Description

Grow the hash table by using prime numbers as bucket count. Slower than tsl::rh::power_of_two_growth_policy in general but will probably distribute the values around better in the buckets with a poor hash function.

To allow the compiler to optimize the modulo operation, a lookup table is used with constant primes numbers.

With a switch the code would look like:

switch(iprime) { // iprime is the current prime of the hash table
case 0: hash % 5ul;
break;
case 1: hash % 17ul;
break;
case 2: hash % 29ul;
break;
...
}

Due to the constant variable in the modulo the compiler is able to optimize the operation by a series of multiplications, substractions and shifts.

The 'hash % 5' could become something like 'hash - (hash * 0xCCCCCCCD) >> 34)

  • 5' in a 64 bits environment.

Definition at line 364 of file robin_growth_policy.h.

Constructor & Destructor Documentation

pxr_tsl::rh::prime_growth_policy::prime_growth_policy ( std::size_t &  min_bucket_count_in_out)
inlineexplicit

Definition at line 366 of file robin_growth_policy.h.

Member Function Documentation

std::size_t pxr_tsl::rh::prime_growth_policy::bucket_for_hash ( std::size_t  hash) const
inlinenoexcept

Definition at line 383 of file robin_growth_policy.h.

void pxr_tsl::rh::prime_growth_policy::clear ( void  )
inlinenoexcept

Definition at line 398 of file robin_growth_policy.h.

std::size_t pxr_tsl::rh::prime_growth_policy::max_bucket_count ( ) const
inline

Definition at line 396 of file robin_growth_policy.h.

std::size_t pxr_tsl::rh::prime_growth_policy::next_bucket_count ( ) const
inline

Definition at line 387 of file robin_growth_policy.h.


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