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