]> pd.if.org Git - jsw/blob - jsw_avltree.h
initial commit of data structure code from jsw
[jsw] / jsw_avltree.h
1 #ifndef JSW_AVLTREE_H\r
2 #define JSW_AVLTREE_H\r
3 \r
4 /*\r
5   AVL balanced tree library\r
6 \r
7     > Created (Julienne Walker): June 17, 2003\r
8     > Modified (Julienne Walker): September 24, 2005\r
9 \r
10   This code is in the public domain. Anyone may\r
11   use it or change it in any way that they see\r
12   fit. The author assumes no responsibility for \r
13   damages incurred through use of the original\r
14   code or any variations thereof.\r
15 \r
16   It is requested, but not required, that due\r
17   credit is given to the original author and\r
18   anyone who has modified the code through\r
19   a header comment, such as this one.\r
20 */\r
21 #ifdef __cplusplus\r
22 #include <cstddef>\r
23 \r
24 using std::size_t;\r
25 \r
26 extern "C" {\r
27 #else\r
28 #include <stddef.h>\r
29 #endif\r
30 \r
31 /* Opaque types */\r
32 typedef struct jsw_avltree jsw_avltree_t;\r
33 typedef struct jsw_avltrav jsw_avltrav_t;\r
34 \r
35 /* User-defined item handling */\r
36 typedef int   (*cmp_f) ( const void *p1, const void *p2 );\r
37 typedef void *(*dup_f) ( void *p );\r
38 typedef void  (*rel_f) ( void *p );\r
39 \r
40 /* AVL tree functions */\r
41 jsw_avltree_t *jsw_avlnew ( cmp_f cmp, dup_f dup, rel_f rel );\r
42 void           jsw_avldelete ( jsw_avltree_t *tree );\r
43 void          *jsw_avlfind ( jsw_avltree_t *tree, void *data );\r
44 int            jsw_avlinsert ( jsw_avltree_t *tree, void *data );\r
45 int            jsw_avlerase ( jsw_avltree_t *tree, void *data );\r
46 size_t         jsw_avlsize ( jsw_avltree_t *tree );\r
47 \r
48 /* Traversal functions */\r
49 jsw_avltrav_t *jsw_avltnew ( void );\r
50 void           jsw_avltdelete ( jsw_avltrav_t *trav );\r
51 void          *jsw_avltfirst ( jsw_avltrav_t *trav, jsw_avltree_t *tree );\r
52 void          *jsw_avltlast ( jsw_avltrav_t *trav, jsw_avltree_t *tree );\r
53 void          *jsw_avltnext ( jsw_avltrav_t *trav );\r
54 void          *jsw_avltprev ( jsw_avltrav_t *trav );\r
55 \r
56 #ifdef __cplusplus\r
57 }\r
58 #endif\r
59 \r
60 #endif\r