#ifndef _BBTREE_H_ #define _BBTREE_H_ /* this is only here for testing. In final version * it should be in bbtree.c */ typedef struct bbTreeNode { void * value; long height; struct bbTreeNode * left; struct bbTreeNode * right; } s_bbTreeNode; #define BBTREE_LEFT_HEIGHT(t) ((t)->left ? (t)->left->height : -1) #define BBTREE_RIGHT_HEIGHT(t) ((t)->right ? (t)->right->height : -1) #define BBTREE_AVL(t) (BBTREE_RIGHT_HEIGHT ((t)) - \ BBTREE_LEFT_HEIGHT ((t))) /* * comparison for tree-node values. * Has to be defined by user and set * with bbTreeNew. * * params: * left: pointer to left value * right: pointer to right value * * returns: * 0: if values equal * 1: if right greater left * -1: if left greater right */ typedef int (* t_bbTreeCmp) (void *, void *); typedef struct bbTree { struct bbTreeNode * root; t_bbTreeCmp cmp; } s_bbTree; /* constructor, destructor */ s_bbTree * bbTreeNew (t_bbTreeCmp); void bbTreeFree (s_bbTree *); /* data manipulation */ void * bbTreeInsert (s_bbTree *, void *); void * bbTreeSeek (s_bbTree *, void *); void * bbTreeRemove (s_bbTree *, void *); /* analysation */ void * bbTreeMin (s_bbTree *); void * bbTreeMax (s_bbTree *); int bbTreeSize (s_bbTree *); /* bbTree to other Datastructure */ void ** bbTreeInOrder (s_bbTree *, void **); #endif /* _BBTREE_H_ */