[range.chunk.inner.iter] (original) (raw)

25 Ranges library [ranges]

25.7 Range adaptors [range.adaptors]

25.7.29 Chunk view [range.chunk]

25.7.29.5 Class chunk_view​::​inner-iterator [range.chunk.inner.iter]

namespace std::ranges { template<view V> requires input_range<V> class chunk_view<V>::inner-iterator { chunk_view* parent_; constexpr explicit inner-iterator(chunk_view& parent) noexcept; public: using iterator_concept = input_iterator_tag;using difference_type = range_difference_t<V>;using value_type = range_value_t<V>;inner-iterator(inner-iterator&&) = default;inner-iterator& operator=(inner-iterator&&) = default;constexpr const iterator_t<V>& base() const &;constexpr range_reference_t<V> operator*() const;constexpr inner-iterator& operator++();constexpr void operator++(int);friend constexpr bool operator==(const inner-iterator& x, default_sentinel_t);friend constexpr difference_type operator-(default_sentinel_t y, const inner-iterator& x) requires sized_sentinel_for<sentinel_t<V>, iterator_t<V>>;friend constexpr difference_type operator-(const inner-iterator& x, default_sentinel_t y) requires sized_sentinel_for<sentinel_t<V>, iterator_t<V>>;friend constexpr range_rvalue_reference_t<V> iter_move(const inner-iterator& i) noexcept(noexcept(ranges::iter_move(*i._parent__->current_)));friend constexpr void iter_swap(const inner-iterator& x, const inner-iterator& y) noexcept(noexcept(ranges::iter_swap(*x._parent__->current_, *y._parent__->current_))) requires indirectly_swappable<iterator_t<V>>;};}

constexpr explicit _inner-iterator_(chunk_view& parent) noexcept;

Effects: Initializes parent_ with addressof(parent).

constexpr const iterator_t<V>& base() const &;

Effects: Equivalent to: return *_parent__->current_;

constexpr range_reference_t<V> operator*() const;

Preconditions: *this == default_sentinel is false.

Effects: Equivalent to: return **_parent__->current_;

constexpr _inner-iterator_& operator++();

Preconditions: *this == default_sentinel is false.

Effects: Equivalent to:++*_parent__->current_;if (*_parent__->current_ == ranges::end(_parent__->base_)) _parent__->remainder_ = 0;else --_parent__->remainder_;return *this;

constexpr void operator++(int);

Effects: Equivalent to ++*this.

friend constexpr bool operator==(const _inner-iterator_& x, default_sentinel_t);

Returns: x._parent__->remainder_ == 0.

friend constexpr difference_type operator-(default_sentinel_t y, const _inner-iterator_& x) requires [sized_sentinel_for](iterator.concept.sizedsentinel#concept:sized%5Fsentinel%5Ffor "24.3.4.8 Concept sized_­sentinel_­for [iterator.concept.sizedsentinel]")<sentinel_t<V>, iterator_t<V>>;

Effects: Equivalent to:return ranges::min(x._parent__->remainder_, ranges::end(x._parent__->base_) - *x._parent__->current_);

friend constexpr difference_type operator-(const _inner-iterator_& x, default_sentinel_t y) requires [sized_sentinel_for](iterator.concept.sizedsentinel#concept:sized%5Fsentinel%5Ffor "24.3.4.8 Concept sized_­sentinel_­for [iterator.concept.sizedsentinel]")<sentinel_t<V>, iterator_t<V>>;

Effects: Equivalent to: return -(y - x);

friend constexpr range_rvalue_reference_t<V> iter_move(const _inner-iterator_& i) noexcept(noexcept(ranges::iter_move(*i._parent_->_current_)));

Effects: Equivalent to: return ranges​::​iter_move(*i._parent__->current_);

friend constexpr void iter_swap(const _inner-iterator_& x, const _inner-iterator_& y) noexcept(noexcept(ranges::iter_swap(*x._parent_->_current_, *y._parent_->_current_))) requires [indirectly_swappable](alg.req.ind.swap#concept:indirectly%5Fswappable "24.3.7.4 Concept indirectly_­swappable [alg.req.ind.swap]")<iterator_t<V>>;

Effects: Equivalent to: ranges​::​iter_swap(*x._parent__->current_, *y._parent__->current_);