/* this is the brisby fancy hashtable */
#ifndef __ht_h
#define __ht_h
typedef struct {
void *key;
unsigned klen;
unsigned long hash;
void *data;
int free_data;
int idata;
void *next;
} htbucket;
typedef struct {
unsigned s;
htbucket **b;
unsigned long (*hash)(const void *,unsigned);
int (*ondel)(void *);
/* useful for to-disk journaling */
void (*onwrite)(const void *key, unsigned klen, const void *data);
int (*onfail)(const void *key, unsigned klen);
} ht;
enum { HT_RESTART,
HT_FAILNOW, HT_SUCCESSNOW,
HT_TRIPSUCCESS, HT_TRIPFAIL,
HT_WILLSUCCESS, HT_WILLFAIL,
HT_NEXT, HT_AGAIN,
};
int ht_init(ht *x, unsigned tab, unsigned long (*hash)(const void *, unsigned));
int ht_die(ht *x);
int ht_walk(ht *x, int (*fn)(ht *, void *, unsigned, void *));
int ht_store(ht *x, const void *, unsigned, void *);
int ht_storeint(ht *x, const void *, unsigned, int i);
int ht_storecopy(ht *x, const void *, unsigned, void *, unsigned);
void *ht_fetch(ht *x, const void *, unsigned);
int ht_fetchint(ht *x, const void *, unsigned);
int ht_delete(ht *x, const void *, unsigned);
int ht_ondelete(ht *x, int (*fn)(void *data));
int ht_onwrite(ht *x, void (*fn)(const void *,unsigned,const void *));
int ht_onfail(ht *x, int (*fn)(const void *, unsigned));
#endif
syntax highlighted by Code2HTML, v. 0.9.1