2
* Copyright (C) 2010 Brian Aker
5
* Use and distribution licensed under the BSD license. See
6
* the COPYING file in the parent directory for full text.
11
uint32_t hashkit_generate_value(const hashkit_st *self, const char *key, size_t key_length)
13
return self->base_hash.function(key, key_length, self->base_hash.context);
16
static hashkit_return_t _set_function(struct hashkit_function_st *self, hashkit_hash_algorithm_t hash_algorithm)
18
switch (hash_algorithm)
20
case HASHKIT_HASH_DEFAULT:
21
self->function= hashkit_one_at_a_time;
23
case HASHKIT_HASH_MD5:
24
self->function= hashkit_md5;
26
case HASHKIT_HASH_CRC:
27
self->function= hashkit_crc32;
29
case HASHKIT_HASH_FNV1_64:
30
self->function= hashkit_fnv1_64;
32
case HASHKIT_HASH_FNV1A_64:
33
self->function= hashkit_fnv1a_64;
35
case HASHKIT_HASH_FNV1_32:
36
self->function= hashkit_fnv1_32;
38
case HASHKIT_HASH_FNV1A_32:
39
self->function= hashkit_fnv1a_32;
41
case HASHKIT_HASH_HSIEH:
42
#ifdef HAVE_HSIEH_HASH
43
self->function= hashkit_hsieh;
46
return HASHKIT_FAILURE;
48
case HASHKIT_HASH_MURMUR:
49
self->function= hashkit_murmur;
51
case HASHKIT_HASH_JENKINS:
52
self->function= hashkit_jenkins;
54
case HASHKIT_HASH_CUSTOM:
55
case HASHKIT_HASH_MAX:
57
return HASHKIT_FAILURE;
63
return HASHKIT_SUCCESS;
66
hashkit_return_t hashkit_set_function(hashkit_st *self, hashkit_hash_algorithm_t hash_algorithm)
68
return _set_function(&self->base_hash, hash_algorithm);
71
hashkit_return_t hashkit_set_distribution_function(hashkit_st *self, hashkit_hash_algorithm_t hash_algorithm)
73
return _set_function(&self->distribution_hash, hash_algorithm);
76
static hashkit_return_t _set_custom_function(struct hashkit_function_st *self, hashkit_hash_fn function, void *context)
80
self->function= function;
81
self->context= context;
83
return HASHKIT_SUCCESS;
86
return HASHKIT_FAILURE;
89
hashkit_return_t hashkit_set_custom_function(hashkit_st *self, hashkit_hash_fn function, void *context)
91
return _set_custom_function(&self->base_hash, function, context);
94
hashkit_return_t hashkit_set_custom_distribution_function(hashkit_st *self, hashkit_hash_fn function, void *context)
96
return _set_custom_function(&self->distribution_hash, function, context);
99
static hashkit_hash_algorithm_t get_function_type(const hashkit_hash_fn function)
101
if (function == hashkit_one_at_a_time)
103
return HASHKIT_HASH_DEFAULT;
105
else if (function == hashkit_md5)
107
return HASHKIT_HASH_MD5;
109
else if (function == hashkit_crc32)
111
return HASHKIT_HASH_CRC;
113
else if (function == hashkit_fnv1_64)
115
return HASHKIT_HASH_FNV1_64;
117
else if (function == hashkit_fnv1a_64)
119
return HASHKIT_HASH_FNV1A_64;
121
else if (function == hashkit_fnv1_32)
123
return HASHKIT_HASH_FNV1_32;
125
else if (function == hashkit_fnv1a_32)
127
return HASHKIT_HASH_FNV1A_32;
129
#ifdef HAVE_HSIEH_HASH
130
else if (function == hashkit_hsieh)
132
return HASHKIT_HASH_HSIEH;
135
else if (function == hashkit_murmur)
137
return HASHKIT_HASH_MURMUR;
139
else if (function == hashkit_jenkins)
141
return HASHKIT_HASH_JENKINS;
144
return HASHKIT_HASH_CUSTOM;
147
hashkit_hash_algorithm_t hashkit_get_function(const hashkit_st *self)
149
return get_function_type(self->base_hash.function);
152
hashkit_hash_algorithm_t hashkit_get_distribution_function(const hashkit_st *self)
154
return get_function_type(self->distribution_hash.function);
157
uint32_t libhashkit_generate_value(const char *key, size_t key_length, hashkit_hash_algorithm_t hash_algorithm)
159
switch (hash_algorithm)
161
case HASHKIT_HASH_DEFAULT:
162
return libhashkit_one_at_a_time(key, key_length);
163
case HASHKIT_HASH_MD5:
164
return libhashkit_md5(key, key_length);
165
case HASHKIT_HASH_CRC:
166
return libhashkit_crc32(key, key_length);
167
case HASHKIT_HASH_FNV1_64:
168
return libhashkit_fnv1_64(key, key_length);
169
case HASHKIT_HASH_FNV1A_64:
170
return libhashkit_fnv1a_64(key, key_length);
171
case HASHKIT_HASH_FNV1_32:
172
return libhashkit_fnv1_32(key, key_length);
173
case HASHKIT_HASH_FNV1A_32:
174
return libhashkit_fnv1a_32(key, key_length);
175
case HASHKIT_HASH_HSIEH:
176
#ifdef HAVE_HSIEH_HASH
177
return libhashkit_hsieh(key, key_length);
181
case HASHKIT_HASH_MURMUR:
182
return libhashkit_murmur(key, key_length);
183
case HASHKIT_HASH_JENKINS:
184
return libhashkit_jenkins(key, key_length);
185
case HASHKIT_HASH_CUSTOM:
186
case HASHKIT_HASH_MAX:
189
fprintf(stderr, "hashkit_hash_t was extended but libhashkit_generate_value was not updated\n");