Home | History | Annotate | Download | only in Oniguruma
      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