31constexpr std::uint32_t
fnv1a(std::span<const std::byte> data)
noexcept;
41constexpr std::uint32_t
fnv1a(std::string_view sv)
noexcept;
54 requires std::is_trivially_copyable_v<T>
55constexpr std::uint32_t
fnv1a(
const T &value)
noexcept;
66constexpr std::uint64_t
fnv1a_64(std::span<const std::byte> data)
noexcept;
76constexpr std::uint64_t
fnv1a_64(std::string_view sv)
noexcept;
89 requires std::is_trivially_copyable_v<T>
90constexpr std::uint64_t
fnv1a_64(
const T &value)
noexcept;
95inline constexpr std::uint32_t
fnv1a(
const std::span<const std::byte> data)
noexcept
97 constexpr std::uint32_t FNV_OFFSET_BASIS = 2166136261u;
98 constexpr std::uint32_t FNV_PRIME = 16777619u;
100 std::uint32_t hash = FNV_OFFSET_BASIS;
101 for (
const auto b : data)
103 hash ^=
static_cast<std::uint32_t
>(std::to_integer<std::uint8_t>(b));
110inline constexpr std::uint32_t
fnv1a(
const std::string_view sv)
noexcept
112 return fnv1a({
reinterpret_cast<const std::byte *
>(sv.data()), sv.size() });
117 requires std::is_trivially_copyable_v<T>
118inline constexpr std::uint32_t
fnv1a(
const T &value)
noexcept
120 return fnv1a({
reinterpret_cast<const std::byte *
>(std::addressof(value)),
sizeof(T) });
124inline constexpr std::uint64_t
fnv1a_64(
const std::span<const std::byte> data)
noexcept
126 constexpr std::uint64_t FNV_OFFSET_BASIS = 14695981039346656037ull;
127 constexpr std::uint64_t FNV_PRIME = 1099511628211ull;
129 std::uint64_t hash = FNV_OFFSET_BASIS;
130 for (
const auto b : data)
132 hash ^=
static_cast<std::uint64_t
>(std::to_integer<std::uint8_t>(b));
139inline constexpr std::uint64_t
fnv1a_64(
const std::string_view sv)
noexcept
141 return fnv1a_64({
reinterpret_cast<const std::byte *
>(sv.data()), sv.size() });
146 requires std::is_trivially_copyable_v<T>
147inline constexpr std::uint64_t
fnv1a_64(
const T &value)
noexcept
149 return fnv1a_64(std::span<const std::byte>{
reinterpret_cast<const std::byte *
>(std::addressof(value)),
sizeof(T) });