#include <counted_iterator.h>
Inherits AZStd::Internal::counted_iterator_value_type< I, class >, AZStd::Internal::counted_iterator_iter_concept< I, class >, AZStd::Internal::counted_iterator_iter_category< I, class >, and enable_if_t< input_or_output_iterator< I >, Internal::counted_iterator_requirements_fulfilled >.
Public Types | |
using | iterator_type = I |
using | difference_type = iter_difference_t< I > |
using | reference = iter_reference_t< I > |
reference type and pointer type is need to use with algorithms that use pre c++20 iterator_traits | |
using | pointer = conditional_t< contiguous_iterator< I >, decltype(to_address(declval< I >())), void > |
Public Member Functions | |
constexpr | counted_iterator (I i, iter_difference_t< I > length) |
template<class I2 , class = enable_if_t<convertible_to<const I2&, I>>> | |
constexpr | counted_iterator (const counted_iterator< I2 > &other) |
template<class I2 , class = enable_if_t<assignable_from<I&, const I2&>>> | |
constexpr counted_iterator & | operator= (const counted_iterator< I2 > &other) |
constexpr const I & | base () const &noexcept |
constexpr I | base () && |
constexpr iter_difference_t< I > | count () const noexcept |
constexpr decltype(auto) | operator* () |
template<bool Enable = Internal::dereferenceable<const I>, class = enable_if_t<Enable>> | |
constexpr decltype(auto) | operator* () const |
template<bool Enable = contiguous_iterator<I>, class = enable_if_t<Enable>> | |
constexpr auto | operator-> () const noexcept |
template<bool Enable = random_access_iterator<I>, class = enable_if_t<Enable>> | |
constexpr decltype(auto) | operator[] (iter_difference_t< I > n) const noexcept |
constexpr counted_iterator & | operator++ () |
constexpr decltype(auto) | operator++ (int) |
template<bool Enable = bidirectional_iterator<I>, class = enable_if_t<Enable>> | |
constexpr counted_iterator & | operator-- () |
template<bool Enable = bidirectional_iterator<I>, class = enable_if_t<Enable>> | |
constexpr counted_iterator | operator-- (int) |
template<bool Enable = random_access_iterator<I>, class = enable_if_t<Enable>> | |
constexpr counted_iterator | operator+ (iter_difference_t< I > n) |
template<bool Enable = random_access_iterator<I>, class = enable_if_t<Enable>> | |
constexpr counted_iterator & | operator+= (iter_difference_t< I > n) |
template<bool Enable = random_access_iterator<I>, class = enable_if_t<Enable>> | |
constexpr counted_iterator | operator- (iter_difference_t< I > n) |
template<bool Enable = random_access_iterator<I>, class = enable_if_t<Enable>> | |
constexpr counted_iterator & | operator-= (iter_difference_t< I > n) |
Friends | |
template<bool Enable = random_access_iterator<I>, class = enable_if_t<Enable>> | |
constexpr counted_iterator | operator+ (iter_difference_t< I > n, const counted_iterator &x) |
template<class I2 > | |
constexpr auto | operator- (const counted_iterator &x, const counted_iterator< I2 > &y) -> enable_if_t< common_with< I2, I >, iter_difference_t< I2 > > |
constexpr iter_difference_t< I > | operator- (const counted_iterator &x, default_sentinel_t) |
constexpr iter_difference_t< I > | operator- (default_sentinel_t, const counted_iterator &y) |
template<class I2 > | |
constexpr auto | operator== (const counted_iterator &x, const counted_iterator< I2 > &y) -> enable_if_t< common_with< I2, I >, bool > |
template<class I2 > | |
constexpr auto | operator!= (const counted_iterator &x, const counted_iterator< I2 > &y) -> enable_if_t< common_with< I2, I >, bool > |
constexpr bool | operator== (const counted_iterator &x, default_sentinel_t) |
constexpr bool | operator!= (const counted_iterator &x, default_sentinel_t) |
constexpr bool | operator== (default_sentinel_t, const counted_iterator &x) |
constexpr bool | operator!= (default_sentinel_t, const counted_iterator &x) |
template<class I2 > | |
constexpr auto | operator< (const counted_iterator &x, const counted_iterator< I2 > &y) -> enable_if_t< common_with< I2, I >, bool > |
template<class I2 > | |
constexpr auto | operator> (const counted_iterator &x, const counted_iterator< I2 > &y) -> enable_if_t< common_with< I2, I >, bool > |
template<class I2 > | |
constexpr auto | operator<= (const counted_iterator &x, const counted_iterator< I2 > &y) -> enable_if_t< common_with< I2, I >, bool > |
template<class I2 > | |
constexpr auto | operator>= (const counted_iterator &x, const counted_iterator< I2 > &y) -> enable_if_t< common_with< I2, I >, bool > |
constexpr auto | iter_move (const counted_iterator &i) noexcept(noexcept(ranges::iter_move(declval< const I & >()))) -> enable_if_t< input_iterator< I >, iter_rvalue_reference_t< I > > |
template<class I2 , enable_if_t< indirectly_swappable< I2, I > > > | |
constexpr void | iter_swap (const counted_iterator &x, const counted_iterator< I2 > &y) noexcept(noexcept(ranges::iter_swap(declval< const I & >(), declval< const I2 & >()))) |
counted_iterator is an iterator adapter that behaves the same as the underlying iterator except its keeps track of the distance to the end of the range