diff options
author | Gawain Bolton <gp.bolton@computer.org> | 2003-07-30 15:01:58 +0000 |
---|---|---|
committer | Benjamin Kosnik <bkoz@gcc.gnu.org> | 2003-07-30 15:01:58 +0000 |
commit | b4c70e89da092f437f0b1b8b97d5beef454d5198 (patch) | |
tree | 00301e8c804e89e1256ed1e02e5f3faea56ed554 /libstdc++-v3/src | |
parent | cf68fdb19bc8881ab06046f3fd8ac5da49770bc4 (diff) | |
download | gcc-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.cc | 67 |
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 |