st.h
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:3k
- /* $Header: /usr/src/mash/repository/vint/xgraph/st.h,v 1.1.1.1 1999/12/03 23:15:53 heideman Exp $ */
- #ifndef ST_INCLUDED
- #define ST_INCLUDED
- /* Function prototypes */
- #ifdef __STDC__
- #define ARGS(args) args
- #else
- #define ARGS(args) ()
- #endif
- extern char st_pkg_name[];
- /* Fatal error codes */
- #define ST_NO_MEM 0
- #define ST_BAD_RET 1
- #define ST_BAD_GEN 2
- typedef struct st_table_entry st_table_entry;
- struct st_table_entry {
- char *key;
- char *record;
- st_table_entry *next;
- };
- typedef struct st_table st_table;
- struct st_table {
- int (*compare) ();
- int (*hash) ();
- int num_bins;
- int num_entries;
- int max_density;
- int reorder_flag;
- double grow_factor;
- st_table_entry **bins;
- };
- typedef struct st_generator st_generator;
- struct st_generator {
- st_table *table;
- st_table_entry *entry;
- int idx;
- };
- #define st_is_member(table,key) st_lookup(table,key,(char **) 0)
- #define st_count(table) ((table)->num_entries)
- enum st_retval {
- ST_CONTINUE, ST_STOP, ST_DELETE
- };
- extern st_table *st_init_table_with_params
- ARGS((int (*compare) (), int (*hash) (), int size, int density,
- double grow_factor, int reorder_flag));
- extern st_table *st_init_table
- ARGS((int (*compare) (), int (*hash) ()));
- extern void st_free_table
- ARGS((st_table * table));
- extern int st_lookup
- ARGS((st_table * table, char *key, char **value));
- extern int st_insert
- ARGS((st_table * table, char *key, char *value));
- extern void st_add_direct
- ARGS((st_table * table, char *key, char *value));
- extern int st_find_or_add
- ARGS((st_table * table, char *key, char ***slot));
- extern int st_find
- ARGS((st_table * table, char *key, char ***slot));
- extern st_table *st_copy
- ARGS((st_table * old_table));
- extern int st_delete
- ARGS((st_table * table, char **keyp, char **value));
- extern int st_foreach
- ARGS((st_table * table, enum st_retval(*func) (), char *arg));
- extern int st_strhash
- ARGS((char *string, int modulus));
- extern int st_numhash
- ARGS((char *x, int size));
- extern int st_ptrhash
- ARGS((char *x, int size));
- extern int st_numcmp
- ARGS((char *x, char *y));
- extern int st_ptrcmp
- ARGS((char *x, char *y));
- extern st_generator *st_init_gen
- ARGS((st_table * table));
- extern int st_gen
- ARGS((st_generator * gen, char **key_p, char **value_p));
- extern void st_free_gen
- ARGS((st_generator * gen));
- #define ST_DEFAULT_MAX_DENSITY 5
- #define ST_DEFAULT_INIT_TABLE_SIZE 11
- #define ST_DEFAULT_GROW_FACTOR 2.0
- #define ST_DEFAULT_REORDER_FLAG 0
- #define st_foreach_item(table, gen, key_p, value_p)
- for(gen=st_init_gen(table); st_gen(gen,key_p,value_p) || (st_free_gen(gen),0);)
- #endif /* ST_INCLUDED */