/*---------------------------------------------------------------------- File : hashtab.h Contents: static hash table management Author : Christian Borgelt History : 20.06.1998 file created 02.09.1998 client data added to functions ----------------------------------------------------------------------*/ #ifndef __HASHTAB__ #define __HASHTAB__ /*---------------------------------------------------------------------- Type Definitions ----------------------------------------------------------------------*/ typedef unsigned int HASHFN (const void *obj); typedef void HT_DELFN (void *obj); typedef void HT_APPFN (void *obj, void *client); typedef int HT_CMPFN (const void *obj1, const void *obj2); typedef struct { /* --- hash table --- */ HASHFN *hash; /* hash function */ HT_CMPFN *cmpfn; /* comparison function for objects */ HT_DELFN *delfn; /* deletion function for objects */ int cnt; /* current number of objects */ int size; /* size, i.e. number of buckets */ void *bvec[1]; /* hash bucket vector */ } HASHTAB; /* (hash table) */ /*---------------------------------------------------------------------- Functions ----------------------------------------------------------------------*/ extern HASHTAB* ht_create (int size, HASHFN hash, HT_CMPFN cmpfn, HT_DELFN delfn); extern void ht_delete (HASHTAB *htab); extern int ht_size (HASHTAB *htab); extern void ht_clear (HASHTAB *htab); extern int ht_insert (HASHTAB *htab, void *obj); extern void* ht_lookup (HASHTAB *htab, const void *obj); extern void ht_apply (HASHTAB *htab, HT_APPFN appfn, void *client); extern void* ht_get (HASHTAB *htab, int index); /*---------------------------------------------------------------------- Preprocessor Definitions ----------------------------------------------------------------------*/ #define ht_size(t) ((t)->size) #define ht_get(t,i) ((t)->bvec[i]) #endif