31 #include "gu_spooky.h"
38 #define gu_hash_t gu_mmh128_ctx_t
39 #define gu_hash_init(_hash) gu_mmh128_init(_hash)
40 #define gu_hash_append(_hash, _msg, _len) gu_mmh128_append(_hash, _msg, _len)
41 #define gu_hash_get128(_hash, _res) gu_mmh128_get(_hash, _res)
42 #define gu_hash_get64(_hash) gu_mmh128_get64(_hash)
43 #define gu_hash_get32(_hash) gu_mmh128_get32(_hash)
46 #define gu_hash128(_msg, _len, _res) gu_mmh128(_msg, _len, _res)
47 #define gu_hash64(_msg, _len) gu_mmh128_64(_msg, _len)
48 #define gu_hash32(_msg, _len) gu_mmh128_32(_msg, _len)
55 #define GU_SHORT64_LIMIT 16
56 #define GU_MEDIUM64_LIMIT 512
59 gu_fast_hash128 (
const void*
const msg,
size_t const len,
void*
const res)
61 if (len < GU_MEDIUM64_LIMIT)
63 gu_mmh128 (msg, len, res);
67 gu_spooky128 (msg, len, res);
71 static GU_FORCE_INLINE uint64_t
72 gu_fast_hash64_short (
const void*
const msg,
size_t const len)
74 uint64_t res = GU_FNV64_SEED;
75 gu_fnv64a_internal (msg, len, &res);
77 res *= GU_ROTL64(res, 56);
78 return res ^ GU_ROTL64(res, 43);
81 #define gu_fast_hash64_medium gu_mmh128_64
82 #define gu_fast_hash64_long gu_spooky64
84 static GU_INLINE uint64_t
85 gu_fast_hash64 (
const void*
const msg,
size_t const len)
87 if (len < GU_SHORT64_LIMIT)
89 return gu_fast_hash64_short (msg, len);
91 else if (len < GU_MEDIUM64_LIMIT)
93 return gu_fast_hash64_medium (msg, len);
97 return gu_fast_hash64_long (msg, len);
101 #define gu_fast_hash32_short gu_mmh32
102 #define gu_fast_hash32_medium gu_mmh128_32
103 #define gu_fast_hash32_long gu_spooky32
105 #define GU_SHORT32_LIMIT 32
106 #define GU_MEDIUM32_LIMIT 512
108 static GU_INLINE uint32_t
109 gu_fast_hash32 (
const void*
const msg,
size_t const len)
111 if (len < GU_SHORT32_LIMIT)
113 return gu_fast_hash32_short (msg, len);
115 else if (len < GU_MEDIUM32_LIMIT)
117 return gu_fast_hash32_medium (msg, len);
121 return gu_fast_hash32_long (msg, len);
132 #if GU_WORDSIZE == 64
134 #define gu_table_hash gu_fast_hash64
136 #elif GU_WORDSIZE == 32
140 #define gu_table_hash gu_mmh32
143 # error Unsupported wordsize!