Loading...
Searching...
No Matches
murmurhash.h
/* SPDX-License-Identifier: BSD-3-Clause
* Copyright 2016, Olivier MATZ <zer0@droids-corp.org>
*/
#pragma once
#include <stdint.h>
static inline uint32_t ec_murmurhash_rotl32(uint32_t x, int8_t r)
{
return (x << r) | (x >> (32 - r));
}
static inline uint32_t ec_murmurhash3_add32(uint32_t h, uint32_t data)
{
data *= 0xcc9e2d51;
data = ec_murmurhash_rotl32(data, 15);
data *= 0x1b873593;
h ^= data;
return h;
}
static inline uint32_t ec_murmurhash3_mix32(uint32_t h)
{
h = ec_murmurhash_rotl32(h, 13);
h = h * 5 + 0xe6546b64;
return h;
}
static inline uint32_t ec_murmurhash3_fmix32(uint32_t h)
{
h ^= h >> 16;
h *= 0x85ebca6b;
h ^= h >> 13;
h *= 0xc2b2ae35;
h ^= h >> 16;
return h;
}
uint32_t ec_murmurhash3(const void *key, int len, uint32_t seed);
ec_murmurhash3_fmix32
static uint32_t ec_murmurhash3_fmix32(uint32_t h)
Final mix: force all bits of a hash block to avalanche.
Definition murmurhash.h:45
ec_murmurhash3_mix32
static uint32_t ec_murmurhash3_mix32(uint32_t h)
Intermediate mix.
Definition murmurhash.h:37
ec_murmurhash_rotl32
static uint32_t ec_murmurhash_rotl32(uint32_t x, int8_t r)
Hash rotation.
Definition murmurhash.h:21
ec_murmurhash3
uint32_t ec_murmurhash3(const void *key, int len, uint32_t seed)
Calculate a 32-bit murmurhash3.
ec_murmurhash3_add32
static uint32_t ec_murmurhash3_add32(uint32_t h, uint32_t data)
Add 32-bit to the hash.
Definition murmurhash.h:27