diff options
author | Alan Mishchenko <alanmi@berkeley.edu> | 2009-01-18 08:01:00 -0800 |
---|---|---|
committer | Alan Mishchenko <alanmi@berkeley.edu> | 2009-01-18 08:01:00 -0800 |
commit | f936cc0680c98ffe51b3a1716c996072d5dbf76c (patch) | |
tree | 784a2a809fb6b972ec6a8e2758ab758ca590d01a /src/misc/avl/avl.h | |
parent | c9ad5880cc61787dec6d018111b63023407ce0e6 (diff) | |
download | abc-f936cc0680c98ffe51b3a1716c996072d5dbf76c.tar.gz abc-f936cc0680c98ffe51b3a1716c996072d5dbf76c.tar.bz2 abc-f936cc0680c98ffe51b3a1716c996072d5dbf76c.zip |
Version abc90118
Diffstat (limited to 'src/misc/avl/avl.h')
-rw-r--r-- | src/misc/avl/avl.h | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/src/misc/avl/avl.h b/src/misc/avl/avl.h new file mode 100644 index 00000000..21d811da --- /dev/null +++ b/src/misc/avl/avl.h @@ -0,0 +1,80 @@ +/* + * Revision Control Information + * + * $Source: /vol/opua/opua2/sis/sis-1.2/common/src/sis/avl/RCS/avl.h,v $ + * $Author: sis $ + * $Revision: 1.3 $ + * $Date: 1994/07/15 23:00:40 $ + * + */ +#ifndef AVL_INCLUDED +#define AVL_INCLUDED + +#define EXTERN +#define ARGS(protos) protos + +#define MAX(a,b) ((a) > (b) ? (a) : (b)) + +#define NIL(type) \ + ((type *) 0) +#define ALLOC(type, num) \ + ((type *) malloc(sizeof(type) * (num))) +#define REALLOC(type, obj, num) \ + ((type *) realloc((char *) obj, sizeof(type) * (num))) +#define FREE(obj) \ + free((char *) (obj)) + + + +typedef struct avl_node_struct avl_node; +struct avl_node_struct { + avl_node *left, *right; + char *key; + char *value; + int height; +}; + + +typedef struct avl_tree_struct avl_tree; +struct avl_tree_struct { + avl_node *root; + int (*compar)(); + int num_entries; + int modified; +}; + + +typedef struct avl_generator_struct avl_generator; +struct avl_generator_struct { + avl_tree *tree; + avl_node **nodelist; + int count; +}; + + +#define AVL_FORWARD 0 +#define AVL_BACKWARD 1 + + +EXTERN avl_tree *avl_init_table ARGS((int (*)())); +EXTERN int avl_delete ARGS((avl_tree *, char **, char **)); +EXTERN int avl_insert ARGS((avl_tree *, char *, char *)); +EXTERN int avl_lookup ARGS((avl_tree *, char *, char **)); +EXTERN int avl_first ARGS((avl_tree *, char **, char **)); +EXTERN int avl_last ARGS((avl_tree *, char **, char **)); +EXTERN int avl_find_or_add ARGS((avl_tree *, char *, char ***)); +EXTERN int avl_count ARGS((avl_tree *)); +EXTERN int avl_numcmp ARGS((char *, char *)); +EXTERN int avl_gen ARGS((avl_generator *, char **, char **)); +EXTERN void avl_foreach ARGS((avl_tree *, void (*)(), int)); +EXTERN void avl_free_table ARGS((avl_tree *, void (*)(), void (*)())); +EXTERN void avl_free_gen ARGS((avl_generator *)); +EXTERN avl_generator *avl_init_gen ARGS((avl_tree *, int)); + +#define avl_is_member(tree, key) avl_lookup(tree, key, (char **) 0) + +#define avl_foreach_item(table, gen, dir, key_p, value_p) \ + for(gen = avl_init_gen(table, dir); \ + avl_gen(gen, key_p, value_p) || (avl_free_gen(gen),0);) + +#endif |