30 #ifndef _GLIBCXX_DEBUG_SAFE_SEQUENCE_H
31 #define _GLIBCXX_DEBUG_SAFE_SEQUENCE_H 1
40 template<
typename _Iterator,
typename _Sequence>
47 template<
typename _Type>
56 operator()(
const _Type& __x)
const
57 {
return __value != __x; }
62 template<
typename _Iterator>
65 typedef typename std::iterator_traits<_Iterator>::difference_type
73 : _M_base(__base), _M_n(__n) { }
76 operator()(
const _Iterator& __x)
const
77 {
return __x - _M_base >= _M_n; }
96 template<
typename _Sequence>
105 template<
typename _Predicate>
112 template<
typename _Iterator>
117 template<
typename _Sequence>
118 template<
typename _Predicate>
123 typedef typename _Sequence::iterator iterator;
124 typedef typename _Sequence::const_iterator const_iterator;
129 iterator* __victim =
static_cast<iterator*
>(__iter);
130 __iter = __iter->_M_next;
131 if (!__victim->_M_singular())
133 if (__pred(__victim->base()))
134 __victim->_M_invalidate_single();
140 const_iterator* __victim =
static_cast<const_iterator*
>(__iter2);
141 __iter2 = __iter2->_M_next;
142 if (!__victim->_M_singular())
144 if (__pred(__victim->base()))
145 __victim->_M_invalidate_single();
150 template<
typename _Sequence>
151 template<
typename _Iterator>
160 typedef typename _Sequence::iterator iterator;
161 typedef typename _Sequence::const_iterator const_iterator;
166 iterator* __victim =
static_cast<iterator*
>(__iter);
167 __iter = __iter->_M_next;
168 if (!__victim->_M_singular() && __victim->base() == __x.
base())
169 __victim->_M_attach_single(static_cast<_Sequence*>(
this));
175 const_iterator* __victim =
static_cast<const_iterator*
>(__iter2);
176 __iter2 = __iter2->_M_next;
177 if (!__victim->_M_singular() && __victim->base() == __x.
base())
178 __victim->_M_attach_single(static_cast<_Sequence*>(
this));
Basic functionality for a "safe" iterator.
void _M_transfer_iter(const _Safe_iterator< _Iterator, _Sequence > &__x)
_Safe_sequence_base * _M_sequence
Base class that supports tracking of iterators that reference a sequence.
_Iterator base() const
Return the underlying iterator.
_Safe_iterator_base * _M_const_iterators
The list of constant iterators that reference this container.
_Safe_iterator_base * _M_iterators
The list of mutable iterators that reference this container.
Base class for constructing a "safe" sequence type that tracks iterators that reference it...
void _M_invalidate_if(_Predicate __pred)
GNU debug classes for public use.