diff options
author | spew <devnull@localhost> | 2016-12-22 16:47:41 -0600 |
---|---|---|
committer | spew <devnull@localhost> | 2016-12-22 16:47:41 -0600 |
commit | 0885ed1e8098c7f1cd54ff528d1b5b56d670e756 (patch) | |
tree | cdfa84e209da747006bfcb43404f1251ac78e0fb /sys/include/avl.h | |
parent | 3bf89ed825835b574c3d1c7f640918e65aac488d (diff) |
alv(2): new avl implementation
Diffstat (limited to 'sys/include/avl.h')
-rw-r--r-- | sys/include/avl.h | 37 |
1 files changed, 17 insertions, 20 deletions
diff --git a/sys/include/avl.h b/sys/include/avl.h index 242ee1ba3..49b61fbb6 100644 --- a/sys/include/avl.h +++ b/sys/include/avl.h @@ -1,26 +1,23 @@ -#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 *avlcreate(int(*cmp)(Avl*, Avl*)); +Avl *avllookup(Avltree*, Avl*); +Avl *avldelete(Avltree*, Avl*); +Avl *avlinsert(Avltree*, Avl*); +Avl *avlnext(Avl*); +Avl *avlprev(Avl*); |