29 #ifndef _GLIBCXX_DEBUG_SAFE_ITERATOR_TCC
30 #define _GLIBCXX_DEBUG_SAFE_ITERATOR_TCC 1
34 template<
typename _Iterator,
typename _Sequence>
36 _Safe_iterator<_Iterator, _Sequence>::
37 _M_can_advance(
const difference_type& __n)
const
39 typedef typename _Sequence::const_iterator const_debug_iterator;
40 typedef typename const_debug_iterator::iterator_type const_iterator;
42 if (this->_M_singular())
48 const_iterator __begin = _M_get_sequence()->_M_base().begin();
51 bool __ok = ((__dist.
second == __dp_exact && __dist.
first >= -__n)
52 || (__dist.
second != __dp_exact && __dist.
first > 0));
57 const_iterator __end = _M_get_sequence()->_M_base().end();
60 bool __ok = ((__dist.
second == __dp_exact && __dist.
first >= __n)
61 || (__dist.
second != __dp_exact && __dist.
first > 0));
66 template<
typename _Iterator,
typename _Sequence>
67 template<
typename _Other>
69 _Safe_iterator<_Iterator, _Sequence>::
70 _M_valid_range(
const _Safe_iterator<_Other, _Sequence>& __rhs)
const
72 if (!_M_can_compare(__rhs))
81 if (__dist.
first == 0)
87 return __dist.
first >= 0;
95 if (_M_is_beginnest() || __rhs._M_is_end())
97 if (_M_is_end() || __rhs._M_is_beginnest())