Following patch should be vaguely saner, though it may modify the hash
a bit.

(note that memcpy destroys any semblance of meaning of using murmurhash2
in any case, so murmurhash2 is complete bullshit in this case)

--- src/hash_map.h.orig Tue Jun  4 20:47:31 2013
+++ src/hash_map.h      Tue Jul  2 11:17:20 2013
@@ -25,6 +25,24 @@ unsigned int MurmurHash2(const void* key, size_t len) 
   const int r = 24;
   unsigned int h = seed ^ len;
   const unsigned char * data = (const unsigned char *)key;
+  const unsigned char * b = data;
+  switch(reinterpret_cast<size_t>(data) & 3) {
+  case 1:
+       h ^= b[2] << 16;
+       data++;
+       len--;
+  case 2:
+       h ^= b[1] << 8;
+       data++;
+       len--;
+  case 3:
+       h ^= b[0];
+       h *= m;
+       data++;
+       len--;
+       break;
+  }
+
   while (len >= 4) {
     unsigned int k = *(unsigned int *)data;
     k *= m;

Reply via email to