5XXHash64::XXHash64(uint64_t seed)
6 : seed{seed}, state{nullptr, XXH64_freeState} {
7 state.reset(XXH64_createState());
10void XXHash64::reset() { XXH64_reset(state.get(), seed); }
12void XXHash64::operator()(
const uint8_t *key, std::size_t len) {
13 if (XXH_ERROR == XXH64_update(state.get(), key, len)) {
14 throw std::runtime_error(
"XXH64_update failed");
18uint64_t XXHash64::final()
const {
return XXH64_digest(state.get()); }
20#define BIG_CONSTANT(x) (x##LLU)
22Murmur2A_X64_64::Murmur2A_X64_64(uint64_t seed) : seed{seed} {}
24void Murmur2A_X64_64::reset() { h = seed; }
26void Murmur2A_X64_64::operator()(
const uint8_t *key, std::size_t len) {
27 const uint64_t m = BIG_CONSTANT(0xc6a4a7935bd1e995);
32 const uint64_t *data = (
const uint64_t *)key;
33 const uint64_t *end = data + (len / 8);
46 const unsigned char *data2 = (
const unsigned char *)data;
50 h ^= uint64_t(data2[6]) << 48;
53 h ^= uint64_t(data2[5]) << 40;
56 h ^= uint64_t(data2[4]) << 32;
59 h ^= uint64_t(data2[3]) << 24;
62 h ^= uint64_t(data2[2]) << 16;
65 h ^= uint64_t(data2[1]) << 8;
68 h ^= uint64_t(data2[0]);
77uint64_t Murmur2A_X64_64::final()
const {
return h; }
79BJOneAtATime::BJOneAtATime(uint64_t seed)
80 : seed{static_cast<uint32_t>(seed & 0xffffffff)} {}
82void BJOneAtATime::reset() { hash = seed; }
84void BJOneAtATime::operator()(
const uint8_t *key, std::size_t length) {
96uint64_t BJOneAtATime::final()
const {
return hash; }
Contains wrappers for various hash functions that can be used in Bloom filters.