11f9fb570SDavid du Colombier #pragma lib "libavl.a" 21f9fb570SDavid du Colombier #pragma src "/sys/src/libavl" 31f9fb570SDavid du Colombier 41f9fb570SDavid du Colombier typedef struct Avl Avl; 51f9fb570SDavid du Colombier typedef struct Avltree Avltree; 61f9fb570SDavid du Colombier typedef struct Avlwalk Avlwalk; 71f9fb570SDavid du Colombier 81f9fb570SDavid du Colombier #pragma incomplete Avltree 91f9fb570SDavid du Colombier #pragma incomplete Avlwalk 101f9fb570SDavid du Colombier 111f9fb570SDavid du Colombier struct Avl 121f9fb570SDavid du Colombier { 131f9fb570SDavid du Colombier Avl *p; /* parent */ 141f9fb570SDavid du Colombier Avl *n[2]; /* children */ 151f9fb570SDavid du Colombier int bal; /* balance bits */ 161f9fb570SDavid du Colombier }; 171f9fb570SDavid du Colombier 181f9fb570SDavid du Colombier Avl *avlnext(Avlwalk *walk); 191f9fb570SDavid du Colombier Avl *avlprev(Avlwalk *walk); 201f9fb570SDavid du Colombier Avlwalk *avlwalk(Avltree *tree); 211f9fb570SDavid du Colombier void deleteavl(Avltree *tree, Avl *key, Avl **oldp); 221f9fb570SDavid du Colombier void endwalk(Avlwalk *walk); 231f9fb570SDavid du Colombier void insertavl(Avltree *tree, Avl *new, Avl **oldp); 241f9fb570SDavid du Colombier Avl *lookupavl(Avltree *tree, Avl *key); 251f9fb570SDavid du Colombier Avltree *mkavltree(int(*cmp)(Avl*, Avl*)); 26*c54d4d90SDavid du Colombier Avl* searchavl(Avltree *tree, Avl *key, int neighbor); 27