1 /* 2 * Revision Control Information 3 * 4 * /projects/hsis/CVS/utilities/st/st.h,v 5 * serdar 6 * 1.1 7 * 1993/07/29 01:00:21 8 * 9 */ 10 /* LINTLIBRARY */ 11 12 /* /projects/hsis/CVS/utilities/st/st.h,v 1.1 1993/07/29 01:00:21 serdar Exp */ 13 14 #ifndef ABC__misc__st__stmm_h 15 #define ABC__misc__st__stmm_h 16 17 #include "misc/util/abc_global.h" 18 19 ABC_NAMESPACE_HEADER_START 20 21 22 /* These are potential duplicates. */ 23 #ifndef EXTERN 24 # ifdef __cplusplus 25 # ifdef ABC_NAMESPACE 26 # define EXTERN extern 27 # else 28 # define EXTERN extern "C" 29 # endif 30 # else 31 # define EXTERN extern 32 # endif 33 #endif 34 35 #ifndef ARGS 36 #define ARGS(protos) protos 37 #endif 38 39 typedef int (*stmm_compare_func_type)(const char*, const char*); 40 typedef int (*stmm_hash_func_type)(const char*, int); 41 42 typedef struct stmm_table_entry stmm_table_entry; 43 typedef struct stmm_table stmm_table; 44 typedef struct stmm_generator stmm_generator; 45 46 struct stmm_table_entry 47 { 48 char *key; 49 char *record; 50 stmm_table_entry *next; 51 }; 52 53 struct stmm_table 54 { 55 stmm_compare_func_type compare; 56 stmm_hash_func_type hash; 57 int num_bins; 58 int num_entries; 59 int max_density; 60 int reorder_flag; 61 double grow_factor; 62 stmm_table_entry **bins; 63 // memory manager to improve runtime and prevent memory fragmentation 64 // added by alanmi - January 16, 2003 65 void * pMemMan; 66 }; 67 68 struct stmm_generator 69 { 70 stmm_table *table; 71 stmm_table_entry *entry; 72 int index; 73 }; 74 75 #define stmm_is_member(table,key) stmm_lookup(table,key,(char **) 0) 76 #define stmm_count(table) ((table)->num_entries) 77 78 enum stmm_retval 79 { STMM_CONTINUE, STMM_STOP, STMM_DELETE }; 80 81 typedef enum stmm_retval (*STMM_PFSR) (char *, char *, char *); 82 83 EXTERN stmm_table *stmm_init_table_with_params 84 ARGS ((stmm_compare_func_type compare, stmm_hash_func_type hash, int size, int density, double grow_factor, int reorder_flag)); 85 EXTERN stmm_table *stmm_init_table ARGS ((stmm_compare_func_type, stmm_hash_func_type)); 86 EXTERN void stmm_free_table ARGS ((stmm_table *)); 87 EXTERN int stmm_lookup ARGS ((stmm_table *, char *, char **)); 88 EXTERN int stmm_lookup_int ARGS ((stmm_table *, char *, int *)); 89 EXTERN int stmm_insert ARGS ((stmm_table *, char *, char *)); 90 EXTERN int stmm_add_direct ARGS ((stmm_table *, char *, char *)); 91 EXTERN int stmm_find_or_add ARGS ((stmm_table *, char *, char ***)); 92 EXTERN int stmm_find ARGS ((stmm_table *, char *, char ***)); 93 EXTERN stmm_table *stmm_copy ARGS ((stmm_table *)); 94 EXTERN int stmm_delete ARGS ((stmm_table *, char **, char **)); 95 EXTERN int stmm_delete_int ARGS ((stmm_table *, long *, char **)); 96 EXTERN int stmm_foreach ARGS ((stmm_table *, STMM_PFSR, char *)); 97 EXTERN int stmm_strhash ARGS ((const char *, int)); 98 EXTERN int stmm_numhash ARGS ((const char *, int)); 99 EXTERN int stmm_ptrhash ARGS ((const char *, int)); 100 EXTERN int stmm_numcmp ARGS ((const char *, const char *)); 101 EXTERN int stmm_ptrcmp ARGS ((const char *, const char *)); 102 EXTERN stmm_generator *stmm_init_gen ARGS ((stmm_table *)); 103 EXTERN int stmm_gen ARGS ((stmm_generator *, char **, char **)); 104 EXTERN int stmm_gen_int ARGS ((stmm_generator *, char **, long *)); 105 EXTERN void stmm_free_gen ARGS ((stmm_generator *)); 106 // additional functions 107 EXTERN void stmm_clean ARGS ((stmm_table *)); 108 109 110 111 #define STMM_DEFAULT_MAX_DENSITY 5 112 #define STMM_DEFAULT_INIT_TABLE_SIZE 11 113 #define STMM_DEFAULT_GROW_FACTOR 2.0 114 #define STMM_DEFAULT_REORDER_FLAG 0 115 116 // added by Zhihong: no need for memory allocation 117 #define stmm_foreach_item2(tb, /* stmm_generator */gen, key, value) \ 118 for(gen.table=(tb), gen.entry=NULL, gen.index=0; \ 119 stmm_gen(&(gen),key,value);) 120 121 #define stmm_foreach_item(table, gen, key, value) \ 122 for(gen=stmm_init_gen(table); stmm_gen(gen,key,value) || (stmm_free_gen(gen),0);) 123 124 #define stmm_foreach_item_int(table, gen, key, value) \ 125 for(gen=stmm_init_gen(table); stmm_gen_int(gen,key,value) || (stmm_free_gen(gen),0);) 126 127 #define STMM_OUT_OF_MEM -10000 128 129 /* 130 131 // consider adding these other other similar definitions 132 #define st__table stmm_table 133 #define st__insert stmm_insert 134 #define st__delete stmm_delete 135 #define st__lookup stmm_lookup 136 #define st__init_table stmm_init_table 137 #define st__free_table stmm_free_table 138 139 */ 140 141 142 143 ABC_NAMESPACE_HEADER_END 144 145 146 147 #endif /* STMM_INCLUDED */ 148