WPILibC++ 2024.3.2
wpi::hashing::detail::hash_combine_recursive_helper Struct Reference

Helper class to manage the recursive combining of hash_combine arguments. More...

#include </home/runner/work/allwpilib/allwpilib/wpiutil/src/main/native/thirdparty/llvm/include/wpi/Hashing.h>

Public Member Functions

 hash_combine_recursive_helper ()
 Construct a recursive hash combining helper. More...
 
template<typename T >
char * combine_data (size_t &length, char *buffer_ptr, char *buffer_end, T data)
 Combine one chunk of data into the current in-flight hash. More...
 
template<typename T , typename ... Ts>
hash_code combine (size_t length, char *buffer_ptr, char *buffer_end, const T &arg, const Ts &...args)
 Recursive, variadic combining method. More...
 
hash_code combine (size_t length, char *buffer_ptr, char *buffer_end)
 Base case for recursive, variadic combining. More...
 

Public Attributes

char buffer [64] = {}
 
hash_state state
 
const uint64_t seed
 

Detailed Description

Helper class to manage the recursive combining of hash_combine arguments.

This class exists to manage the state and various calls involved in the recursive combining of arguments used in hash_combine. It is particularly useful at minimizing the code in the recursive calls to ease the pain caused by a lack of variadic functions.

Constructor & Destructor Documentation

◆ hash_combine_recursive_helper()

wpi::hashing::detail::hash_combine_recursive_helper::hash_combine_recursive_helper ( )
inline

Construct a recursive hash combining helper.

This sets up the state for a recursive hash combine, including getting the seed and buffer setup.

Member Function Documentation

◆ combine() [1/2]

hash_code wpi::hashing::detail::hash_combine_recursive_helper::combine ( size_t  length,
char *  buffer_ptr,
char *  buffer_end 
)
inline

Base case for recursive, variadic combining.

The base case when combining arguments recursively is reached when all arguments have been handled. It flushes the remaining buffer and constructs a hash_code.

◆ combine() [2/2]

template<typename T , typename ... Ts>
hash_code wpi::hashing::detail::hash_combine_recursive_helper::combine ( size_t  length,
char *  buffer_ptr,
char *  buffer_end,
const T &  arg,
const Ts &...  args 
)
inline

Recursive, variadic combining method.

This function recurses through each argument, combining that argument into a single hash.

◆ combine_data()

template<typename T >
char * wpi::hashing::detail::hash_combine_recursive_helper::combine_data ( size_t &  length,
char *  buffer_ptr,
char *  buffer_end,
data 
)
inline

Combine one chunk of data into the current in-flight hash.

This merges one chunk of data into the hash. First it tries to buffer the data. If the buffer is full, it hashes the buffer into its hash_state, empties it, and then merges the new chunk in. This also handles cases where the data straddles the end of the buffer.

Member Data Documentation

◆ buffer

char wpi::hashing::detail::hash_combine_recursive_helper::buffer[64] = {}

◆ seed

const uint64_t wpi::hashing::detail::hash_combine_recursive_helper::seed

◆ state

hash_state wpi::hashing::detail::hash_combine_recursive_helper::state

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