projects
/
awesomized
/
libmemcached
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
|
github
raw
|
inline
| side by side
If you call sort, a quit occurs, and the current servers get sorted.
[awesomized/libmemcached]
/
libmemcached
/
murmur_hash.c
diff --git
a/libmemcached/murmur_hash.c
b/libmemcached/murmur_hash.c
index abb2deda3e5340f68cc04e7dc4b6dd8f4da8b930..7cfcaa9eba087559de5c2d371f85bec615c6c460 100644
(file)
--- a/
libmemcached/murmur_hash.c
+++ b/
libmemcached/murmur_hash.c
@@
-2,21
+2,21
@@
\r
/*
\r
"Murmur"hash provided by Austin, tanjent@gmail.com
\r
\r
/*
\r
"Murmur"hash provided by Austin, tanjent@gmail.com
\r
-#define MURMUR_POSTMIX
\r
*/
\r
\r
*/
\r
\r
+#define MIX(h,k,m) { k *= m; k ^= k >> r; k *= m; h *= m; h ^= k; }
\r
+
\r
uint32_t murmur_hash(char *key, size_t length)
\r
{
\r
uint32_t murmur_hash(char *key, size_t length)
\r
{
\r
- const u
nsigned int m= 0x7fd652ad
;
\r
+ const u
int32_t m= 0x5bd1e995
;
\r
const int r= 16;
\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
\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
\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
\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
};
\r
\r
-#ifdef MURMUR_POSTMIX
\r
-
\r
h *= m;
\r
h ^= h >> 10;
\r
h *= m;
\r
h ^= h >> 17;
\r
\r
h *= m;
\r
h ^= h >> 10;
\r
h *= m;
\r
h ^= h >> 17;
\r
\r
-#endif
\r
-
\r
return h;
\r
}
\r
return h;
\r
}
\r