21 #ifndef ROCPRIM_ITERATOR_REVERSE_ITERATOR_HPP_ 22 #define ROCPRIM_ITERATOR_REVERSE_ITERATOR_HPP_ 26 #include <type_traits> 28 #include "../config.hpp" 33 BEGIN_ROCPRIM_NAMESPACE
45 template<
class SourceIterator>
50 std::is_base_of<std::random_access_iterator_tag,
51 typename std::iterator_traits<SourceIterator>::iterator_category>::value,
52 "SourceIterator must be a random access iterator");
55 using value_type =
typename std::iterator_traits<SourceIterator>::value_type;
57 using reference =
typename std::iterator_traits<SourceIterator>::reference;
59 using pointer =
typename std::iterator_traits<SourceIterator>::pointer;
61 using difference_type =
typename std::iterator_traits<SourceIterator>::difference_type;
67 reverse_iterator(SourceIterator source_iterator) : source_iterator_(source_iterator) {}
69 #ifndef DOXYGEN_SHOULD_SKIP_THIS 122 source_iterator_ -= distance;
135 source_iterator_ += distance;
142 return other.source_iterator_ - source_iterator_;
148 return source_iterator_ == other.source_iterator_;
154 return source_iterator_ != other.source_iterator_;
160 return other.source_iterator_ < source_iterator_;
166 return other.source_iterator_ <= source_iterator_;
172 return other.source_iterator_ > source_iterator_;
178 return other.source_iterator_ >= source_iterator_;
180 #endif // DOXYGEN_SHOULD_SKIP_THIS 183 SourceIterator source_iterator_;
186 #ifndef DOXYGEN_SHOULD_SKIP_THIS 187 template<
class SourceIterator>
192 return iterator + distance;
194 #endif // DOXYGEN_SHOULD_SKIP_THIS 202 template<
class SourceIterator>
209 END_ROCPRIM_NAMESPACE
214 #endif // ROCPRIM_ITERATOR_REVERSE_ITERATOR_HPP_ typename std::iterator_traits< SourceIterator >::reference reference
A reference type of the type iterated over (value_type).
Definition: reverse_iterator.hpp:57
typename std::iterator_traits< SourceIterator >::difference_type difference_type
A type used for identify distance between iterators.
Definition: reverse_iterator.hpp:61
std::random_access_iterator_tag iterator_category
The category of the iterator.
Definition: reverse_iterator.hpp:63
typename std::iterator_traits< SourceIterator >::value_type value_type
The type of the value that can be obtained by dereferencing the iterator.
Definition: reverse_iterator.hpp:55
A reverse iterator is an iterator adaptor that reverses the direction of a wrapped iterator...
Definition: reverse_iterator.hpp:46
ROCPRIM_HOST_DEVICE reverse_iterator< SourceIterator > make_reverse_iterator(SourceIterator source_iterator)
make_reverse_iterator creates a reverse_iterator wrapping source_iterator.
Definition: reverse_iterator.hpp:204
typename std::iterator_traits< SourceIterator >::pointer pointer
A pointer type of the type iterated over (value_type).
Definition: reverse_iterator.hpp:59
ROCPRIM_HOST_DEVICE reverse_iterator(SourceIterator source_iterator)
Constructs a new reverse_iterator using the supplied source.
Definition: reverse_iterator.hpp:67