summaryrefslogtreecommitdiff
path: root/ace/RB_Tree.i
blob: 28bc6f9d6143f8912e79057a13e8640546f0b963 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
/* -*- C++ -*- */
// $Id$

// RB_Tree.i

/////////////////////////////////////////
// template class RB_Tree_Node<KEY, T> //
/////////////////////////////////////////

template <class KEY, class T> ACE_INLINE KEY &
RB_Tree_Node<KEY, T>::key ()
{
  return k_;
}
  // key accessor

template <class KEY, class T> ACE_INLINE T &
RB_Tree_Node<KEY, T>::item ()
{
  return t_;
}
  // item accessor

template <class KEY, class T> ACE_INLINE void
RB_Tree_Node<KEY, T>::color (RB_Tree_Node_Color c)
{
  color_ = c;
}
  // set color of the node

template <class KEY, class T> ACE_INLINE RB_Tree_Node_Color 
RB_Tree_Node<KEY, T>::color ()
{
  return color_;
}
  // get color of the node


template <class KEY, class T> ACE_INLINE RB_Tree_Node<KEY, T> *
RB_Tree_Node<KEY, T>::parent ()
{
  return parent_;
}
  // accessor for node's parent pointer

template <class KEY, class T> ACE_INLINE void
RB_Tree_Node<KEY, T>::parent (RB_Tree_Node<KEY, T> * p)
{
  parent_ = p;
}
  // mutator for node's parent pointer

template <class KEY, class T> ACE_INLINE RB_Tree_Node<KEY, T> *
RB_Tree_Node<KEY, T>::left ()
{
  return left_;
}
  // accessor for node's left child pointer

template <class KEY, class T> ACE_INLINE void
RB_Tree_Node<KEY, T>::left (RB_Tree_Node<KEY, T> * l)
{
  left_ = l;
}
  // mutator for node's left child pointer

template <class KEY, class T> ACE_INLINE RB_Tree_Node<KEY, T> *
RB_Tree_Node<KEY, T>::right ()
{
  return right_;
}
  // accessor for node's right child pointer

template <class KEY, class T> ACE_INLINE void
RB_Tree_Node<KEY, T>::right (RB_Tree_Node<KEY, T> * r)
{
  right_ = r;
}
  // mutator for node's right child pointer


////////////////////////////////////
// template class RB_Tree<KEY, T> //
////////////////////////////////////

template <class KEY, class T> ACE_INLINE void
RB_Tree<KEY, T>::clear ()
{
  delete root_;
  root_ = 0;
};
  // destroys all nodes and sets the root pointer null.


/////////////////////////////////////////////
// template class RB_Tree_Iterator<KEY, T> //
/////////////////////////////////////////////



template <class KEY, class T> ACE_INLINE KEY * 
RB_Tree_Iterator<KEY, T>::key ()
{
  return node_ ? (&(node_->key ())) : 0;
}
  // accessor for key of node under iterator (if any)

template <class KEY, class T> ACE_INLINE T * 
RB_Tree_Iterator<KEY, T>::item ()
{
  return node_ ? (&(node_->item ())) : 0;
}
  // accessor for item of node under iterator (if any)

template <class KEY, class T> ACE_INLINE int 
RB_Tree_Iterator<KEY, T>::first ()
{
  node_ = tree_.RB_tree_minimum (tree_.root_);
  return node_ ? 1 : 0;
}
  // move to the first item in the tree

template <class KEY, class T> ACE_INLINE int
RB_Tree_Iterator<KEY, T>::last ()
{
  node_ = tree_.RB_tree_maximum (tree_.root_);
  return node_ ? 1 : 0;
}
  // move to the last item in the tree

template <class KEY, class T> ACE_INLINE int 
RB_Tree_Iterator<KEY, T>::next ()
{
  node_ = tree_.RB_tree_successor (node_);
  return node_ ? 1 : 0;
}
  // move to the next item in the tree
  // returns 1 if there is a next item, 0 otherwise

template <class KEY, class T> ACE_INLINE int 
RB_Tree_Iterator<KEY, T>::previous ()
{
  node_ = tree_.RB_tree_predecessor (node_);
  return node_ ? 1 : 0;
}
  // move to the previous item in the tree
  // returns 1 if there is a previous item, 0 otherwise

template <class KEY, class T> ACE_INLINE int 
RB_Tree_Iterator<KEY, T>::is_done ()
{
  return node_ ? 0 : 1;
}