1 #ifndef __CMPH_HASH_H__ 2 #define __CMPH_HASH_H__ 3 4 #include "cmph_types.h" 5 6 typedef union __hash_state_t hash_state_t; 7 8 hash_state_t *hash_state_new(CMPH_HASH, cmph_uint32 hashsize); 9 10 /** \fn cmph_uint32 hash(hash_state_t *state, const char *key, cmph_uint32 keylen); 11 * \param state is a pointer to a hash_state_t structure 12 * \param key is a pointer to a key 13 * \param keylen is the key length 14 * \return an integer that represents a hash value of 32 bits. 15 */ 16 cmph_uint32 hash(hash_state_t *state, const char *key, cmph_uint32 keylen); 17 18 /** \fn void hash_vector(hash_state_t *state, const char *key, cmph_uint32 keylen, cmph_uint32 * hashes); 19 * \param state is a pointer to a hash_state_t structure 20 * \param key is a pointer to a key 21 * \param keylen is the key length 22 * \param hashes is a pointer to a memory large enough to fit three 32-bit integers. 23 */ 24 void hash_vector(hash_state_t *state, const char *key, cmph_uint32 keylen, cmph_uint32 * hashes); 25 26 void hash_state_dump(hash_state_t *state, char **buf, cmph_uint32 *buflen); 27 28 hash_state_t * hash_state_copy(hash_state_t *src_state); 29 30 hash_state_t *hash_state_load(const char *buf, cmph_uint32 buflen); 31 32 void hash_state_destroy(hash_state_t *state); 33 34 /** \fn void hash_state_pack(hash_state_t *state, void *hash_packed); 35 * \brief Support the ability to pack a hash function into a preallocated contiguous memory space pointed by hash_packed. 36 * \param state points to the hash function 37 * \param hash_packed pointer to the contiguous memory area used to store the hash function. The size of hash_packed must be at least hash_state_packed_size() 38 * 39 * Support the ability to pack a hash function into a preallocated contiguous memory space pointed by hash_packed. 40 * However, the hash function type must be packed outside. 41 */ 42 void hash_state_pack(hash_state_t *state, void *hash_packed); 43 44 /** \fn cmph_uint32 hash_packed(void *hash_packed, CMPH_HASH hashfunc, const char *k, cmph_uint32 keylen); 45 * \param hash_packed is a pointer to a contiguous memory area 46 * \param hashfunc is the type of the hash function packed in hash_packed 47 * \param key is a pointer to a key 48 * \param keylen is the key length 49 * \return an integer that represents a hash value of 32 bits. 50 */ 51 cmph_uint32 hash_packed(void *hash_packed, CMPH_HASH hashfunc, const char *k, cmph_uint32 keylen); 52 53 /** \fn cmph_uint32 hash_state_packed_size(CMPH_HASH hashfunc) 54 * \brief Return the amount of space needed to pack a hash function. 55 * \param hashfunc function type 56 * \return the size of the packed function or zero for failures 57 */ 58 cmph_uint32 hash_state_packed_size(CMPH_HASH hashfunc); 59 60 61 /** \fn hash_vector_packed(void *hash_packed, CMPH_HASH hashfunc, const char *k, cmph_uint32 keylen, cmph_uint32 * hashes); 62 * \param hash_packed is a pointer to a contiguous memory area 63 * \param key is a pointer to a key 64 * \param keylen is the key length 65 * \param hashes is a pointer to a memory large enough to fit three 32-bit integers. 66 */ 67 void hash_vector_packed(void *hash_packed, CMPH_HASH hashfunc, const char *k, cmph_uint32 keylen, cmph_uint32 * hashes); 68 69 70 /** \fn CMPH_HASH hash_get_type(hash_state_t *state); 71 * \param state is a pointer to a hash_state_t structure 72 * \return the hash function type pointed by state 73 */ 74 CMPH_HASH hash_get_type(hash_state_t *state); 75 76 #endif 77