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 15char 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 25extern char coeff[]; 26#endif 27 28typedef struct hentry HENT; 29 30struct hentry { 31 HENT *hent_next; 32 char *hent_key; 33 STR *hent_val; 34 int hent_hash; 35}; 36 37struct 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 45bool hdelete (HASH *tb, char *key); 46STR * hfetch ( HASH *tb, char *key ); 47int hiterinit ( HASH *tb ); 48char * hiterkey ( HENT *entry ); 49HENT * hiternext ( HASH *tb ); 50STR * hiterval ( HENT *entry ); 51HASH * hnew ( void ); 52void hsplit ( HASH *tb ); 53bool hstore ( HASH *tb, char *key, STR *val ); 54