[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_);