13#define ALWAYS_COLLIDE(type) \
14 static size_t hash_always_collide_##type(type const* UNUSED(key)) { return 0; }
19 static size_t hash_id_##type(type const* key) { \
20 _Static_assert(sizeof(type) <= sizeof(size_t), \
21 "ID hashing only supports up to size_t integers"); \
22 return (size_t)(*key); \
29#define MURMURHASH_3_FMIx64(type) \
30 static size_t hash_murmurhash3_##type(type const* key) { \
31 _Static_assert(sizeof(type) <= sizeof(uint64_t), \
32 "MurmurHash3 only supports up to 64-bit integers"); \
33 return (size_t)derive_c_fmix64((uint64_t)(*key)); \
37#define INT_HASHERS(_apply) \
55#undef MURMURHASH_3_FMIx64
57#define MURMURHASH_DEFAULT_SEED 0x9747b28c
64#define STRING_SIZES(_apply) \
75#define MURMURHASH_STRING_FIXED_SIZE(size) \
76 static size_t hash_murmurhash_string_##size(const char str[size]) { \
77 return derive_c_murmurhash(str, size, MURMURHASH_DEFAULT_SEED); \
82#undef MURMURHASH_STRING_FIXED_SIZE
83#undef MURMURHASH_DEFAULT_SEED
88 return seed ^ (h + 0x9e3779b97f4a7c15ULL + (seed << 6) + (seed >> 2));
#define MURMURHASH_3_FMIx64(type)
#define INT_HASHERS(_apply)
#define MURMURHASH_STRING_FIXED_SIZE(size)
size_t hash_murmurhash_string(const char *str)
#define MURMURHASH_DEFAULT_SEED
#define ALWAYS_COLLIDE(type)
The worst possible hash, for testing purposes.
#define STRING_SIZES(_apply)
static size_t hash_combine(size_t seed, size_t h)
size_t derive_c_murmurhash(const void *key, int32_t len, uint32_t seed)