7#include <dr/detail/ranges.hpp>
8#include <dr/detail/segments_tools.hpp>
9#include <dr/mp/views/segmented.hpp>
19 template <
typename Rng,
typename Int>
20 requires rng::viewable_range<Rng> && rng::forward_range<Rng> &&
21 rng::detail::integer_like_<Int>
22 auto operator()(Rng &&r, Int n)
const {
23 return rng::views::sliding(
static_cast<Rng &&
>(r), n);
34namespace DR_RANGES_NAMESPACE {
36template <rng::range V>
37 requires(dr::is_sliding_view_v<V>)
38auto segments_(V &&v) {
40 auto base_segments = dr::ranges::segments(v.base());
41 auto elements_to_skip_in_base = rng::size(v.base());
42 auto elements_to_take = 0;
45 elements_to_take = rng::size(v);
46 const auto slide_size = elements_to_skip_in_base - elements_to_take + 1;
50 assert(slide_size % 2 == 1);
51 elements_to_skip_in_base = slide_size / 2;
54 return dr::mp::views::segmented(
56 dr::__detail::take_segments(
57 dr::__detail::drop_segments(base_segments, elements_to_skip_in_base),
Definition: sliding.hpp:15