projects
/
m6w6
/
libmemcached
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
|
github
raw
|
patch
|
inline
| side by side (parent:
8fce866
)
Update on murmur
author
<brian@gir-2.local>
<>
Sat, 15 Mar 2008 20:24:40 +0000
(13:24 -0700)
committer
<brian@gir-2.local>
<>
Sat, 15 Mar 2008 20:24:40 +0000
(13:24 -0700)
libmemcached/murmur_hash.c
patch
|
blob
|
history
diff --git
a/libmemcached/murmur_hash.c
b/libmemcached/murmur_hash.c
index abb2deda3e5340f68cc04e7dc4b6dd8f4da8b930..ce28ec389cd08a571dd144e21bea3e9479817c13 100644
(file)
--- a/
libmemcached/murmur_hash.c
+++ b/
libmemcached/murmur_hash.c
@@
-2,47
+2,42
@@
\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
\r
while(length >= 4)
\r
{
\r
\r
while(length >= 4)
\r
{
\r
- h += *(unsigned int *)key;
\r
- h *= m;
\r
- h ^= h >> r;
\r
+ uint32_t k = *(uint32_t*)key;
\r
+ MIX(h,k,m);
\r
\r
key += 4;
\r
length -= 4;
\r
}
\r
\r
\r
key += 4;
\r
length -= 4;
\r
}
\r
\r
-
switch
(length)
\r
+
if
(length)
\r
{
\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
- };
\r
-
\r
-#ifdef MURMUR_POSTMIX
\r
+ uint32_t k= 0;
\r
+
\r
+ switch(length)
\r
+ {
\r
+ case 3: k += key[2] << 16;
\r
+ case 2: k += key[1] << 8;
\r
+ case 1: k += key[0];
\r
+ };
\r
+ MIX(h,k,m);
\r
+ }
\r
\r
h *= m;
\r
h ^= h >> 10;
\r
h *= m;
\r
h ^= h >> 17;
\r
\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