#include <ace/RB_Tree.h>
template<class KEY, class T> class RB_Tree {
public:
RB_Tree (void);
RB_Tree (const RB_Tree<KEY, T> &rbt);
virtual ~RB_Tree (void);
void operator= (const RB_Tree<KEY, T> &rbt);
virtual int lessthan (const KEY &k1, const KEY &k2);
T* find (const KEY &k);
T* insert (const KEY &k, const T &t);
int remove (const KEY &k);
void clear (void);
void RB_rotate_right (RB_Tree_Node<KEY, T> * x);
void RB_rotate_left (RB_Tree_Node<KEY, T> * x);
void RB_delete_fixup (RB_Tree_Node<KEY, T> * x);
RB_Tree_Node<KEY, T> * RB_tree_successor ( RB_Tree_Node<KEY, T> *x ) const;
RB_Tree_Node<KEY, T> * RB_tree_predecessor ( RB_Tree_Node<KEY, T> *x ) const;
RB_Tree_Node<KEY, T> * RB_tree_minimum ( RB_Tree_Node<KEY, T> *x ) const;
RB_Tree_Node<KEY, T> * RB_tree_maximum ( RB_Tree_Node<KEY, T> *x ) const;
RB_Tree_Node<KEY, T> * find_node (const KEY &k);
void RB_rebalance (RB_Tree_Node<KEY, T> * x);
RB_Tree_Node<KEY, T> *root_;
};
RB_Tree (void);
RB_Tree (const RB_Tree<KEY, T> &rbt);
virtual ~RB_Tree (void);
void operator= (const RB_Tree<KEY, T> &rbt);
virtual int lessthan (const KEY &k1, const KEY &k2);
k2, 0
otherwise.
T* find (const KEY &k);
T* insert (const KEY &k, const T &t);
comparison. This method returns a
pointer to the inserted item copy, or 0 if an error occurred.
NOTE: if an identical key already exists in the tree, no new item
is created, and the returned pointer addresses the existing item
associated with the existing key.
int remove (const KEY &k);
void clear (void);
These could all be made private methods by making the corresponding class template instantiations friends, but there are some problems with this on certain compilers: leave them all public for now private:
void RB_rotate_right (RB_Tree_Node<KEY, T> * x);
void RB_rotate_left (RB_Tree_Node<KEY, T> * x);
void RB_delete_fixup (RB_Tree_Node<KEY, T> * x);
RB_Tree_Node<KEY, T> * RB_tree_successor (
RB_Tree_Node<KEY, T> *x
) const;
RB_Tree_Node<KEY, T> * RB_tree_predecessor (
RB_Tree_Node<KEY, T> *x
) const;
RB_Tree_Node<KEY, T> * RB_tree_minimum (
RB_Tree_Node<KEY, T> *x
) const;
RB_Tree_Node<KEY, T> * RB_tree_maximum (
RB_Tree_Node<KEY, T> *x
) const;
RB_Tree_Node<KEY, T> * find_node (const KEY &k);
void RB_rebalance (RB_Tree_Node<KEY, T> * x);
private members
RB_Tree_Node<KEY, T> *root_;