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