52 typedef _Node_base::_Base_const_ptr _Base_const_ptr;
53 _Base_const_ptr _M_node;
55 inline _Base_iterator(_Base_const_ptr
const __N = NULL)
57 inline _Base_iterator(_Base_iterator
const& __THAT)
58 : _M_node(__THAT._M_node) {}
63 if (_M_node->_M_right)
65 _M_node = _M_node->_M_right;
66 while (_M_node->_M_left) _M_node = _M_node->_M_left;
70 _Base_const_ptr __p = _M_node->_M_parent;
71 while (__p && _M_node == __p->_M_right)
74 __p = _M_node->_M_parent;
85 if (!_M_node->_M_parent)
87 _M_node = _M_node->_M_right;
89 else if (_M_node->_M_left)
91 _Base_const_ptr x = _M_node->_M_left;
92 while (x->_M_right) x = x->_M_right;
97 _Base_const_ptr __p = _M_node->_M_parent;
98 while (__p && _M_node == __p->_M_left)
101 __p = _M_node->_M_parent;
109 template <
size_t const __K,
typename _Val,
typename _Acc,
110 typename _Dist,
typename _Cmp,
typename _Alloc>
115 class _Iterator :
protected _Base_iterator
118 typedef _Val value_type;
119 typedef _Ref reference;
120 typedef _Ptr pointer;
121 typedef _Iterator<_Val, _Val&, _Val*> iterator;
122 typedef _Iterator<_Val, _Val const&, _Val const*> const_iterator;
123 typedef _Iterator<_Val, _Ref, _Ptr> _Self;
125 typedef std::bidirectional_iterator_tag iterator_category;
126 typedef std::ptrdiff_t difference_type;
129 : _Base_iterator() {}
130 inline _Iterator(_Link_const_type
const __N)
131 : _Base_iterator(__N) {}
132 inline _Iterator(iterator
const& __THAT)
133 : _Base_iterator(__THAT) {}
135 _Link_const_type get_raw_node()
const
137 return _Link_const_type(_M_node);
143 return _Link_const_type(_M_node)->_M_value;
149 return &(operator*());
183 operator== <>(_Iterator<_Val, _Ref, _Ptr>
const&,
184 _Iterator<_Val, _Ref, _Ptr>
const&);
187 operator== <>(_Iterator<_Val, const _Val&, const _Val*>
const&,
188 _Iterator<_Val, _Val&, _Val*>
const&);
191 operator== <>(_Iterator<_Val, _Val&, _Val*>
const&,
192 _Iterator<_Val, const _Val&, const _Val*>
const&);
195 operator!= <>(_Iterator<_Val, _Ref, _Ptr>
const&,
196 _Iterator<_Val, _Ref, _Ptr>
const&);
199 operator!= <>(_Iterator<_Val, const _Val&, const _Val*>
const&,
200 _Iterator<_Val, _Val&, _Val*>
const&);
203 operator!= <>(_Iterator<_Val, _Val&, _Val*>
const&,
204 _Iterator<_Val, const _Val&, const _Val*>
const&);