st.h
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:3k
源码类别:

通讯编程

开发平台:

Visual C++

  1. /* $Header: /usr/src/mash/repository/vint/xgraph/st.h,v 1.1.1.1 1999/12/03 23:15:53 heideman Exp $ */
  2. #ifndef ST_INCLUDED
  3. #define ST_INCLUDED
  4. /* Function prototypes */
  5. #ifdef __STDC__
  6. #define ARGS(args) args
  7. #else
  8. #define ARGS(args) ()
  9. #endif
  10. extern char st_pkg_name[];
  11. /* Fatal error codes */
  12. #define ST_NO_MEM 0
  13. #define ST_BAD_RET 1
  14. #define ST_BAD_GEN 2
  15. typedef struct st_table_entry st_table_entry;
  16. struct st_table_entry {
  17.     char   *key;
  18.     char   *record;
  19.     st_table_entry *next;
  20. };
  21. typedef struct st_table st_table;
  22. struct st_table {
  23.     int     (*compare) ();
  24.     int     (*hash) ();
  25.     int     num_bins;
  26.     int     num_entries;
  27.     int     max_density;
  28.     int     reorder_flag;
  29.     double  grow_factor;
  30.     st_table_entry **bins;
  31. };
  32. typedef struct st_generator st_generator;
  33. struct st_generator {
  34.     st_table *table;
  35.     st_table_entry *entry;
  36.     int     idx;
  37. };
  38. #define st_is_member(table,key) st_lookup(table,key,(char **) 0)
  39. #define st_count(table) ((table)->num_entries)
  40. enum st_retval {
  41.     ST_CONTINUE, ST_STOP, ST_DELETE
  42. };
  43. extern st_table *st_init_table_with_params
  44.         ARGS((int (*compare) (), int (*hash) (), int size, int density,
  45.               double grow_factor, int reorder_flag));
  46. extern st_table *st_init_table
  47.         ARGS((int (*compare) (), int (*hash) ()));
  48. extern void st_free_table
  49.         ARGS((st_table * table));
  50. extern int st_lookup
  51.         ARGS((st_table * table, char *key, char **value));
  52. extern int st_insert
  53.         ARGS((st_table * table, char *key, char *value));
  54. extern void st_add_direct
  55.         ARGS((st_table * table, char *key, char *value));
  56. extern int st_find_or_add
  57.         ARGS((st_table * table, char *key, char ***slot));
  58. extern int st_find
  59.         ARGS((st_table * table, char *key, char ***slot));
  60. extern st_table *st_copy
  61.         ARGS((st_table * old_table));
  62. extern int st_delete
  63.         ARGS((st_table * table, char **keyp, char **value));
  64. extern int st_foreach
  65.         ARGS((st_table * table, enum st_retval(*func) (), char *arg));
  66. extern int st_strhash
  67.         ARGS((char *string, int modulus));
  68. extern int st_numhash
  69.         ARGS((char *x, int size));
  70. extern int st_ptrhash
  71.         ARGS((char *x, int size));
  72. extern int st_numcmp
  73.         ARGS((char *x, char *y));
  74. extern int st_ptrcmp
  75.         ARGS((char *x, char *y));
  76. extern st_generator *st_init_gen
  77.         ARGS((st_table * table));
  78. extern int st_gen
  79.         ARGS((st_generator * gen, char **key_p, char **value_p));
  80. extern void st_free_gen
  81.         ARGS((st_generator * gen));
  82. #define ST_DEFAULT_MAX_DENSITY 5
  83. #define ST_DEFAULT_INIT_TABLE_SIZE 11
  84. #define ST_DEFAULT_GROW_FACTOR 2.0
  85. #define ST_DEFAULT_REORDER_FLAG 0
  86. #define st_foreach_item(table, gen, key_p, value_p) 
  87.     for(gen=st_init_gen(table); st_gen(gen,key_p,value_p) || (st_free_gen(gen),0);)
  88. #endif /* ST_INCLUDED */