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;