34 #include <sys/types.h> 38 constexpr
inline uint32_t
rotl32(uint32_t x, int8_t r) noexcept
40 return (x << r) | (x >> (32 - r));
47 VW_STD14_CONSTEXPR
static inline uint32_t
fmix(uint32_t h) noexcept
61 constexpr
static inline uint32_t
getblock(
const uint32_t * p,
int i) noexcept
67 VW_STD14_CONSTEXPR
inline uint64_t
uniform_hash(
const void* key,
size_t len, uint64_t seed)
69 const uint8_t* data = (
const uint8_t*)key;
70 const int nblocks = (int)len / 4;
72 uint32_t h1 = (uint32_t)seed;
74 const uint32_t c1 = 0xcc9e2d51;
75 const uint32_t c2 = 0x1b873593;
78 const uint32_t* blocks = (
const uint32_t *)(data + nblocks * 4);
80 for (
int i = -nblocks; i; i++)
90 h1 = h1 * 5 + 0xe6546b64;
94 const uint8_t * tail = (
const uint8_t*)(data + nblocks * 4);
108 case 1: k1 ^= tail[0];
VW_STD14_CONSTEXPR uint64_t uniform_hash(const void *key, size_t len, uint64_t seed)
constexpr uint32_t rotl32(uint32_t x, int8_t r) noexcept
static VW_STD14_CONSTEXPR uint32_t fmix(uint32_t h) noexcept
static constexpr uint32_t getblock(const uint32_t *p, int i) noexcept