17 #include <range/v3/view/chunk.hpp> 46 template <std::ranges::RandomAccessRange urng_t, std::ranges::RandomAccessRange inserted_rng_t>
60 inserted_rng_t inserted_range;
66 using reference = ranges::common_reference_t<reference_t<urng_t>, reference_t<inserted_rng_t>>;
69 using const_reference = detail::transformation_trait_or_t<
70 ranges::common_reference<reference_t<urng_t const>, reference_t<inserted_rng_t const>>,
void>;
72 using value_type = value_type_t<urng_t>;
74 using size_type = size_type_t<urng_t>;
76 using difference_type = difference_type_t<urng_t>;
78 using iterator = detail::random_access_iterator<view_interleave>;
80 using const_iterator = detail::random_access_iterator<view_interleave const>;
86 constexpr view_interleave() noexcept = default;
87 constexpr view_interleave(view_interleave const & rhs) noexcept = default;
88 constexpr view_interleave(view_interleave && rhs) noexcept = default;
89 constexpr view_interleave & operator=(view_interleave const & rhs) noexcept = default;
90 constexpr view_interleave & operator=(view_interleave && rhs) noexcept = default;
91 ~view_interleave() noexcept = default;
98 view_interleave(urng_t && _urange,
size_t const _step_size, inserted_rng_t && _inserted_range) :
99 urange{_urange}, step_size{_step_size}, inserted_range{_inserted_range}
111 template <
typename orng_t,
typename oirng_t>
116 view_interleave(orng_t && _urange,
size_t const _step_size, oirng_t && _inserted_range) :
117 view_interleave{
view::all(std::forward<orng_t>(_urange)), _step_size,
view::persist(std::forward<oirng_t>(_inserted_range))}
137 iterator
begin() noexcept
143 const_iterator
begin() const noexcept
149 const_iterator
cbegin() const noexcept
167 iterator
end() noexcept
169 return {*
this,
size()};
173 const_iterator
end() const noexcept
175 return {*
this,
size()};
179 const_iterator
cend() const noexcept
202 size_type
size()
const 225 reference operator[](size_type
const i)
229 if (i % (combined_size) < step_size)
232 return inserted_range[(i % (combined_size)) - step_size];
236 const_reference operator[](size_type
const i)
const 240 if (i % (combined_size) < step_size)
243 return inserted_range[(i % (combined_size)) - step_size];
249 template <std::ranges::RandomAccessRange urng_t, std::ranges::RandomAccessRange inserted_rng_t>
255 view_interleave(urng_t &&,
size_t, inserted_rng_t &&)
256 -> view_interleave<decltype(view::all(std::declval<urng_t>())), decltype(
view::persist(std::declval<inserted_rng_t>()))>;
267 template <std::ranges::ForwardRange inserted_rng_t, std::Integral
size_type>
268 constexpr
auto operator()(size_type
const size, inserted_rng_t && i)
const noexcept
270 return detail::adaptor_from_functor{*
this,
size, std::forward<inserted_rng_t>(i)};
279 template <std::ranges::Range urng_t, std::ranges::Range inserted_rng_t, std::Integral
size_type>
280 constexpr
auto operator()(urng_t && urange, size_type
const size, inserted_rng_t && i)
const noexcept
283 "The underlying range parameter in view::interleave must model std::ranges::ForwardRange.");
285 "The underlying range parameter in view::interleave must model std::ranges::ViewableRange.");
287 "The range to be inserted by view::interleave must model std::ranges::ForwardRange.");
291 return detail::view_interleave{std::forward<urng_t>(urange),
292 static_cast<size_t>(
size),
293 std::forward<inserted_rng_t>(i)};
297 return ranges::view::chunk(std::forward<urng_t>(urange), static_cast<size_t>(
size))
::ranges::cbegin cbegin
Alias for ranges::cbegin. Returns an iterator to the beginning of a range.
Definition: ranges:209
Specifies the requirements of a Range type that is either a std::ranges::View or an lvalue-reference...
Provides various transformation trait base templates and shortcuts.
Specifies requirements of a Range type for which begin returns a type that models std::RandomAccessIt...
constexpr auto all
A view adaptor that behaves like std::view:all, but type erases contiguous ranges.
Definition: view_all.hpp:160
Provides the seqan3::detail::random_access_iterator class.
::ranges::size size
Alias for ranges::size. Obtains the size of a range whose size can be calculated in constant time...
Definition: ranges:189
constexpr auto join
Flattens a View of ranges into a View.
Definition: ranges:683
::ranges::view_interface< urng_t > view_interface
Alias for ranges::view_interface.
Definition: ranges:220
Specifies the requirements of a Range type that knows its size in constant time with the size functio...
Auxiliary header for the view submodule .
Adaptations of concepts from the Ranges TS.
::ranges::begin begin
Alias for ranges::begin. Returns an iterator to the beginning of a range.
Definition: ranges:174
Provides seqan3::view::all.
The SeqAn3 namespace for views.
auto constexpr persist
A view adaptor that wraps rvalue references of non-views.
Definition: persist.hpp:251
The concept std::CommonReference<T, U> specifies that two types T and U share a common reference type...
Specifies the requirements of a Range type that has constant time copy, move and assignment operators...
Definition: aligned_sequence_concept.hpp:35
constexpr auto interleave
A view that interleaves a given range into another range at regular intervals.
Definition: interleave.hpp:387
The std::Constructible concept specifies that a variable of type T can be initialized with the given ...
Provides seqan3::view::persist.
Specifies requirements of a Range type for which begin returns a type that models std::ForwardIterato...
::ranges::cend cend
Alias for ranges::cend. Returns an iterator to the end of a range.
Definition: ranges:214
::ranges::end end
Alias for ranges::end. Returns an iterator to the end of a range.
Definition: ranges:179