/* Definitions for TinyMUCK hash tables */

/* Possible data types that may be stored in a hash table */
union u_hash_data {
  int ival;		/* Store compiler tokens here */
  dbref dbval;		/* Player hashing will want this */
  int (*func)();	/* Function call */
  void *pval;		/* Can't hurt, we might need it someday */
};

/* The actual hash entry for each item */
struct t_hash_entry {
  struct t_hash_entry *next;   /* Pointer for conflict resolution */
  const char *name;		     /* The name of the item */
  union u_hash_data dat;       /* Data value for item */
};

typedef union u_hash_data	hash_data;
typedef struct t_hash_entry	hash_entry;
typedef hash_entry	*	hash_tab;

#define PLAYER_HASH_SIZE   (1 << 8) /* Table for player lookups */

extern hash_data *find_hash(const char *s, hash_tab *table, unsigned size);
extern hash_entry *add_hash(const char *name, hash_data data, hash_tab *table,
                            unsigned size);
extern int free_hash(const char *name, hash_tab *table, unsigned size);
extern void kill_hash(hash_tab *table, unsigned size);