xref: /onnv-gate/usr/src/cmd/perl/5.8.4/distrib/x2p/hash.h (revision 0:68f95e015346)
1 /* $RCSfile: hash.h,v $$Revision: 4.1 $$Date: 92/08/07 18:29:21 $
2  *
3  *    Copyright (C) 1991, 1992, 1993, 1994, 1995, 1999, 2000,
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  * $Log:	hash.h,v $
10  */
11 
12 #define FILLPCT 60		/* don't make greater than 99 */
13 
14 #ifdef DOINIT
15 char coeff[] = {
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 		61,59,53,47,43,41,37,31,29,23,17,13,11,7,3,1,
23 		61,59,53,47,43,41,37,31,29,23,17,13,11,7,3,1};
24 #else
25 extern char coeff[];
26 #endif
27 
28 typedef struct hentry HENT;
29 
30 struct hentry {
31     HENT	*hent_next;
32     char	*hent_key;
33     STR		*hent_val;
34     int		hent_hash;
35 };
36 
37 struct htbl {
38     HENT	**tbl_array;
39     int		tbl_max;
40     int		tbl_fill;
41     int		tbl_riter;	/* current root of iterator */
42     HENT	*tbl_eiter;	/* current entry of iterator */
43 };
44 
45 bool hdelete (HASH *tb, char *key);
46 STR * hfetch ( HASH *tb, char *key );
47 int hiterinit ( HASH *tb );
48 char * hiterkey ( HENT *entry );
49 HENT * hiternext ( HASH *tb );
50 STR * hiterval ( HENT *entry );
51 HASH * hnew ( void );
52 void hsplit ( HASH *tb );
53 bool hstore ( HASH *tb, char *key, STR *val );
54