Sync Makemaker with blead
[perl.git] / x2p / hash.h
1 /*    hash.h
2  *
3  *    Copyright (C) 1991, 1992, 1993, 1994, 1995, 1999, 2000, 2005
4  *    by Larry Wall and others
5  *
6  *    You may distribute under the terms of either the GNU General Public
7  *    License or the Artistic License, as specified in the README file.
8  */
9
10 #define FILLPCT 60              /* don't make greater than 99 */
11
12 #ifdef DOINIT
13 EXTERN_C char const coeff[] = {
14                 61,59,53,47,43,41,37,31,29,23,17,13,11,7,3,1,
15                 61,59,53,47,43,41,37,31,29,23,17,13,11,7,3,1,
16                 61,59,53,47,43,41,37,31,29,23,17,13,11,7,3,1,
17                 61,59,53,47,43,41,37,31,29,23,17,13,11,7,3,1,
18                 61,59,53,47,43,41,37,31,29,23,17,13,11,7,3,1,
19                 61,59,53,47,43,41,37,31,29,23,17,13,11,7,3,1,
20                 61,59,53,47,43,41,37,31,29,23,17,13,11,7,3,1,
21                 61,59,53,47,43,41,37,31,29,23,17,13,11,7,3,1};
22 #else
23 EXTERN_C const char coeff[];
24 #endif
25
26 typedef struct hentry HENT;
27
28 struct hentry {
29     HENT        *hent_next;
30     char        *hent_key;
31     STR         *hent_val;
32     int         hent_hash;
33 };
34
35 struct htbl {
36     HENT        **tbl_array;
37     int         tbl_max;
38     int         tbl_fill;
39     int         tbl_riter;      /* current root of iterator */
40     HENT        *tbl_eiter;     /* current entry of iterator */
41 };
42
43 STR * hfetch ( HASH *tb, char *key );
44 int hiterinit ( HASH *tb );
45 HASH * hnew ( void );
46 void hsplit ( HASH *tb );
47 bool hstore ( HASH *tb, char *key, STR *val );