aboutsummaryrefslogtreecommitdiff
path: root/libstdc++-v3/src
diff options
context:
space:
mode:
authorGawain Bolton <gp.bolton@computer.org>2003-07-30 15:01:58 +0000
committerBenjamin Kosnik <bkoz@gcc.gnu.org>2003-07-30 15:01:58 +0000
commitb4c70e89da092f437f0b1b8b97d5beef454d5198 (patch)
tree00301e8c804e89e1256ed1e02e5f3faea56ed554 /libstdc++-v3/src
parentcf68fdb19bc8881ab06046f3fd8ac5da49770bc4 (diff)
downloadgcc-b4c70e89da092f437f0b1b8b97d5beef454d5198.zip
gcc-b4c70e89da092f437f0b1b8b97d5beef454d5198.tar.gz
gcc-b4c70e89da092f437f0b1b8b97d5beef454d5198.tar.bz2
re PR libstdc++/11504 (-Wcast-qual vs. stl_tree)
2003-07-30 Gawain Bolton <gp.bolton@computer.org> PR libstdc++/11504. * include/bits/stl_tree.h: Replace C-style casts with C++-style casts. Changes to avoid casting away constness. Eliminate _Rb_tree_base_iterator class. Change _Rb_tree_iterator to use initialization lists. Move out implementation of __black_count() to... * src/stl_tree.cc: ...here and rename _Rb_tree_black_count(). Rename_Rb_tree_base_iterator::_M_increment() to _Rb_tree_increment and _Rb_tree_base_iterator::_M_decrement() to _Rb_tree_decrement. * config/linker-map.gnu: Add and change symbols here. From-SVN: r69958
Diffstat (limited to 'libstdc++-v3/src')
-rw-r--r--libstdc++-v3/src/stl_tree.cc67
1 files changed, 44 insertions, 23 deletions
diff --git a/libstdc++-v3/src/stl_tree.cc b/libstdc++-v3/src/stl_tree.cc
index 99f8143..eac141f 100644
--- a/libstdc++-v3/src/stl_tree.cc
+++ b/libstdc++-v3/src/stl_tree.cc
@@ -59,51 +59,53 @@
namespace std
{
- void
- _Rb_tree_base_iterator::_M_increment()
+ _Rb_tree_node_base*
+ _Rb_tree_increment(_Rb_tree_node_base* __x)
{
- if (_M_node->_M_right != 0)
+ if (__x->_M_right != 0)
{
- _M_node = _M_node->_M_right;
- while (_M_node->_M_left != 0)
- _M_node = _M_node->_M_left;
+ __x = __x->_M_right;
+ while (__x->_M_left != 0)
+ __x = __x->_M_left;
}
else
{
- _Base_ptr __y = _M_node->_M_parent;
- while (_M_node == __y->_M_right)
+ _Rb_tree_node_base* __y = __x->_M_parent;
+ while (__x == __y->_M_right)
{
- _M_node = __y;
+ __x = __y;
__y = __y->_M_parent;
}
- if (_M_node->_M_right != __y)
- _M_node = __y;
+ if (__x->_M_right != __y)
+ __x = __y;
}
+ return __x;
}
- void
- _Rb_tree_base_iterator::_M_decrement()
+ _Rb_tree_node_base*
+ _Rb_tree_decrement(_Rb_tree_node_base* __x)
{
- if (_M_node->_M_color == _S_red
- && _M_node->_M_parent->_M_parent == _M_node)
- _M_node = _M_node->_M_right;
- else if (_M_node->_M_left != 0)
+ if (__x->_M_color == _S_red
+ && __x->_M_parent->_M_parent == __x)
+ __x = __x->_M_right;
+ else if (__x->_M_left != 0)
{
- _Base_ptr __y = _M_node->_M_left;
+ _Rb_tree_node_base* __y = __x->_M_left;
while (__y->_M_right != 0)
__y = __y->_M_right;
- _M_node = __y;
+ __x = __y;
}
else
{
- _Base_ptr __y = _M_node->_M_parent;
- while (_M_node == __y->_M_left)
+ _Rb_tree_node_base* __y = __x->_M_parent;
+ while (__x == __y->_M_left)
{
- _M_node = __y;
+ __x = __y;
__y = __y->_M_parent;
}
- _M_node = __y;
+ __x = __y;
}
+ return __x;
}
void
@@ -362,4 +364,23 @@ namespace std
}
return __y;
}
+
+ unsigned int
+ _Rb_tree_black_count(const _Rb_tree_node_base* __node,
+ const _Rb_tree_node_base* __root)
+ {
+ if (__node == 0)
+ return 0;
+ unsigned int __sum = 0;
+ do
+ {
+ if (__node->_M_color == _S_black)
+ ++__sum;
+ if (__node == __root)
+ break;
+ __node = __node->_M_parent;
+ }
+ while (1);
+ return __sum;
+ }
} // namespace std