#ifndef FR_HASH_H
#define FR_HASH_H
#include <freeradius-devel/ident.h>
RCSIDH(hash_h, "$Id$")
uint32_t fr_hash(const void *, size_t);
uint32_t fr_hash_update(const void *data, size_t size, uint32_t hash);
uint32_t fr_hash_string(const char *p);
uint32_t fr_hash_fold(uint32_t hash, int bits);
typedef struct fr_hash_table_t fr_hash_table_t;
typedef void (*fr_hash_table_free_t)(void *);
typedef uint32_t (*fr_hash_table_hash_t)(const void *);
typedef int (*fr_hash_table_cmp_t)(const void *, const void *);
typedef int (*fr_hash_table_walk_t)(void * , void * );
fr_hash_table_t *fr_hash_table_create(fr_hash_table_hash_t hashNode,
fr_hash_table_cmp_t cmpNode,
fr_hash_table_free_t freeNode);
void fr_hash_table_free(fr_hash_table_t *ht);
int fr_hash_table_insert(fr_hash_table_t *ht, void *data);
int fr_hash_table_delete(fr_hash_table_t *ht, const void *data);
void *fr_hash_table_yank(fr_hash_table_t *ht, const void *data);
int fr_hash_table_replace(fr_hash_table_t *ht, void *data);
void *fr_hash_table_finddata(fr_hash_table_t *ht, const void *data);
int fr_hash_table_num_elements(fr_hash_table_t *ht);
int fr_hash_table_walk(fr_hash_table_t *ht,
fr_hash_table_walk_t callback,
void *ctx);
#endif