4 static uint64_t FNV_64_INIT
= 0xcbf29ce484222325L
;
5 static uint64_t FNV_64_PRIME
= 0x100000001b3L
;
7 static uint32_t FNV_32_INIT
= 2166136261L;
8 static uint32_t FNV_32_PRIME
= 16777619;
11 static unsigned int internal_generate_hash(char *key
, size_t key_length
);
12 static uint32_t internal_generate_md5(char *key
, size_t key_length
);
13 static uint32_t internal_generate_md5(char *key
, size_t key_length
);
15 unsigned int memcached_generate_hash(memcached_st
*ptr
, char *key
, size_t key_length
)
21 case MEMCACHED_HASH_DEFAULT
:
22 hash
= internal_generate_hash(key
, key_length
);
24 case MEMCACHED_HASH_MD5
:
25 hash
= internal_generate_md5(key
, key_length
);
27 case MEMCACHED_HASH_CRC
:
28 hash
= hash_crc32(key
, key_length
);
32 if (ptr
->flags
& MEM_USE_KETAMA
)
38 return hash
% ptr
->number_of_hosts
;
41 static uint32_t internal_generate_hash(char *key
, size_t key_length
)
44 unsigned int value
= 0;
49 value
+= (value
<< 10);
50 value
^= (value
>> 6);
52 value
+= (value
<< 3);
53 value
^= (value
>> 11);
54 value
+= (value
<< 15);
56 return value
== 0 ? 1 : value
;
59 static uint32_t internal_generate_md5(char *key
, size_t key_length
)
61 unsigned char results
[16];
63 md5_signature((unsigned char*)key
, (unsigned int)key_length
, results
);
65 return (uint32_t)(( results
[3] << 24 )
66 | ( results
[2] << 16 )