10constexpr uint64_t FNV1A_OFFSET_BASIS = 14695981039346656037ull;
11constexpr uint64_t FNV1A_PRIME = 1099511628211ull;
24inline uint64_t fnv1a64Bytes(
const void* data, std::size_t size, uint64_t seed = FNV1A_OFFSET_BASIS) {
25 const auto* bytes =
static_cast<const unsigned char*
>(data);
27 for (std::size_t i = 0; i < size; ++i) {
41inline uint64_t fnv1a64(std::string_view s, uint64_t seed = FNV1A_OFFSET_BASIS) {
42 return fnv1a64Bytes(s.data(), s.size(), seed);
46constexpr uint32_t FNV1A32_OFFSET_BASIS = 2166136261u;
47constexpr uint32_t FNV1A32_PRIME = 16777619u;
56inline uint32_t fnv1a32(std::string_view s, uint32_t seed = FNV1A32_OFFSET_BASIS) {
58 for (
const char c : s) {
59 hash ^=
static_cast<unsigned char>(c);
60 hash *= FNV1A32_PRIME;