#ifndef __JEKINS_HASH_H__ #define __JEKINS_HASH_H__ #include "hash.h" typedef struct __jenkins_state_t { CMPH_HASH hashfunc; cmph_uint32 seed; } jenkins_state_t; jenkins_state_t *jenkins_state_new(cmph_uint32 size); //size of hash table /** \fn cmph_uint32 jenkins_hash(jenkins_state_t *state, const char *k, cmph_uint32 keylen); * \param state is a pointer to a jenkins_state_t structure * \param key is a pointer to a key * \param keylen is the key length * \return an integer that represents a hash value of 32 bits. */ cmph_uint32 jenkins_hash(jenkins_state_t *state, const char *k, cmph_uint32 keylen); /** \fn void jenkins_hash_vector_(jenkins_state_t *state, const char *k, cmph_uint32 keylen, cmph_uint32 * hashes); * \param state is a pointer to a jenkins_state_t structure * \param key is a pointer to a key * \param keylen is the key length * \param hashes is a pointer to a memory large enough to fit three 32-bit integers. */ void jenkins_hash_vector_(jenkins_state_t *state, const char *k, cmph_uint32 keylen, cmph_uint32 * hashes); void jenkins_state_dump(jenkins_state_t *state, char **buf, cmph_uint32 *buflen); jenkins_state_t *jenkins_state_copy(jenkins_state_t *src_state); jenkins_state_t *jenkins_state_load(const char *buf, cmph_uint32 buflen); void jenkins_state_destroy(jenkins_state_t *state); /** \fn void jenkins_state_pack(jenkins_state_t *state, void *jenkins_packed); * \brief Support the ability to pack a jenkins function into a preallocated contiguous memory space pointed by jenkins_packed. * \param state points to the jenkins function * \param jenkins_packed pointer to the contiguous memory area used to store the jenkins function. The size of jenkins_packed must be at least jenkins_state_packed_size() */ void jenkins_state_pack(jenkins_state_t *state, void *jenkins_packed); /** \fn cmph_uint32 jenkins_state_packed_size(); * \brief Return the amount of space needed to pack a jenkins function. * \return the size of the packed function or zero for failures */ cmph_uint32 jenkins_state_packed_size(void); /** \fn cmph_uint32 jenkins_hash_packed(void *jenkins_packed, const char *k, cmph_uint32 keylen); * \param jenkins_packed is a pointer to a contiguous memory area * \param key is a pointer to a key * \param keylen is the key length * \return an integer that represents a hash value of 32 bits. */ cmph_uint32 jenkins_hash_packed(void *jenkins_packed, const char *k, cmph_uint32 keylen); /** \fn jenkins_hash_vector_packed(void *jenkins_packed, const char *k, cmph_uint32 keylen, cmph_uint32 * hashes); * \param jenkins_packed is a pointer to a contiguous memory area * \param key is a pointer to a key * \param keylen is the key length * \param hashes is a pointer to a memory large enough to fit three 32-bit integers. */ void jenkins_hash_vector_packed(void *jenkins_packed, const char *k, cmph_uint32 keylen, cmph_uint32 * hashes); #endif