@@ -21,9 +21,11 @@ template <class T, template<typename> class Order > class TreeIterator {
21
21
22
22
// zum nächsten Element
23
23
TreeIterator<T, Order>& operator ++() {
24
- if (m_node == NULL || m_end )
24
+ if (m_node == NULL || m_mode == end )
25
25
return *this ;
26
26
27
+ m_mode = middle;
28
+
27
29
if (m_node->m_right != NULL ) {
28
30
m_node = m_node->m_right ;
29
31
while (m_node->m_left != NULL )
@@ -47,7 +49,7 @@ template <class T, template<typename> class Order > class TreeIterator {
47
49
node = node->m_up ;
48
50
49
51
if (node->m_up == NULL ) { // reached root, nothing else to do
50
- m_end = true ;
52
+ m_mode = end ;
51
53
return *this ;
52
54
}
53
55
@@ -59,18 +61,19 @@ template <class T, template<typename> class Order > class TreeIterator {
59
61
60
62
}
61
63
62
- m_end = true ;
64
+ m_mode = end ;
63
65
return *this ;
64
66
65
67
}
66
68
67
69
// zum vorherigen Element
68
70
TreeIterator<T, Order>& operator --() {
71
+ // if (m_node == NULL || !m_end)
69
72
return *this ;
70
73
}
71
74
72
75
bool operator ==(const TreeIterator<T, Order> &rhs) const {
73
- return this ->m_node == rhs.m_node && this ->m_tree == rhs.m_tree && this ->m_end == rhs.m_end ;
76
+ return this ->m_node == rhs.m_node && this ->m_tree == rhs.m_tree && this ->m_mode == rhs.m_mode ;
74
77
}
75
78
76
79
bool operator !=(const TreeIterator<T, Order> &rhs) const {
@@ -79,18 +82,19 @@ template <class T, template<typename> class Order > class TreeIterator {
79
82
80
83
protected:
81
84
85
+ enum iteration_mode { begin, middle, end };
86
+ iteration_mode m_mode;
87
+
82
88
TreeIterator (TreeNode<T, Order> * node, const Tree<T, Order> * tree)
83
- : m_node(node), m_tree(tree), m_end( false ) {}
89
+ : m_node(node), m_tree(tree), m_mode(middle ) {}
84
90
85
- TreeIterator (TreeNode<T, Order> * node, const Tree<T, Order> * tree, const bool end )
86
- : m_node(node), m_tree(tree), m_end(end ) {}
91
+ TreeIterator (TreeNode<T, Order> * node, const Tree<T, Order> * tree, const iteration_mode mode )
92
+ : m_node(node), m_tree(tree), m_mode(mode ) {}
87
93
88
94
private:
89
95
90
96
TreeNode<T, Order> * m_node;
91
97
const Tree<T, Order> * m_tree;
92
- bool m_end;
93
-
94
98
};
95
99
96
100
#endif // TREEITERATOR_H
0 commit comments