18 for (
const uint8 *data =
reinterpret_cast<const uint8 *
>(inData); data < reinterpret_cast<const uint8 *>(inData) + inSize; ++data)
20 hash = hash ^
uint64(*data);
21 hash = hash * 0x100000001b3UL;
33 hash = (~hash) + (hash << 21);
34 hash = hash ^ (hash >> 24);
35 hash = (hash + (hash << 3)) + (hash << 8);
36 hash = hash ^ (hash >> 14);
37 hash = (hash + (hash << 2)) + (hash << 4);
38 hash = hash ^ (hash >> 28);
39 hash = hash + (hash << 31);
49 ioSeed ^= hasher(inValue) + 0x9e3779b9 + (ioSeed << 6) + (ioSeed >> 2);
64template <
typename... Values>
65inline void HashCombine(std::size_t &ioSeed, Values... inValues)
73JPH_SUPPRESS_WARNING_PUSH
76#define JPH_MAKE_HASH_STRUCT(type, name, ...) \
77 struct [[nodiscard]] name \
79 std::size_t operator()(const type &t) const \
81 std::size_t ret = 0; \
82 ::JPH::HashCombine(ret, __VA_ARGS__); \
87#define JPH_MAKE_HASHABLE(type, ...) \
88 JPH_SUPPRESS_WARNING_PUSH \
89 JPH_SUPPRESS_WARNINGS \
93 JPH_MAKE_HASH_STRUCT(type, hash<type>, __VA_ARGS__) \
95 JPH_SUPPRESS_WARNING_POP
97JPH_SUPPRESS_WARNING_POP
std::uint8_t uint8
Definition: Core.h:453
std::uint64_t uint64
Definition: Core.h:456
unsigned int uint
Definition: Core.h:452
#define JPH_NAMESPACE_END
Definition: Core.h:378
#define JPH_CLANG_SUPPRESS_WARNING(w)
Definition: Core.h:263
#define JPH_NAMESPACE_BEGIN
Definition: Core.h:372
JPH_NAMESPACE_BEGIN uint64 HashBytes(const void *inData, uint inSize, uint64 inSeed=0xcbf29ce484222325UL)
Definition: HashCombine.h:15
void HashCombine(std::size_t &ioSeed, Values... inValues)
Definition: HashCombine.h:65
void HashCombineHelper(size_t &ioSeed, const T &inValue)
Helper function that hashes a single value into ioSeed Taken from: https://stackoverflow....
Definition: HashCombine.h:46
uint64 Hash64(uint64 inValue)
Definition: HashCombine.h:30