15template<concepts::Iterator Iter>
17 :
public IteratorBase<CountedIterator<Iter>, meta::IteratorCategory<Iter>, meta::IteratorValue<Iter>,
18 meta::IteratorSSizeType<Iter>> {
44 constexpr auto base() const& -> Iter const& {
return m_iterator; }
45 constexpr auto base() && -> Iter {
return util::move(m_iterator); }
47 constexpr auto count() const -> SSizeType {
return m_count; }
54 requires(
concepts::Dereferenceable<Iter const>)
61 requires(
concepts::ContiguousIterator<Iter>)
87 return a.count() == b.count();
93 return a.count() <=> b.count();
97 return b.count() - a.count();
111 template<concepts::IndirectlySwappable<Iter> It>
#define DI_ASSERT(...)
Definition assert_bool.h:7
auto operator=(CountedIterator &&) -> CountedIterator &=default
constexpr friend auto operator-(CountedIterator const &a, DefaultSentinel) -> SSizeType
Definition counted_iterator.h:100
constexpr auto operator*() const -> decltype(auto) requires(concepts::Dereferenceable< Iter const >)
Definition counted_iterator.h:53
constexpr void back_one()
Definition counted_iterator.h:71
constexpr friend auto operator<=>(CountedIterator const &a, CountedIterator const &b) -> strong_ordering
Definition counted_iterator.h:92
CountedIterator(CountedIterator const &)=default
constexpr friend auto operator-(DefaultSentinel, CountedIterator const &b) -> SSizeType
Definition counted_iterator.h:102
constexpr auto base() const &-> Iter const &
Definition counted_iterator.h:44
constexpr auto base() &&-> Iter
Definition counted_iterator.h:45
CountedIterator(CountedIterator &&)=default
constexpr void advance_one()
Definition counted_iterator.h:66
constexpr friend auto operator==(CountedIterator const &a, DefaultSentinel) -> bool
Definition counted_iterator.h:90
constexpr friend void tag_invoke(types::Tag< iterator_swap >, CountedIterator const &a, CountedIterator< It > const &b)
Definition counted_iterator.h:112
constexpr auto operator->() const
Definition counted_iterator.h:60
constexpr friend auto tag_invoke(types::Tag< iterator_move >, CountedIterator const &self) -> decltype(auto) requires(concepts::InputIterator< Iter >)
Definition counted_iterator.h:104
constexpr friend auto operator-(CountedIterator const &a, CountedIterator const &b) -> SSizeType
Definition counted_iterator.h:96
constexpr void advance_n(SSizeType n)
Definition counted_iterator.h:78
auto operator=(CountedIterator const &) -> CountedIterator &requires(!concepts::ForwardIterator< Iter >)=delete
CountedIterator(CountedIterator const &)=delete
constexpr auto count() const -> SSizeType
Definition counted_iterator.h:47
constexpr CountedIterator(Iter iterator, SSizeType n)
Definition counted_iterator.h:38
constexpr friend auto operator==(CountedIterator const &a, CountedIterator const &b) -> bool
Definition counted_iterator.h:86
CountedIterator()=default
constexpr CountedIterator(CountedIterator< It > const &other)
Definition counted_iterator.h:42
constexpr auto operator*() -> decltype(auto)
Definition counted_iterator.h:49
auto operator=(CountedIterator const &) -> CountedIterator &=default
Definition bidirectional_iterator.h:8
Definition operations.h:99
Definition operations.h:27
Definition forward_iterator.h:10
Definition random_access_iterator.h:12
Definition any_storable.h:9
constexpr auto iterator_move
Definition iterator_move.h:56
constexpr auto move
Definition move.h:38
constexpr auto iterator_swap
Definition iterator_swap.h:49
di::meta::Decay< decltype(T)> Tag
Definition tag_invoke.h:28
constexpr auto to_address
Definition to_address.h:22
Definition default_sentinel.h:4