Commit f92c5313 by Gawain Bolton Committed by Benjamin Kosnik

stl_tree.h: _Rb_tree_rebalance(): Add local variable for grandparent and use const


2003-07-05  Gawain Bolton  <gp.bolton@computer.org>

	* include/bits/stl_tree.h: _Rb_tree_rebalance():  Add local
          variable for grandparent and use const

From-SVN: r68977
parent 39e3f58c
2003-07-05 Gawain Bolton <gp.bolton@computer.org>
* include/bits/stl_tree.h: _Rb_tree_rebalance(): Add local
variable for grandparent and use const
2003-07-05 David Billinghurst <David.Billinghurst@riotinto.com> 2003-07-05 David Billinghurst <David.Billinghurst@riotinto.com>
* testsuite/27_io/basic_filebuf/close/char/4879.cc: xfail on cygwin * testsuite/27_io/basic_filebuf/close/char/4879.cc: xfail on cygwin
......
...@@ -265,9 +265,9 @@ namespace std ...@@ -265,9 +265,9 @@ namespace std
{ return __x._M_node != __y._M_node; } { return __x._M_node != __y._M_node; }
inline void inline void
_Rb_tree_rotate_left(_Rb_tree_node_base* __x, _Rb_tree_node_base*& __root) _Rb_tree_rotate_left(_Rb_tree_node_base* const __x, _Rb_tree_node_base*& __root)
{ {
_Rb_tree_node_base* __y = __x->_M_right; _Rb_tree_node_base* const __y = __x->_M_right;
__x->_M_right = __y->_M_left; __x->_M_right = __y->_M_left;
if (__y->_M_left !=0) if (__y->_M_left !=0)
__y->_M_left->_M_parent = __x; __y->_M_left->_M_parent = __x;
...@@ -284,9 +284,9 @@ namespace std ...@@ -284,9 +284,9 @@ namespace std
} }
inline void inline void
_Rb_tree_rotate_right(_Rb_tree_node_base* __x, _Rb_tree_node_base*& __root) _Rb_tree_rotate_right(_Rb_tree_node_base* const __x, _Rb_tree_node_base*& __root)
{ {
_Rb_tree_node_base* __y = __x->_M_left; _Rb_tree_node_base* const __y = __x->_M_left;
__x->_M_left = __y->_M_right; __x->_M_left = __y->_M_right;
if (__y->_M_right != 0) if (__y->_M_right != 0)
__y->_M_right->_M_parent = __x; __y->_M_right->_M_parent = __x;
...@@ -309,15 +309,17 @@ namespace std ...@@ -309,15 +309,17 @@ namespace std
while (__x != __root while (__x != __root
&& __x->_M_parent->_M_color == _S_red) && __x->_M_parent->_M_color == _S_red)
{ {
if (__x->_M_parent == __x->_M_parent->_M_parent->_M_left) _Rb_tree_node_base* const __xpp = __x->_M_parent->_M_parent;
if (__x->_M_parent == __xpp->_M_left)
{ {
_Rb_tree_node_base* __y = __x->_M_parent->_M_parent->_M_right; _Rb_tree_node_base* const __y = __xpp->_M_right;
if (__y && __y->_M_color == _S_red) if (__y && __y->_M_color == _S_red)
{ {
__x->_M_parent->_M_color = _S_black; __x->_M_parent->_M_color = _S_black;
__y->_M_color = _S_black; __y->_M_color = _S_black;
__x->_M_parent->_M_parent->_M_color = _S_red; __xpp->_M_color = _S_red;
__x = __x->_M_parent->_M_parent; __x = __xpp;
} }
else else
{ {
...@@ -327,19 +329,19 @@ namespace std ...@@ -327,19 +329,19 @@ namespace std
_Rb_tree_rotate_left(__x, __root); _Rb_tree_rotate_left(__x, __root);
} }
__x->_M_parent->_M_color = _S_black; __x->_M_parent->_M_color = _S_black;
__x->_M_parent->_M_parent->_M_color = _S_red; __xpp->_M_color = _S_red;
_Rb_tree_rotate_right(__x->_M_parent->_M_parent, __root); _Rb_tree_rotate_right(__xpp, __root);
} }
} }
else else
{ {
_Rb_tree_node_base* __y = __x->_M_parent->_M_parent->_M_left; _Rb_tree_node_base* const __y = __xpp->_M_left;
if (__y && __y->_M_color == _S_red) if (__y && __y->_M_color == _S_red)
{ {
__x->_M_parent->_M_color = _S_black; __x->_M_parent->_M_color = _S_black;
__y->_M_color = _S_black; __y->_M_color = _S_black;
__x->_M_parent->_M_parent->_M_color = _S_red; __xpp->_M_color = _S_red;
__x = __x->_M_parent->_M_parent; __x = __xpp;
} }
else else
{ {
...@@ -349,8 +351,8 @@ namespace std ...@@ -349,8 +351,8 @@ namespace std
_Rb_tree_rotate_right(__x, __root); _Rb_tree_rotate_right(__x, __root);
} }
__x->_M_parent->_M_color = _S_black; __x->_M_parent->_M_color = _S_black;
__x->_M_parent->_M_parent->_M_color = _S_red; __xpp->_M_color = _S_red;
_Rb_tree_rotate_left(__x->_M_parent->_M_parent, __root); _Rb_tree_rotate_left(__xpp, __root);
} }
} }
} }
...@@ -358,7 +360,7 @@ namespace std ...@@ -358,7 +360,7 @@ namespace std
} }
inline _Rb_tree_node_base* inline _Rb_tree_node_base*
_Rb_tree_rebalance_for_erase(_Rb_tree_node_base* __z, _Rb_tree_rebalance_for_erase(_Rb_tree_node_base* const __z,
_Rb_tree_node_base*& __root, _Rb_tree_node_base*& __root,
_Rb_tree_node_base*& __leftmost, _Rb_tree_node_base*& __leftmost,
_Rb_tree_node_base*& __rightmost) _Rb_tree_node_base*& __rightmost)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment