+ :param key: the key to generate a hash of
+ :param key_length: the length of the `key` without any terminating zero byte
+ :param context: the custom hash function context set through `hashkit_set_custom_function` or `hashkit_set_custom_distribution_function`
+ :returns: the custom hash function should return a hash value for `key` as an unsigned 32bit integer
+
+.. c:type:: enum hashkit_return_t hashkit_return_t
+
+.. enum:: hashkit_return_t
+
+ .. enumerator:: HASHKIT_SUCCESS
+
+ Operation succeeded.
+
+ .. enumerator:: HASHKIT_FAILURE
+
+ Operation failed.
+
+ .. enumerator:: HASHKIT_MEMORY_ALLOCATION_FAILURE
+
+ Memory allocation failed.
+
+ .. enumerator:: HASHKIT_INVALID_HASH
+
+ Invalid `hashkit_hash_algorithm_t` passed.
+
+ .. enumerator:: HASHKIT_INVALID_ARGUMENT
+
+ Invalid argument passed.
+
+.. c:type:: enum hashkit_hash_algorithm_t hashkit_hash_algorithm_t
+
+.. enum:: hashkit_hash_algorithm_t
+
+ .. enumerator:: HASHKIT_HASH_DEFAULT
+
+ Default hash algorithm (one_at_a_time).
+
+ .. enumerator:: HASHKIT_HASH_MD5
+ .. enumerator:: HASHKIT_HASH_CRC
+ .. enumerator:: HASHKIT_HASH_FNV1_64
+ .. enumerator:: HASHKIT_HASH_FNV1A_64
+ .. enumerator:: HASHKIT_HASH_FNV1_32
+ .. enumerator:: HASHKIT_HASH_FNV1A_32
+ .. enumerator:: HASHKIT_HASH_HSIEH
+
+ Only available if `libhashkit` hash been built with HSIEH support.
+
+ .. enumerator:: HASHKIT_HASH_MURMUR
+
+ Only available if `libhashkit` has been built with MURMUR support.
+
+ .. enumerator:: HASHKIT_HASH_MURMUR3
+
+ Only available if `libhashkit` has been built with MURMUR support.
+
+ .. enumerator:: HASHKIT_HASH_JENKINS
+ .. enumerator:: HASHKIT_HASH_CUSTOM
+
+ Use custom `hashkit_hash_fn` function set through `hashkit_set_custom_function` or `hashkit_set_custom_distribution_function`.
+