diff options
| author | Mistivia <i@mistivia.com> | 2025-07-22 15:28:30 +0800 |
|---|---|---|
| committer | Mistivia <i@mistivia.com> | 2025-07-22 15:28:45 +0800 |
| commit | 999fcf0f7655c03265c222cc67617f0f510979bf (patch) | |
| tree | dd51680ffda411239e37460c834a996dc934dc63 /src/mmhash.c | |
| parent | a8764a20f355fd8fb7b03978d754d1cbd48d0a88 (diff) | |
change dir structure
Diffstat (limited to 'src/mmhash.c')
| -rw-r--r-- | src/mmhash.c | 57 |
1 files changed, 0 insertions, 57 deletions
diff --git a/src/mmhash.c b/src/mmhash.c deleted file mode 100644 index 7897b9e..0000000 --- a/src/mmhash.c +++ /dev/null @@ -1,57 +0,0 @@ -#include "mmhash.h" - -/*----------------------------------------------------------------------------- -// MurmurHash2, 64-bit versions, by Austin Appleby -// -// The same caveats as 32-bit MurmurHash2 apply here - beware of alignment -// and endian-ness issues if used across multiple platforms. -// -// 64-bit hash for 64-bit platforms -*/ - -uint64_t mmhash(const void *key, int len, uint64_t seed) { - const uint64_t m = 0xc6a4a7935bd1e995LL; - const int r = 47; - - uint64_t h = seed ^ (len * m); - - const uint64_t *data = (const uint64_t *)key; - const uint64_t *end = data + (len / 8); - - while (data != end) { - uint64_t k = *data++; - - k *= m; - k ^= k >> r; - k *= m; - - h ^= k; - h *= m; - } - - const unsigned char *data2 = (const unsigned char *)data; - - switch (len & 7) { - case 7: - h ^= ((uint64_t)data2[6]) << 48; - case 6: - h ^= ((uint64_t)data2[5]) << 40; - case 5: - h ^= ((uint64_t)data2[4]) << 32; - case 4: - h ^= ((uint64_t)data2[3]) << 24; - case 3: - h ^= ((uint64_t)data2[2]) << 16; - case 2: - h ^= ((uint64_t)data2[1]) << 8; - case 1: - h ^= ((uint64_t)data2[0]); - h *= m; - }; - - h ^= h >> r; - h *= m; - h ^= h >> r; - - return h; -} |
