1 #ifndef RDESTL_ITERATOR_H 2 #define RDESTL_ITERATOR_H 4 #include <stk_util/util/rdestl_common.h> 10 struct input_iterator_tag {};
11 struct output_iterator_tag {};
12 struct forward_iterator_tag:
public input_iterator_tag {};
13 struct bidirectional_iterator_tag:
public forward_iterator_tag {};
14 struct random_access_iterator_tag:
public bidirectional_iterator_tag {};
17 template<
typename IterT>
18 struct iterator_traits
20 typedef typename IterT::iterator_category iterator_category;
24 struct iterator_traits<T*>
26 typedef random_access_iterator_tag iterator_category;
32 template<
typename TIter,
typename TDist> RDE_FORCEINLINE
33 void distance(TIter first, TIter last, TDist& dist, rde::random_access_iterator_tag)
35 dist = TDist(last - first);
37 template<
typename TIter,
typename TDist> RDE_FORCEINLINE
38 void distance(TIter first, TIter last, TDist& dist, rde::input_iterator_tag)
48 template<
typename TIter,
typename TDist> RDE_FORCEINLINE
49 void advance(TIter& iter, TDist d, rde::random_access_iterator_tag)
53 template<
typename TIter,
typename TDist> RDE_FORCEINLINE
54 void advance(TIter& iter, TDist d, rde::bidirectional_iterator_tag)
67 template<
typename TIter,
typename TDist> RDE_FORCEINLINE
68 void advance(TIter& iter, TDist d, rde::input_iterator_tag)
78 #endif // #ifndef RDESTL_ITERATOR_H