073b0c5d81b606f6a9f7730dd326b448eee5c88e
4 static unsigned int internal_generate_hash(char *key
, size_t key_length
);
5 static uint32_t internal_generate_md5(char *key
, size_t key_length
);
7 unsigned int memcached_generate_hash(memcached_st
*ptr
, char *key
, size_t key_length
)
11 if (ptr
->flags
& MEM_USE_MD5
)
12 hash
= internal_generate_md5(key
, key_length
);
13 else if (ptr
->flags
& MEM_USE_CRC
)
14 hash
= hash_crc32(key
, key_length
);
16 hash
= internal_generate_hash(key
, key_length
);
18 if (ptr
->flags
& MEM_USE_KETAMA
)
24 return hash
% ptr
->number_of_hosts
;
27 static uint32_t internal_generate_hash(char *key
, size_t key_length
)
30 unsigned int value
= 0;
35 value
+= (value
<< 10);
36 value
^= (value
>> 6);
38 value
+= (value
<< 3);
39 value
^= (value
>> 11);
40 value
+= (value
<< 15);
42 return value
== 0 ? 1 : value
;
45 static uint32_t internal_generate_md5(char *key
, size_t key_length
)
47 unsigned char results
[16];
49 md5_signature((unsigned char*)key
, (unsigned int)key_length
, results
);
51 return (uint32_t)(( results
[3] << 24 )
52 | ( results
[2] << 16 )