+ break;
+ case MEMCACHED_HASH_MD5:
+ hash= internal_generate_md5(key, key_length);
+ break;
+ case MEMCACHED_HASH_CRC:
+ hash= ((hash_crc32(key, key_length) >> 16) & 0x7fff);
+ break;
+ /* FNV hash'es lifted from Dustin Sallings work */
+ case MEMCACHED_HASH_FNV1_64:
+ {
+ /* Thanks to pierre@demartines.com for the pointer */
+ hash= FNV_64_INIT;
+ for (x= 0; x < key_length; x++)
+ {
+ hash *= FNV_64_PRIME;
+ hash ^= key[x];
+ }
+ }
+ break;
+ case MEMCACHED_HASH_FNV1A_64:
+ {
+ hash= FNV_64_INIT;
+ for (x= 0; x < key_length; x++)
+ {
+ hash ^= key[x];
+ hash *= FNV_64_PRIME;
+ }
+ }
+ break;
+ case MEMCACHED_HASH_FNV1_32:
+ {
+ hash= FNV_32_INIT;
+ for (x= 0; x < key_length; x++)
+ {
+ hash *= FNV_32_PRIME;
+ hash ^= key[x];
+ }
+ }
+ break;
+ case MEMCACHED_HASH_FNV1A_32:
+ {
+ hash= FNV_32_INIT;
+ for (x= 0; x < key_length; x++)
+ {
+ hash ^= key[x];
+ hash *= FNV_32_PRIME;
+ }
+ }
+ break;
+ case MEMCACHED_HASH_KETAMA:
+ {
+ hash= internal_generate_ketama_md5(key, key_length);
+ break;
+ }
+ }