xref: /plan9/sys/include/avl.h (revision c54d4d90799b213ecb7bf465d0346e0b05408cc3)
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