Fix for new RPM build machine.
[awesomized/libmemcached] / libmemcached / murmur_hash.c
index abb2deda3e5340f68cc04e7dc4b6dd8f4da8b930..7275aa348e253f286c5aac52a18b5cf9ebfbadb3 100644 (file)
@@ -2,21 +2,21 @@
 \r
 /* \r
   "Murmur"hash provided by Austin, tanjent@gmail.com\r
-#define MURMUR_POSTMIX\r
 */\r
 \r
-uint32_t murmur_hash(char *key, size_t length)\r
+#define MIX(h,k,m) { k *= m; k ^= k >> r; k *= m; h *= m; h ^= k; }\r
+\r
+uint32_t murmur_hash(const char *key, size_t length)\r
 {\r
-  const unsigned int m= 0x7fd652ad;\r
+  const uint32_t m= 0x5bd1e995;\r
   const int r= 16;\r
-\r
-  uint32_t h= 0xdeadbeef;\r
+  uint32_t h= length * m;\r
+  uint32_t k = 0;\r
 \r
   while(length >= 4)\r
   {\r
-    h += *(unsigned int *)key;\r
-    h *= m;\r
-    h ^= h >> r;\r
+    k = *(uint32_t*)key;\r
+    MIX(h,k,m);\r
 \r
     key += 4;\r
     length -= 4;\r
@@ -24,25 +24,16 @@ uint32_t murmur_hash(char *key, size_t length)
 \r
   switch(length)\r
   {\r
-  case 3:\r
-    h += key[2] << 16;\r
-  case 2:\r
-    h += key[1] << 8;\r
-  case 1:\r
-  default:\r
-    h += key[0];\r
-    h *= m;\r
-    h ^= h >> r;\r
+  case 3: k += key[2] << 16;\r
+  case 2: k += key[1] << 8;\r
+  case 1: k += key[0];\r
+          MIX(h,k,m);\r
   };\r
 \r
-#ifdef MURMUR_POSTMIX\r
-\r
   h *= m;\r
   h ^= h >> 10;\r
   h *= m;\r
   h ^= h >> 17;\r
 \r
-#endif\r
-\r
   return h;\r
 }\r