[range.chunk.view.input] (original) (raw)
25 Ranges library [ranges]
25.7 Range adaptors [range.adaptors]
25.7.29 Chunk view [range.chunk]
25.7.29.2 Class template chunk_view for input ranges [range.chunk.view.input]
namespace std::ranges { template<class I> constexpr I div-ceil(I num, I denom) { I r = num / denom;if (num % denom) ++r;return r;} template<view V> requires input_range<V> class chunk_view : public view_interface<chunk_view<V>> { V base_; range_difference_t<V> n_; range_difference_t<V> remainder_ = 0; non-propagating-cache<iterator_t<V>> current_; class outer-iterator; class inner-iterator; public: constexpr explicit chunk_view(V base, range_difference_t<V> n);constexpr V base() const & requires copy_constructible<V> { return base_; } constexpr V base() && { return std::move(base_); } constexpr outer-iterator begin();constexpr default_sentinel_t end() const noexcept;constexpr auto size() requires sized_range<V>;constexpr auto size() const requires sized_range<const V>;constexpr auto reserve_hint() requires approximately_sized_range<V>;constexpr auto reserve_hint() const requires approximately_sized_range<const V>;};template<class R> chunk_view(R&&, range_difference_t<R>) -> chunk_view<views::all_t<R>>;}
constexpr explicit chunk_view(V base, range_difference_t<V> n);
Preconditions: n > 0 is true.
Effects: Initializes base_ with std::move(base) and_n__ with n.
constexpr _outer-iterator_ begin();
Effects: Equivalent to:current_ = ranges::begin(base_);remainder_ = n_;return outer-iterator(*this);
constexpr default_sentinel_t end() const noexcept;
Returns: default_sentinel.
Effects: Equivalent to:return to-unsigned-like(div-ceil(ranges::distance(base_), n_));
Effects: Equivalent to:auto s = static_cast<range_difference_t<decltype((_base__))>>(ranges::reserve_hint(base_));return to-unsigned-like(div-ceil(s, n_));