/* * 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 __cplusplus extern "C" { #define CLOSE_EXTERN } #else #define CLOSE_EXTERN #endif #include /* for uintptr_t */ #pragma GCC visibility push(hidden) #ifndef ANYARGS #ifdef __cplusplus #define ANYARGS ... #else #define ANYARGS #endif #endif #ifdef _WIN32 #define HASH_FUNCTION_CAST (int (__cdecl *)(ANYARGS)) #else #define HASH_FUNCTION_CAST #endif typedef uintptr_t st_data_t; typedef struct st_table st_table; struct st_hash_type { int (*compare) (ANYARGS); int (*hash) (ANYARGS); }; 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 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 int st_strhash(); #pragma GCC visibility pop CLOSE_EXTERN #endif /* ST_INCLUDED */