root/1.8.3/tags/p3/hdrs/htab.h

Revision 919, 2.3 KB (checked in by shawnw, 19 months ago)

1.8.3p3

Line 
1/* htab.h - Structures and declarations needed for table hashing */
2
3#ifndef __HTAB_H
4#define __HTAB_H
5
6
7#define HTAB_UPSCALE   4
8#define HTAB_DOWNSCALE 2
9
10typedef struct hashentry HASHENT;
11/** A hash table entry.
12 */
13struct hashentry {
14  struct hashentry *next;       /**< Pointer to next entry */
15  void *data;                   /**< Data for this entry */
16  char *key;                    /**< Key for this entry */
17};
18
19#define HASHENT_SIZE (sizeof(HASHENT))
20
21typedef struct hashtable HASHTAB;
22/** A hash table.
23 */
24struct hashtable {
25  int hashsize;                 /**< Size of hash table */
26  int mask;                     /**< Mask for entries in table */
27  int entries;                  /**< Number of entries stored */
28  HASHENT **buckets;            /**< Pointer to pointer to entries */
29  int last_hval;                /**< State for hashfirst & hashnext. */
30  HASHENT *last_entry;          /**< State for hashfirst & hashnext. */
31  int entry_size;               /**< Size of each entry */
32  void (*free_data) (void *);   /**< Function to call on data when deleting
33                                   a entry. */
34};
35
36#define get_hashmask(x) hash_getmask(x)
37#define hashinit(x,y, z) hash_init(x,y, z, NULL)
38#define hashfind(key,tab) hash_value(hash_find(tab,key))
39#define hashadd(key,data,tab) hash_add(tab,key,data, 0)
40#define hashadds(key, data, tab, size) hash_add(tab, key, data, size)
41#define hashdelete(key,tab) hash_delete(tab,hash_find(tab,key))
42#define hashflush(tab, size) hash_flush(tab,size)
43#define hashfree(tab) hash_flush(tab, 0)
44extern int hash_getmask(int *size);
45extern void hash_init(HASHTAB *htab, int size, int data_size, void (*)(void *));
46extern HASHENT *hash_find(HASHTAB *htab, const char *key);
47extern void *hash_value(HASHENT *entry);
48extern char *hash_key(HASHENT *entry);
49extern void hash_resize(HASHTAB *htab, int size);
50extern int hash_add
51  (HASHTAB *htab, const char *key, void *hashdata, int extra_size);
52extern void hash_delete(HASHTAB *htab, HASHENT *entry);
53extern void hash_flush(HASHTAB *htab, int size);
54extern void *hash_firstentry(HASHTAB *htab);
55extern void *hash_nextentry(HASHTAB *htab);
56extern char *hash_firstentry_key(HASHTAB *htab);
57extern char *hash_nextentry_key(HASHTAB *htab);
58extern void hash_stats_header(dbref player);
59extern void hash_stats(dbref player, HASHTAB *htab, const char *hashname);
60#endif
Note: See TracBrowser for help on using the browser.