LLVM 17.0.0git
|
Implementation of the HashBuilder
interface.
More...
#include "llvm/Support/HashBuilder.h"
Public Types | |
template<typename T > | |
using | HasAddHashT = decltype(addHash(std::declval< HashBuilderImpl & >(), std::declval< T & >())) |
template<typename T > | |
using | HasByteSwapT = decltype(support::endian::byte_swap(std::declval< T & >(), support::endianness::little)) |
![]() | |
template<typename HasherT_ = HasherT> | |
using | HashResultTy = decltype(std::declval< HasherT_ & >().final()) |
Public Member Functions | |
HashBuilderImpl (HasherT &Hasher) | |
template<typename... ArgTypes> | |
HashBuilderImpl (ArgTypes &&...Args) | |
template<typename T > | |
std::enable_if_t< hashbuilder_detail::IsHashableData< T >::value, HashBuilderImpl & > | add (T Value) |
Implement hashing for hashable data types, e.g. integral or enum values. | |
template<typename T > | |
HashBuilderImpl & | add (ArrayRef< T > Value) |
Support hashing ArrayRef . | |
HashBuilderImpl & | add (StringRef Value) |
Support hashing StringRef . | |
template<typename T > | |
std::enable_if_t< is_detected< HasAddHashT, T >::value &&!hashbuilder_detail::IsHashableData< T >::value, HashBuilderImpl & > | add (const T &Value) |
Implement hashing for user-defined struct s. | |
template<typename T1 , typename T2 > | |
HashBuilderImpl & | add (const std::pair< T1, T2 > &Value) |
template<typename... Ts> | |
HashBuilderImpl & | add (const std::tuple< Ts... > &Arg) |
template<typename... Ts> | |
std::enable_if_t<(sizeof...(Ts) > 1), HashBuilderImpl & > | add (const Ts &...Args) |
A convenenience variadic helper. | |
template<typename ForwardIteratorT > | |
HashBuilderImpl & | addRange (ForwardIteratorT First, ForwardIteratorT Last) |
template<typename RangeT > | |
HashBuilderImpl & | addRange (const RangeT &Range) |
template<typename ForwardIteratorT > | |
HashBuilderImpl & | addRangeElements (ForwardIteratorT First, ForwardIteratorT Last) |
template<typename RangeT > | |
HashBuilderImpl & | addRangeElements (const RangeT &Range) |
template<typename T > | |
std::enable_if_t< is_detected< HasByteSwapT, T >::value, HashBuilderImpl & > | adjustForEndiannessAndAdd (const T &Value) |
Adjust Value for the target endianness and add it to the hash. | |
![]() | |
HasherT & | getHasher () |
void | update (ArrayRef< uint8_t > Data) |
Forward to HasherT::update(ArrayRef<uint8_t>) . | |
void | update (StringRef Data) |
Forward to HasherT::update(ArrayRef<uint8_t>) . | |
template<typename HasherT_ = HasherT> | |
HashResultTy< HasherT_ > | final () |
Forward to HasherT::final() if available. | |
template<typename HasherT_ = HasherT> | |
HashResultTy< HasherT_ > | result () |
Forward to HasherT::result() if available. | |
Additional Inherited Members | |
![]() | |
HashBuilderBase (HasherT &Hasher) | |
template<typename... ArgTypes> | |
HashBuilderBase (ArgTypes &&...Args) | |
Implementation of the HashBuilder
interface.
support::endianness::native
is not supported. HashBuilder
is expected to canonicalize support::endianness::native
to one of support::endianness::big
or support::endianness::little
.
Definition at line 94 of file HashBuilder.h.
using llvm::HashBuilderImpl< HasherT, Endianness >::HasAddHashT = decltype(addHash(std::declval<HashBuilderImpl &>(), std::declval<T &>())) |
Definition at line 168 of file HashBuilder.h.
using llvm::HashBuilderImpl< HasherT, Endianness >::HasByteSwapT = decltype(support::endian::byte_swap( std::declval<T &>(), support::endianness::little)) |
Definition at line 312 of file HashBuilder.h.
|
inlineexplicit |
Definition at line 99 of file HashBuilder.h.
|
inlineexplicit |
Definition at line 102 of file HashBuilder.h.
|
inline |
Support hashing ArrayRef
.
Value.size()
is taken into account to ensure cases like
and
do not collide.
Definition at line 126 of file HashBuilder.h.
References llvm::HashBuilderImpl< HasherT, Endianness >::add(), llvm::support::endian::system_endianness(), and llvm::HashBuilderBase< HasherT >::update().
|
inline |
Definition at line 263 of file HashBuilder.h.
References llvm::HashBuilderImpl< HasherT, Endianness >::add().
|
inline |
Definition at line 267 of file HashBuilder.h.
References llvm::HashBuilderImpl< HasherT, Endianness >::add(), and Arg.
|
inline |
Implement hashing for user-defined struct
s.
Any user-define struct
can participate in hashing via HashBuilder
by providing a addHash
templated function.
For example:
To avoid endianness issues, specializations of addHash
should generally rely on exising add
, addRange
, and addRangeElements
functions. If directly using update
, an implementation must correctly handle endianness.
To avoid collisions, specialization of addHash
for variable-size types must take the size into account.
For example:
Definition at line 257 of file HashBuilder.h.
|
inline |
A convenenience variadic helper.
It simply iterates over its arguments, in order.
is equivalent to
Definition at line 284 of file HashBuilder.h.
References llvm::HashBuilderImpl< HasherT, Endianness >::add().
|
inline |
Support hashing StringRef
.
Value.size()
is taken into account to ensure cases like
and
do not collide.
Definition at line 156 of file HashBuilder.h.
References llvm::HashBuilderImpl< HasherT, Endianness >::add(), and llvm::HashBuilderBase< HasherT >::update().
|
inline |
Implement hashing for hashable data types, e.g. integral or enum values.
Definition at line 109 of file HashBuilder.h.
References llvm::HashBuilderImpl< HasherT, Endianness >::adjustForEndiannessAndAdd().
Referenced by llvm::HashBuilderImpl< HasherT, Endianness >::add(), llvm::HashBuilderImpl< HasherT, Endianness >::addRange(), computeStackId(), and llvm::hash_value().
|
inline |
Definition at line 294 of file HashBuilder.h.
References llvm::HashBuilderImpl< HasherT, Endianness >::addRange(), llvm::adl_begin(), and llvm::adl_end().
|
inline |
Definition at line 289 of file HashBuilder.h.
References llvm::HashBuilderImpl< HasherT, Endianness >::add(), llvm::HashBuilderImpl< HasherT, Endianness >::addRangeElements(), and llvm::Last.
Referenced by llvm::HashBuilderImpl< HasherT, Endianness >::addRange().
|
inline |
Definition at line 307 of file HashBuilder.h.
References llvm::HashBuilderImpl< HasherT, Endianness >::addRangeElements(), llvm::adl_begin(), and llvm::adl_end().
|
inline |
Definition at line 299 of file HashBuilder.h.
References llvm::Last.
Referenced by llvm::HashBuilderImpl< HasherT, Endianness >::addRange(), and llvm::HashBuilderImpl< HasherT, Endianness >::addRangeElements().
|
inline |
Adjust Value
for the target endianness and add it to the hash.
Definition at line 317 of file HashBuilder.h.
References llvm::support::endian::byte_swap(), and llvm::HashBuilderBase< HasherT >::update().
Referenced by llvm::HashBuilderImpl< HasherT, Endianness >::add().