/* htab.h - Structures and declarations needed for table hashing */
#include "copyright.h"
#ifndef __HTAB_H
#define __HTAB_H
#include "db.h"
typedef struct hashentry HASHENT;
struct hashentry {
char *target;
int *data;
struct hashentry *next;
};
typedef struct num_hashentry NHSHENT;
struct num_hashentry {
int target;
int *data;
struct num_hashentry *next;
};
typedef struct hasharray HASHARR;
struct hasharray {
HASHENT *element[500];
};
typedef struct num_hasharray NHSHARR;
struct num_hasharray {
NHSHENT *element[500];
};
typedef struct hashtable HASHTAB;
struct hashtable {
int hashsize;
int checks;
int scans;
int max_scan;
int hits;
int entries;
int deletes;
int nulls;
HASHARR *entry;
};
typedef struct num_hashtable NHSHTAB;
struct num_hashtable {
int hashsize;
int checks;
int scans;
int max_scan;
int hits;
int entries;
int deletes;
int nulls;
NHSHARR *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 left; /* seconds left until execution */
char *env[NUM_ENV_VARS];/* environment, from wild_match or command */
int nargs; /* How many args I have */
char *comm; /* store the command here */
};
#ifdef WANT_ANSI
extern void hashinit (HASHTAB *htab, int size);
extern void hashreset (HASHTAB *htab);
extern int hashval (char *str, HASHTAB *htab);
extern int *hashfind (char *str, HASHTAB *htab);
extern int hashadd (char *str, int *hashdata, HASHTAB *htab);
extern void hashdelete (char *str, HASHTAB *htab);
extern void hashflush (HASHTAB *htab, int size);
extern int hashrepl (char *str, int *hashdata, HASHTAB *htab);
extern char *hashinfo(const char *tab_name, HASHTAB *htab);
extern int *nhashfind (int val, NHSHTAB *htab);
extern int nhashadd (int val, int *hashdata, NHSHTAB *htab);
extern void nhashdelete (int val, NHSHTAB *htab);
extern void nhashflush (NHSHTAB *htab, int size);
extern int nhashrepl (int val, int *hashdata, NHSHTAB *htab);
extern int search_nametab (dbref player, NAMETAB *ntab, char *flagname);
extern NAMETAB *find_nametab_ent (dbref player, NAMETAB *ntab, char *flagname);
extern void display_nametab (dbref player, NAMETAB *ntab, char *prefix,
int list_if_none);
extern void interp_nametab (dbref player, NAMETAB *ntab, int flagword,
char *prefix, char *true_text, char *false_text);
extern void listset_nametab (dbref player, NAMETAB *ntab, int flagword,
char *prefix, int list_if_none);
#else
extern void hashinit ();
extern void hashreset ();
extern int hashval ();
extern int *hashfind ();
extern int hashadd ();
extern void hashdelete ();
extern void hashflush ();
extern int hashrepl ();
extern char *hashinfo();
extern int *nhashfind ();
extern int nhashadd ();
extern void nhashdelete ();
extern void nhashflush ();
extern int nhashrepl ();
extern int search_nametab ();
extern NAMETAB *find_nametab_ent ();
extern void display_nametab ();
extern void interp_nametab ();
extern void listset_nametab ();
#endif /* WANT_ANSI */
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