/* #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*));