60 #ifndef _STL_ITERATOR_BASE_FUNCS_H
61 #define _STL_ITERATOR_BASE_FUNCS_H 1
63 #pragma GCC system_header
66 _GLIBCXX_BEGIN_NAMESPACE(
std)
68 template<typename _InputIterator>
69 inline typename iterator_traits<_InputIterator>::difference_type
70 __distance(_InputIterator __first, _InputIterator __last,
74 __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>)
76 typename iterator_traits<_InputIterator>::difference_type __n = 0;
77 while (__first != __last)
85 template<
typename _RandomAccessIterator>
86 inline typename iterator_traits<_RandomAccessIterator>::difference_type
87 __distance(_RandomAccessIterator __first, _RandomAccessIterator __last,
88 random_access_iterator_tag)
91 __glibcxx_function_requires(_RandomAccessIteratorConcept<
92 _RandomAccessIterator>)
93 return __last - __first;
108 template<typename _InputIterator>
109 inline typename iterator_traits<_InputIterator>::difference_type
110 distance(_InputIterator __first, _InputIterator __last)
113 return std::__distance(__first, __last,
117 template<
typename _InputIterator,
typename _Distance>
119 __advance(_InputIterator& __i, _Distance __n, input_iterator_tag)
122 __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>)
127 template<typename _BidirectionalIterator, typename _Distance>
129 __advance(_BidirectionalIterator& __i, _Distance __n,
130 bidirectional_iterator_tag)
133 __glibcxx_function_requires(_BidirectionalIteratorConcept<
134 _BidirectionalIterator>)
143 template<typename _RandomAccessIterator, typename _Distance>
145 __advance(_RandomAccessIterator& __i, _Distance __n,
146 random_access_iterator_tag)
149 __glibcxx_function_requires(_RandomAccessIteratorConcept<
150 _RandomAccessIterator>)
166 template<typename _InputIterator, typename _Distance>
171 typename iterator_traits<_InputIterator>::difference_type __d = __n;
175 #ifdef __GXX_EXPERIMENTAL_CXX0X__
176 template<
typename _InputIterator>
177 inline _InputIterator
178 next(_InputIterator __x,
typename
179 iterator_traits<_InputIterator>::difference_type __n = 1)
185 template<
typename _B
idirectionalIterator>
186 inline _BidirectionalIterator
187 prev(_BidirectionalIterator __x,
typename
188 iterator_traits<_BidirectionalIterator>::difference_type __n = 1)
195 _GLIBCXX_END_NAMESPACE
ISO C++ entities toplevel namespace is std.
iterator_traits< _Iter >::iterator_category __iterator_category(const _Iter &)
void advance(_InputIterator &__i, _Distance __n)
A generalization of pointer arithmetic.
iterator_traits< _InputIterator >::difference_type distance(_InputIterator __first, _InputIterator __last)
A generalization of pointer arithmetic.