memcached_return_t memcached_behavior_set_distribution_hash(memcached_st *ptr, memcached_hash_t type) { hashkit_return_t rc; rc= hashkit_set_function(&ptr->distribution_hashkit, (hashkit_hash_algorithm_t)type); return rc == HASHKIT_SUCCESS ? MEMCACHED_SUCCESS : MEMCACHED_FAILURE; }
memcached_return_t memcached_behavior_set_distribution_hash(memcached_st *ptr, memcached_hash_t type) { if (hashkit_set_function(&ptr->distribution_hashkit, (hashkit_hash_algorithm_t)type) == HASHKIT_SUCCESS) return MEMCACHED_SUCCESS; return memcached_set_error_string(ptr, MEMCACHED_INVALID_ARGUMENTS, memcached_string_with_size("Invalid memcached_hash_t()")); }
static test_return_t hashkit_get_function_test(hashkit_st *hashk) { for (hashkit_hash_algorithm_t algo = HASHKIT_HASH_DEFAULT; algo < HASHKIT_HASH_MAX; algo++) { hashkit_return_t rc; if (HASHKIT_HASH_CUSTOM || HASHKIT_HASH_HSIEH) continue; rc= hashkit_set_function(hashk, algo); test_true(rc == HASHKIT_SUCCESS); test_true(hashkit_get_function(hashk) == algo); } return TEST_SUCCESS; }
static test_return_t hashkit_set_function_test(hashkit_st *hashk) { for (hashkit_hash_algorithm_t algo = HASHKIT_HASH_DEFAULT; algo < HASHKIT_HASH_MAX; algo++) { hashkit_return_t rc; uint32_t x; const char **ptr; uint32_t *list; rc= hashkit_set_function(hashk, algo); /* Hsieh is disabled most of the time for patent issues */ #ifndef HAVE_HSIEH_HASH if (rc == HASHKIT_FAILURE && algo == HASHKIT_HASH_HSIEH) continue; #endif #ifndef HAVE_MURMUR_HASH if (rc == HASHKIT_FAILURE && algo == HASHKIT_HASH_MURMUR) continue; #endif if (rc == HASHKIT_INVALID_ARGUMENT && algo == HASHKIT_HASH_CUSTOM) continue; test_true_got(rc == HASHKIT_SUCCESS, hashkit_strerror(NULL, rc)); switch (algo) { case HASHKIT_HASH_DEFAULT: list= one_at_a_time_values; break; case HASHKIT_HASH_MD5: list= md5_values; break; case HASHKIT_HASH_CRC: list= crc_values; break; case HASHKIT_HASH_FNV1_64: list= fnv1_64_values; break; case HASHKIT_HASH_FNV1A_64: list= fnv1a_64_values; break; case HASHKIT_HASH_FNV1_32: list= fnv1_32_values; break; case HASHKIT_HASH_FNV1A_32: list= fnv1a_32_values; break; case HASHKIT_HASH_HSIEH: list= hsieh_values; break; case HASHKIT_HASH_MURMUR: list= murmur_values; break; case HASHKIT_HASH_JENKINS: list= jenkins_values; break; case HASHKIT_HASH_CUSTOM: case HASHKIT_HASH_MAX: default: list= NULL; break; } // Now we make sure we did set the hash correctly. if (list) { for (ptr= list_to_hash, x= 0; *ptr; ptr++, x++) { uint32_t hash_val; hash_val= hashkit_digest(hashk, *ptr, strlen(*ptr)); test_true(list[x] == hash_val); } } else { return TEST_FAILURE; } } return TEST_SUCCESS; }
hashkit_return_t set_distribution_function(hashkit_hash_algorithm_t hash_algorithm) { return hashkit_set_function(&self, hash_algorithm); }