pennmush/game/data/
pennmush/game/log/
pennmush/game/save/
pennmush/game/txt/evt/
pennmush/game/txt/nws/
pennmush/os2/
pennmush/po/
pennmush/win32/msvc.net/
pennmush/win32/msvc6/
/* htab.h - Structures and declarations needed for table hashing */

#ifndef __HTAB_H
#define __HTAB_H

#define SOME_KEY_LEN 10

#define HTAB_UPSCALE   4
#define HTAB_DOWNSCALE 2

typedef struct hashentry HASHENT;
/** A hash table entry.
 */
struct hashentry {
  struct hashentry *next;	/**< Pointer to next entry */
  void *data;			/**< Data for this entry */
  /* int extra_size; */
  char key[SOME_KEY_LEN];	/**< Key for this entry */
};

#define HASHENT_SIZE (sizeof(HASHENT)-SOME_KEY_LEN)

typedef struct hashtable HASHTAB;
/** A hash table.
 */
struct hashtable {
  int hashsize;			/**< Size of hash table */
  int mask;			/**< Mask for entries in table */
  int entries;			/**< Number of entries stored */
  HASHENT **buckets;		/**< Pointer to pointer to entries */
  int last_hval;		/**< State for hashfirst & hashnext. */
  HASHENT *last_entry;		/**< State for hashfirst & hashnext. */
  int entry_size;		/**< Size of each entry */
};

#define get_hashmask(x) hash_getmask(x)
#define hashinit(x,y, z) hash_init(x,y, z)
#define hashfind(key,tab) hash_value(hash_find(tab,key))
#define hashadd(key,data,tab) hash_add(tab,key,data, 0)
#define hashadds(key, data, tab, size) hash_add(tab, key, data, size)
#define hashdelete(key,tab) hash_delete(tab,hash_find(tab,key))
#define hashflush(tab, size) hash_flush(tab,size)
#define hashfree(tab) hash_flush(tab, 0)
extern int hash_getmask(int *size);
extern void hash_init(HASHTAB *htab, int size, int data_size);
extern HASHENT *hash_find(HASHTAB *htab, const char *key);
extern void *hash_value(HASHENT *entry);
extern char *hash_key(HASHENT *entry);
extern void hash_resize(HASHTAB *htab, int size);
extern int hash_add
  (HASHTAB *htab, const char *key, void *hashdata, int extra_size);
extern void hash_delete(HASHTAB *htab, HASHENT *entry);
extern void hash_flush(HASHTAB *htab, int size);
extern void *hash_firstentry(HASHTAB *htab);
extern void *hash_nextentry(HASHTAB *htab);
extern char *hash_firstentry_key(HASHTAB *htab);
extern char *hash_nextentry_key(HASHTAB *htab);
extern void hash_stats_header(dbref player);
extern void hash_stats(dbref player, HASHTAB *htab, const char *hashname);
#endif