18[[nodiscard]]
inline uint64_t
FNV1a64CombineBytes(uint64_t hash,
void const* data,
size_t size)
noexcept
20 auto bytes =
static_cast<uint8_t const*
>(data);
21 for (
size_t i = 0; i < size; ++i)
26template<std::
integral T>
27[[nodiscard]]
constexpr uint64_t
FNV1a64Combine(uint64_t hash, T value)
noexcept
29 if constexpr (std::same_as<T, bool>)
33 using U = std::make_unsigned_t<T>;
34 U bits =
static_cast<U
>(value);
35 for (
size_t i = 0; i <
sizeof(U); ++i)
42 requires std::is_enum_v<T>
43[[nodiscard]]
constexpr uint64_t
FNV1a64Combine(uint64_t hash, T value)
noexcept
45 return FNV1a64Combine(hash,
static_cast<std::underlying_type_t<T>
>(value));
48[[nodiscard]]
constexpr uint64_t
FNV1a64Combine(uint64_t hash,
float value)
noexcept
53[[nodiscard]]
constexpr uint64_t
FNV1a64Combine(uint64_t hash,
double value)
noexcept
58template <
typename... T>
59[[nodiscard]]
constexpr uint64_t
FNV1a64(T... values)
noexcept
67[[nodiscard]]
constexpr uint64_t
FNV1a64(T* data,
size_t size)
noexcept
Lock-free atomic primitives and implementations of data structures.
Definition Allocator.hpp:6
uint64_t FNV1a64CombineBytes(uint64_t hash, void const *data, size_t size) noexcept
Definition Hash.hpp:18
constexpr uint64_t FNV1a64Combine(uint64_t hash, T value) noexcept
Definition Hash.hpp:27
constexpr uint64_t kFNV1a64Prime
Definition Hash.hpp:11
constexpr uint64_t FNV1a64(Span< const T > span) noexcept
Definition Container.hpp:509
constexpr uint64_t kFNV1a64OffsetBasis
Definition Hash.hpp:10
constexpr uint64_t FNV1a64CombineByte(uint64_t hash, uint8_t value) noexcept
Definition Hash.hpp:13