Fix MurmurHash implementation to really be unaligned

This commit is contained in:
sfan5 2018-06-25 11:33:46 +02:00
parent 88135921a6
commit 7bef8c982b
1 changed files with 1 additions and 10 deletions

View File

@ -60,22 +60,13 @@ u64 murmur_hash_64_ua(const void *key, int len, unsigned int seed)
const int r = 47; const int r = 47;
u64 h = seed ^ (len * m); u64 h = seed ^ (len * m);
#if defined(__IOS__) // make sure memcpy() will not assume align
const u8 *data = (const u8 *)key; const u8 *data = (const u8 *)key;
const u8 *end = data + ( (unsigned int)len & ~7 ); const u8 *end = data + (len / 8) * 8;
#else
const u64 *data = (const u64 *)key;
const u64 *end = data + (len / 8);
#endif
while (data != end) { while (data != end) {
u64 k; u64 k;
memcpy(&k, data, sizeof(u64)); memcpy(&k, data, sizeof(u64));
#ifdef __IOS__
data += sizeof(u64); data += sizeof(u64);
#else
data++;
#endif
k *= m; k *= m;
k ^= k >> r; k ^= k >> r;