1 /* This is a public domain general purpose hash table package written by Peter Moore @ UCB. */ 2 3 /* @(#) st.h 5.1 89/12/14 */ 4 5 #ifndef ST_INCLUDED 6 7 #define ST_INCLUDED 8 9 #ifdef _WIN32 10 # include <windows.h> 11 typedef ULONG_PTR st_data_t; 12 #else 13 typedef unsigned long st_data_t; 14 #endif 15 #define ST_DATA_T_DEFINED 16 17 typedef struct st_table st_table; 18 19 struct st_hash_type { 20 int (*compare)(); 21 int (*hash)(); 22 }; 23 24 struct st_table { 25 struct st_hash_type *type; 26 int num_bins; 27 int num_entries; 28 struct st_table_entry **bins; 29 }; 30 31 #define st_is_member(table,key) st_lookup(table,key,(st_data_t *)0) 32 33 enum st_retval {ST_CONTINUE, ST_STOP, ST_DELETE, ST_CHECK}; 34 35 #ifndef _ 36 # define _(args) args 37 #endif 38 #ifndef ANYARGS 39 # ifdef __cplusplus 40 # define ANYARGS ... 41 # else 42 # define ANYARGS 43 # endif 44 #endif 45 46 st_table *st_init_table _((struct st_hash_type *)); 47 st_table *st_init_table_with_size _((struct st_hash_type *, int)); 48 st_table *st_init_numtable _((void)); 49 st_table *st_init_numtable_with_size _((int)); 50 st_table *st_init_strtable _((void)); 51 st_table *st_init_strtable_with_size _((int)); 52 int st_delete _((st_table *, st_data_t *, st_data_t *)); 53 int st_delete_safe _((st_table *, st_data_t *, st_data_t *, st_data_t)); 54 int st_insert _((st_table *, st_data_t, st_data_t)); 55 int st_lookup _((st_table *, st_data_t, st_data_t *)); 56 int st_foreach _((st_table *, int (*)(ANYARGS), st_data_t)); 57 void st_add_direct _((st_table *, st_data_t, st_data_t)); 58 void st_free_table _((st_table *)); 59 void st_cleanup_safe _((st_table *, st_data_t)); 60 st_table *st_copy _((st_table *)); 61 62 #define ST_NUMCMP ((int (*)()) 0) 63 #define ST_NUMHASH ((int (*)()) -2) 64 65 #define st_numcmp ST_NUMCMP 66 #define st_numhash ST_NUMHASH 67 68 #endif /* ST_INCLUDED */ 69