Blame


1 375b78fb 2009-08-23 rsc /* #pragma lib "libavl.a" */
2 375b78fb 2009-08-23 rsc /* #pragma src "/sys/src/libavl" */
3 375b78fb 2009-08-23 rsc
4 375b78fb 2009-08-23 rsc AUTOLIB(avl)
5 375b78fb 2009-08-23 rsc
6 375b78fb 2009-08-23 rsc typedef struct Avl Avl;
7 375b78fb 2009-08-23 rsc typedef struct Avltree Avltree;
8 375b78fb 2009-08-23 rsc typedef struct Avlwalk Avlwalk;
9 375b78fb 2009-08-23 rsc
10 375b78fb 2009-08-23 rsc /* #pragma incomplete Avltree */
11 375b78fb 2009-08-23 rsc /* #pragma incomplete Avlwalk */
12 375b78fb 2009-08-23 rsc
13 375b78fb 2009-08-23 rsc struct Avl
14 375b78fb 2009-08-23 rsc {
15 375b78fb 2009-08-23 rsc Avl *p; /* parent */
16 375b78fb 2009-08-23 rsc Avl *n[2]; /* children */
17 375b78fb 2009-08-23 rsc int bal; /* balance bits */
18 375b78fb 2009-08-23 rsc };
19 375b78fb 2009-08-23 rsc
20 375b78fb 2009-08-23 rsc Avl *avlnext(Avlwalk *walk);
21 375b78fb 2009-08-23 rsc Avl *avlprev(Avlwalk *walk);
22 375b78fb 2009-08-23 rsc Avlwalk *avlwalk(Avltree *tree);
23 375b78fb 2009-08-23 rsc void deleteavl(Avltree *tree, Avl *key, Avl **oldp);
24 375b78fb 2009-08-23 rsc void endwalk(Avlwalk *walk);
25 375b78fb 2009-08-23 rsc void insertavl(Avltree *tree, Avl *new, Avl **oldp);
26 375b78fb 2009-08-23 rsc Avl *lookupavl(Avltree *tree, Avl *key);
27 375b78fb 2009-08-23 rsc Avltree *mkavltree(int(*cmp)(Avl*, Avl*));