1#ifndef _NF_SET_HASH_H_ 2#define _NF_SET_HASH_H_ 3 4#include <unistd.h> 5#include "linux_list.h" 6 7#include <stdint.h> 8 9struct hashtable; 10struct hashtable_node; 11 12struct hashtable { 13 uint32_t hashsize; 14 uint32_t limit; 15 uint32_t count; 16 uint32_t initval; 17 18 uint32_t (*hash)(const void *data, const struct hashtable *table); 19 int (*compare)(const void *data1, const void *data2); 20 21 struct list_head members[0]; 22}; 23 24struct hashtable_node { 25 struct list_head head; 26}; 27 28struct hashtable * 29hashtable_create(int hashsize, int limit, 30 uint32_t (*hash)(const void *data, 31 const struct hashtable *table), 32 int (*compare)(const void *data1, const void *data2)); 33void hashtable_destroy(struct hashtable *h); 34int hashtable_hash(const struct hashtable *table, const void *data); 35struct hashtable_node *hashtable_find(const struct hashtable *table, const void *data, int id); 36int hashtable_add(struct hashtable *table, struct hashtable_node *n, int id); 37void hashtable_del(struct hashtable *table, struct hashtable_node *node); 38int hashtable_flush(struct hashtable *table); 39int hashtable_iterate(struct hashtable *table, void *data, 40 int (*iterate)(void *data, void *n)); 41int hashtable_iterate_limit(struct hashtable *table, void *data, uint32_t from, uint32_t steps, int (*iterate)(void *data1, void *n)); 42unsigned int hashtable_counter(const struct hashtable *table); 43 44#endif 45