/* htab.h - Structures and declarations needed for table hashing */ /* $Id: htab.h,v 1.3 2005/08/08 09:43:07 murrayma Exp $ */ #include "copyright.h" #ifndef __HTAB_H #define __HTAB_H #include "config.h" #include "db.h" typedef struct hashentry HASHENT; struct hashentry { char *target; int *data; int checks; struct hashentry *next; }; typedef struct num_hashentry NHSHENT; struct num_hashentry { int target; int *data; int checks; struct num_hashentry *next; }; typedef struct hasharray HASHARR; struct hasharray { HASHENT *element[800]; }; typedef struct num_hasharray NHSHARR; struct num_hasharray { NHSHENT *element[800]; }; typedef struct hashtable HASHTAB; struct hashtable { int hashsize; int mask; int checks; int scans; int max_scan; int hits; int entries; int deletes; int nulls; HASHARR *entry; int last_hval; /* Used for hashfirst & hashnext. */ HASHENT *last_entry; /* like last_hval */ }; typedef struct num_hashtable NHSHTAB; struct num_hashtable { int hashsize; int mask; int checks; int scans; int max_scan; int hits; int entries; int deletes; int nulls; NHSHARR *entry; int last_hval; NHSHENT *last_entry; }; typedef struct name_table NAMETAB; struct name_table { char *name; int minlen; int perm; int flag; }; /* BQUE - Command queue */ typedef struct bque BQUE; struct bque { BQUE *next; dbref player; /* player who will do command */ dbref cause; /* player causing command (for %N) */ dbref sem; /* blocking semaphore */ int waittime; /* time to run command */ int attr; /* blocking attribute */ char *text; /* buffer for comm, env, and scr text */ char *comm; /* command */ char *env[NUM_ENV_VARS]; /* environment vars */ char *scr[NUM_ENV_VARS]; /* temp vars */ int nargs; /* How many args I have */ struct event ev; /* event structure for wait queue */ }; extern void hashinit(HASHTAB *, int); extern void hashreset(HASHTAB *); extern int hashval(char *, int); extern int get_hashmask(int *); extern int *hashfind(char *, HASHTAB *); extern int hashadd(char *, int *, HASHTAB *); extern void hashdelete(char *, HASHTAB *); extern void hashflush(HASHTAB *, int); extern int hashrepl(char *, int *, HASHTAB *); extern void hashreplall(int *, int *, HASHTAB *); extern char *hashinfo(const char *, HASHTAB *); extern int *nhashfind(int, NHSHTAB *); extern int nhashadd(int, int *, NHSHTAB *); extern void nhashdelete(int, NHSHTAB *); extern void nhashflush(NHSHTAB *, int); extern int nhashrepl(int, int *, NHSHTAB *); extern int search_nametab(dbref, NAMETAB *, char *); extern NAMETAB *find_nametab_ent(dbref, NAMETAB *, char *); extern void display_nametab(dbref, NAMETAB *, char *, int); extern void interp_nametab(dbref, NAMETAB *, int, char *, char *, char *); extern void listset_nametab(dbref, NAMETAB *, int, char *, int); extern int *hash_nextentry(HASHTAB * htab); extern int *hash_firstentry(HASHTAB * htab); extern char *hash_firstkey(HASHTAB * htab); extern char *hash_nextkey(HASHTAB * htab); extern int *nhash_nextentry(NHSHTAB * htab); extern int *nhash_firstentry(NHSHTAB * htab); extern NAMETAB powers_nametab[]; #define nhashinit(h,s) hashinit((HASHTAB *)h, s) #define nhashreset(h) hashreset((HASHTAB *)h) #define nhashinfo(t,h) hashinfo(t,(HASHTAB *)h) #endif