1 /* $Id: rbTree.h,v 1.3 2002/07/11 21:18:10 slobasso Exp $ */
3 #ifndef NEDIT_RBTREE_H_INCLUDED
4 #define NEDIT_RBTREE_H_INCLUDED
6 typedef struct rbTreeNode
{
7 struct rbTreeNode
*left
; /* left child */
8 struct rbTreeNode
*right
; /* right child */
9 struct rbTreeNode
*parent
; /* parent */
10 int color
; /* node color (rbTreeNodeBlack, rbTreeNodeRed) */
13 typedef int (*rbTreeCompareNodeCB
)(rbTreeNode
*left
, rbTreeNode
*right
);
14 typedef rbTreeNode
*(*rbTreeAllocateNodeCB
)(rbTreeNode
*src
);
15 typedef rbTreeNode
*(*rbTreeAllocateEmptyNodeCB
)(void);
16 typedef void (*rbTreeDisposeNodeCB
)(rbTreeNode
*src
);
17 typedef int (*rbTreeCopyToNodeCB
)(rbTreeNode
*dst
, rbTreeNode
*src
);
19 rbTreeNode
*rbTreeBegin(rbTreeNode
*base
);
20 rbTreeNode
*rbTreeReverseBegin(rbTreeNode
*base
);
21 rbTreeNode
*rbTreeFind(rbTreeNode
*base
, rbTreeNode
*searchNode
,
22 rbTreeCompareNodeCB compareRecords
);
23 rbTreeNode
*rbTreeInsert(rbTreeNode
*base
, rbTreeNode
*searchNode
,
24 rbTreeCompareNodeCB compareRecords
,
25 rbTreeAllocateNodeCB allocateNode
,
26 rbTreeCopyToNodeCB copyToNode
);
27 rbTreeNode
*rbTreeUnlinkNode(rbTreeNode
*base
, rbTreeNode
*z
);
28 void rbTreeDeleteNode(rbTreeNode
*base
, rbTreeNode
*foundNode
,
29 rbTreeDisposeNodeCB disposeNode
);
30 int rbTreeDelete(rbTreeNode
*base
, rbTreeNode
*searchNode
,
31 rbTreeCompareNodeCB compareRecords
,
32 rbTreeDisposeNodeCB disposeNode
);
33 rbTreeNode
*rbTreeNext(rbTreeNode
*x
);
34 rbTreeNode
*rbTreePrevious(rbTreeNode
*x
);
35 int rbTreeSize(rbTreeNode
*base
);
36 rbTreeNode
*rbTreeNew(rbTreeAllocateEmptyNodeCB allocateEmptyNode
);
37 void rbTreeDispose(rbTreeNode
*base
, rbTreeDisposeNodeCB disposeNode
);
39 #endif /* NEDIT_RBTREE_H_INCLUDED */