6#include "quicr/detail/span.h"
13 static const std::array<std::uint64_t, 256> crc_table = [] {
14 std::array<std::uint64_t, 256> table;
15 for (std::uint64_t c = 0; c < 256; ++c) {
16 std::uint64_t crc = c;
17 for (std::uint64_t i = 0; i < 8; ++i) {
18 std::uint64_t b = (crc & 1);
20 crc ^= (0 - b) & 0xc96c5795d7870f42ull;
34 static constexpr std::uint64_t hash(
const Span<const uint8_t> bytes)
37 constexpr size_t word_len =
sizeof(std::uint64_t);
38 std::uint64_t crc = 0;
40 if (bytes.size() <= word_len) {
41 std::memcpy(&crc, bytes.data(), bytes.size());
62 for (
const auto& b : bytes) {
63 crc = crc_table[(crc & 0xFF) ^ b] ^ (crc >> 8);
77 static std::uint64_t hash(
const std::string_view& str)
79 return hash(std::vector<uint8_t>{ str.begin(), str.end() });
91 inline void hash_combine(uint64_t& existing_hash,
const uint64_t& add_hash)
93 existing_hash ^= add_hash + 0x9e3779b9 + (existing_hash << 6) + (add_hash >> 2);
Definition transport.h:26
void hash_combine(uint64_t &existing_hash, const uint64_t &add_hash)
Combine (aka add) hash to existing hash.
Definition hash.h:91