21 #ifndef ROCPRIM_ITERATOR_ARG_INDEX_ITERATOR_HPP_ 22 #define ROCPRIM_ITERATOR_ARG_INDEX_ITERATOR_HPP_ 27 #include <type_traits> 29 #include "../config.hpp" 30 #include "../types/key_value_pair.hpp" 35 BEGIN_ROCPRIM_NAMESPACE
53 class Difference = std::ptrdiff_t,
54 class InputValueType =
typename std::iterator_traits<InputIterator>::value_type
59 using input_category =
typename std::iterator_traits<InputIterator>::iterator_category;
63 using value_type = ::rocprim::key_value_pair<Difference, InputValueType>;
75 #ifndef DOXYGEN_SHOULD_SKIP_THIS 80 std::is_same<input_category, iterator_category>::value,
81 "InputIterator must be a random-access iterator" 84 ROCPRIM_HOST_DEVICE
inline 91 ROCPRIM_HOST_DEVICE
inline 93 : iterator_(iterator), offset_(offset)
97 #ifndef DOXYGEN_SHOULD_SKIP_THIS 98 ROCPRIM_HOST_DEVICE
inline 106 ROCPRIM_HOST_DEVICE
inline 115 ROCPRIM_HOST_DEVICE
inline 122 ROCPRIM_HOST_DEVICE
inline 128 ROCPRIM_HOST_DEVICE
inline 134 ROCPRIM_HOST_DEVICE
inline 137 iterator_ += distance;
142 ROCPRIM_HOST_DEVICE
inline 148 ROCPRIM_HOST_DEVICE
inline 151 iterator_ -= distance;
156 ROCPRIM_HOST_DEVICE
inline 159 return iterator_ - other.iterator_;
162 ROCPRIM_HOST_DEVICE
inline 169 ROCPRIM_HOST_DEVICE
inline 172 return (iterator_ == other.iterator_) && (offset_ == other.offset_);
175 ROCPRIM_HOST_DEVICE
inline 178 return (iterator_ != other.iterator_) || (offset_ != other.offset_);
181 ROCPRIM_HOST_DEVICE
inline 184 return (iterator_ - other.iterator_) > 0;
187 ROCPRIM_HOST_DEVICE
inline 190 return (iterator_ - other.iterator_) >= 0;
193 ROCPRIM_HOST_DEVICE
inline 196 return (iterator_ - other.iterator_) < 0;
199 ROCPRIM_HOST_DEVICE
inline 202 return (iterator_ - other.iterator_) <= 0;
205 ROCPRIM_HOST_DEVICE
inline 215 #endif // DOXYGEN_SHOULD_SKIP_THIS 218 InputIterator iterator_;
222 #ifndef DOXYGEN_SHOULD_SKIP_THIS 228 ROCPRIM_HOST_DEVICE
inline 233 return iterator + distance;
235 #endif // DOXYGEN_SHOULD_SKIP_THIS 252 class Difference = std::ptrdiff_t,
253 class InputValueType =
typename std::iterator_traits<InputIterator>::value_type
255 ROCPRIM_HOST_DEVICE
inline 262 END_ROCPRIM_NAMESPACE
267 #endif // ROCPRIM_ITERATOR_ARG_INDEX_ITERATOR_HPP_ const value_type & reference
A reference type of the type iterated over (value_type).
Definition: arg_index_iterator.hpp:66
ROCPRIM_HOST_DEVICE arg_index_iterator(InputIterator iterator, difference_type offset=0)
Creates a new arg_index_iterator.
Definition: arg_index_iterator.hpp:92
std::random_access_iterator_tag iterator_category
The category of the iterator.
Definition: arg_index_iterator.hpp:73
ROCPRIM_HOST_DEVICE arg_index_iterator< InputIterator, Difference, InputValueType > make_arg_index_iterator(InputIterator iterator, Difference offset=0)
make_arg_index_iterator creates a arg_index_iterator using iterator as the underlying iterator and of...
Definition: arg_index_iterator.hpp:257
::rocprim::key_value_pair< Difference, InputValueType > value_type
The type of the value that can be obtained by dereferencing the iterator.
Definition: arg_index_iterator.hpp:63
const value_type * pointer
A pointer type of the type iterated over (value_type).
Definition: arg_index_iterator.hpp:69
A random-access input (read-only) iterator adaptor for pairing dereferenced values with their indices...
Definition: arg_index_iterator.hpp:56
Difference difference_type
A type used for identify distance between iterators.
Definition: arg_index_iterator.hpp:71