WPILibC++ 2023.4.3-108-ge5452e3
Hashing.h File Reference
#include "wpi/ErrorHandling.h"
#include "wpi/SwapByteOrder.h"
#include "wpi/type_traits.h"
#include <algorithm>
#include <cassert>
#include <cstring>
#include <string>
#include <tuple>
#include <utility>

Go to the source code of this file.

Classes

class  wpi::hash_code
 An opaque object representing a hash code. More...
 
struct  wpi::hashing::detail::hash_state
 The intermediate state used during hashing. More...
 
struct  wpi::hashing::detail::is_hashable_data< T >
 Trait to indicate whether a type's bits can be hashed directly. More...
 
struct  wpi::hashing::detail::is_hashable_data< std::pair< T, U > >
 
struct  wpi::hashing::detail::hash_combine_recursive_helper
 Helper class to manage the recursive combining of hash_combine arguments. More...
 
struct  wpi::DenseMapInfo< hash_code, void >
 

Namespaces

namespace  wpi
 
namespace  wpi::hashing
 
namespace  wpi::hashing::detail
 

Functions

template<typename T >
std::enable_if_t< is_integral_or_enum< T >::value, hash_code > wpi::hash_value (T value)
 Compute a hash_code for any integer value. More...
 
template<typename T >
hash_code wpi::hash_value (const T *ptr)
 Compute a hash_code for a pointer's address. More...
 
template<typename T , typename U >
hash_code wpi::hash_value (const std::pair< T, U > &arg)
 Compute a hash_code for a pair of objects. More...
 
template<typename... Ts>
hash_code wpi::hash_value (const std::tuple< Ts... > &arg)
 Compute a hash_code for a tuple. More...
 
template<typename T >
hash_code wpi::hash_value (const std::basic_string< T > &arg)
 Compute a hash_code for a standard string. More...
 
void wpi::set_fixed_execution_hash_seed (uint64_t fixed_value)
 Override the execution seed with a fixed value. More...
 
uint64_t wpi::hashing::detail::fetch64 (const char *p)
 
uint32_t wpi::hashing::detail::fetch32 (const char *p)
 
uint64_t wpi::hashing::detail::rotate (uint64_t val, size_t shift)
 Bitwise right rotate. More...
 
uint64_t wpi::hashing::detail::shift_mix (uint64_t val)
 
uint64_t wpi::hashing::detail::hash_16_bytes (uint64_t low, uint64_t high)
 
uint64_t wpi::hashing::detail::hash_1to3_bytes (const char *s, size_t len, uint64_t seed)
 
uint64_t wpi::hashing::detail::hash_4to8_bytes (const char *s, size_t len, uint64_t seed)
 
uint64_t wpi::hashing::detail::hash_9to16_bytes (const char *s, size_t len, uint64_t seed)
 
uint64_t wpi::hashing::detail::hash_17to32_bytes (const char *s, size_t len, uint64_t seed)
 
uint64_t wpi::hashing::detail::hash_33to64_bytes (const char *s, size_t len, uint64_t seed)
 
uint64_t wpi::hashing::detail::hash_short (const char *s, size_t length, uint64_t seed)
 
uint64_t wpi::hashing::detail::get_execution_seed ()
 
template<typename T >
std::enable_if_t< is_hashable_data< T >::value, T > wpi::hashing::detail::get_hashable_data (const T &value)
 Helper to get the hashable data representation for a type. More...
 
template<typename T >
std::enable_if_t<!is_hashable_data< T >::value, size_t > wpi::hashing::detail::get_hashable_data (const T &value)
 Helper to get the hashable data representation for a type. More...
 
template<typename T >
bool wpi::hashing::detail::store_and_advance (char *&buffer_ptr, char *buffer_end, const T &value, size_t offset=0)
 Helper to store data from a value into a buffer and advance the pointer into that buffer. More...
 
template<typename InputIteratorT >
hash_code wpi::hashing::detail::hash_combine_range_impl (InputIteratorT first, InputIteratorT last)
 Implement the combining of integral values into a hash_code. More...
 
template<typename ValueT >
std::enable_if_t< is_hashable_data< ValueT >::value, hash_code > wpi::hashing::detail::hash_combine_range_impl (ValueT *first, ValueT *last)
 Implement the combining of integral values into a hash_code. More...
 
template<typename InputIteratorT >
hash_code wpi::hash_combine_range (InputIteratorT first, InputIteratorT last)
 Compute a hash_code for a sequence of values. More...
 
template<typename ... Ts>
hash_code wpi::hash_combine (const Ts &...args)
 Combine values into a single hash_code. More...
 
hash_code wpi::hashing::detail::hash_integer_value (uint64_t value)
 Helper to hash the value of a single integer. More...
 
template<typename... Ts, std::size_t... Indices>
hash_code wpi::hashing::detail::hash_value_tuple_helper (const std::tuple< Ts... > &arg, std::index_sequence< Indices... >)
 

Variables

static constexpr uint64_t wpi::hashing::detail::k0 = 0xc3a5c85c97cb3127ULL
 Some primes between 2^63 and 2^64 for various uses. More...
 
static constexpr uint64_t wpi::hashing::detail::k1 = 0xb492b66fbe98f273ULL
 
static constexpr uint64_t wpi::hashing::detail::k2 = 0x9ae16a3b2f90404fULL
 
static constexpr uint64_t wpi::hashing::detail::k3 = 0xc949d7c7509e6557ULL
 
uint64_t wpi::hashing::detail::fixed_seed_override
 A global, fixed seed-override variable. More...