| /* #pragma lib "libavl.a" */ |
| /* #pragma src "/sys/src/libavl" */ |
| |
| AUTOLIB(avl) |
| |
| typedef struct Avl Avl; |
| typedef struct Avltree Avltree; |
| typedef struct Avlwalk Avlwalk; |
| |
| /* #pragma incomplete Avltree */ |
| /* #pragma incomplete Avlwalk */ |
| |
| struct Avl |
| { |
| Avl *p; /* parent */ |
| Avl *n[2]; /* children */ |
| int bal; /* balance bits */ |
| }; |
| |
| Avl *avlnext(Avlwalk *walk); |
| Avl *avlprev(Avlwalk *walk); |
| Avlwalk *avlwalk(Avltree *tree); |
| void deleteavl(Avltree *tree, Avl *key, Avl **oldp); |
| void endwalk(Avlwalk *walk); |
| void insertavl(Avltree *tree, Avl *new, Avl **oldp); |
| Avl *lookupavl(Avltree *tree, Avl *key); |
| Avltree *mkavltree(int(*cmp)(Avl*, Avl*)); |