| /* This is a public domain general purpose hash table package written by Peter Moore @ UCB. */ | |
| /* @(#) st.h 5.1 89/12/14 */ | |
| #ifndef ST_INCLUDED | |
| #define ST_INCLUDED | |
| #ifdef _WIN32 | |
| # include <windows.h> | |
| typedef ULONG_PTR st_data_t; | |
| #else | |
| typedef unsigned long st_data_t; | |
| #endif | |
| #define ST_DATA_T_DEFINED | |
| typedef struct st_table st_table; | |
| struct st_hash_type { | |
| int (*compare)(); | |
| int (*hash)(); | |
| }; | |
| struct st_table { | |
| struct st_hash_type *type; | |
| int num_bins; | |
| int num_entries; | |
| struct st_table_entry **bins; | |
| }; | |
| #define st_is_member(table,key) st_lookup(table,key,(st_data_t *)0) | |
| enum st_retval {ST_CONTINUE, ST_STOP, ST_DELETE, ST_CHECK}; | |
| #ifndef _ | |
| # define _(args) args | |
| #endif | |
| #ifndef ANYARGS | |
| # ifdef __cplusplus | |
| # define ANYARGS ... | |
| # else | |
| # define ANYARGS | |
| # endif | |
| #endif | |
| st_table *st_init_table _((struct st_hash_type *)); | |
| st_table *st_init_table_with_size _((struct st_hash_type *, int)); | |
| st_table *st_init_numtable _((void)); | |
| st_table *st_init_numtable_with_size _((int)); | |
| st_table *st_init_strtable _((void)); | |
| st_table *st_init_strtable_with_size _((int)); | |
| int st_delete _((st_table *, st_data_t *, st_data_t *)); | |
| int st_delete_safe _((st_table *, st_data_t *, st_data_t *, st_data_t)); | |
| int st_insert _((st_table *, st_data_t, st_data_t)); | |
| int st_lookup _((st_table *, st_data_t, st_data_t *)); | |
| int st_foreach _((st_table *, int (*)(ANYARGS), st_data_t)); | |
| void st_add_direct _((st_table *, st_data_t, st_data_t)); | |
| void st_free_table _((st_table *)); | |
| void st_cleanup_safe _((st_table *, st_data_t)); | |
| st_table *st_copy _((st_table *)); | |
| #define ST_NUMCMP ((int (*)()) 0) | |
| #define ST_NUMHASH ((int (*)()) -2) | |
| #define st_numcmp ST_NUMCMP | |
| #define st_numhash ST_NUMHASH | |
| #endif /* ST_INCLUDED */ |