83template<
typename T>
struct DefaultHash {
86 if constexpr (std::is_enum_v<T>) {
104 return T::hash_as(
value);
118#define TRIVIAL_DEFAULT_INT_HASH(TYPE) \
119 template<> struct DefaultHash<TYPE> { \
120 uint64_t operator()(TYPE value) const \
122 return uint64_t(value); \
222template<
size_t...
I,
typename... Args>
225 static_assert(
sizeof...(Args) ==
sizeof...(
I));
232template<
typename T,
typename... Args>
250template<
typename T>
struct DefaultHash<std::reference_wrapper<T>> {
257template<
typename T1,
typename T2>
struct DefaultHash<std::pair<T1, T2>> {
#define TRIVIAL_DEFAULT_INT_HASH(TYPE)
ATTR_WARN_UNUSED_RESULT const BMVert * v
static constexpr std::array< uint64_t, 3 > default_hash_factors
uint64_t get_default_hash_array(std::index_sequence< I... >, const Args &...args)
uint64_t hash_string(StringRef str)
uint64_t get_default_hash(const T &v, const Args &...args)
_W64 unsigned int uintptr_t
unsigned __int64 uint64_t
uint64_t operator()(StringRef value) const
uint64_t operator()(StringRef value) const
uint64_t operator()(const T *value) const
uint64_t operator()(bool value) const
uint64_t operator()(const T &value) const
uint64_t operator()(double value) const
uint64_t operator()(float value) const
uint64_t operator()(const std::pair< T1, T2 > &value) const
uint64_t operator()(const std::reference_wrapper< T > &value) const
uint64_t operator()(StringRef value) const
uint64_t operator()(StringRef value) const
uint64_t operator()(const T &value) const
uint64_t operator()(const U &value) const
uint64_t operator()(const U &value) const