-#pragma lib "libavl.a"
+#pragma lib "libavl.a"
#pragma src "/sys/src/libavl"
-typedef struct Avl Avl;
-typedef struct Avltree Avltree;
-typedef struct Avlwalk Avlwalk;
+typedef struct Avl Avl;
+typedef struct Avltree Avltree;
-#pragma incomplete Avltree
-#pragma incomplete Avlwalk
+struct Avl {
+ Avl *c[2];
+ Avl *p;
+ schar balance;
+};
-struct Avl
-{
- Avl *p; /* parent */
- Avl *n[2]; /* children */
- int bal; /* balance bits */
+struct Avltree {
+ int (*cmp)(Avl*, Avl*);
+ Avl *root;
};
-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*));
-Avl* searchavl(Avltree *tree, Avl *key, int neighbor);
+Avltree *avlinit(Avltree*, int(*)(Avl*, Avl*));
+Avltree *avlcreate(int(*)(Avl*, Avl*));
+Avl *avllookup(Avltree*, Avl*, int);
+Avl *avldelete(Avltree*, Avl*);
+Avl *avlinsert(Avltree*, Avl*);
+Avl *avlnext(Avl*);
+Avl *avlprev(Avl*);