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