00001 #ifndef _HASH_TABLE_H 00002 #define _HASH_TABLE_H 00003 00004 #include "table.h" 00005 #include "jsoc.h" 00006 00007 typedef struct Hash_Table_struct { 00008 unsigned int hashprime; 00009 int (*not_equal)(const void *, const void *); 00010 unsigned long long (*hash)(const void *); 00011 Table_t *list; 00012 } Hash_Table_t; 00013 00014 void hash_init(Hash_Table_t *h, const unsigned int hashprime, const int initbinsize, 00015 int (*not_equal)(const void *, const void *), 00016 unsigned long long (*hash)(const void *)); 00017 void hash_free(Hash_Table_t *h); 00018 void hash_copy(Hash_Table_t *dst, Hash_Table_t *src); 00019 void hash_insert(Hash_Table_t *h, const void *key, const void *value ); 00020 void hash_remove(Hash_Table_t *h, const void *key); 00021 int hash_member(Hash_Table_t *h, const void *key); 00022 const void *hash_lookup(Hash_Table_t *h, const void *key); 00023 int hash_size(Hash_Table_t *h); 00024 void hash_stat(Hash_Table_t *h); 00025 void hash_map(Hash_Table_t *h, void (*f)(const void *, const void *)); 00026 void hash_map_data(Hash_Table_t *h, void (*f)(const void *, const void *, const void *data), const void *data); 00027 unsigned long long hash_universal_hash(const void *v); 00028 #endif