43template <std::ranges::random_access_range urng_t, std::ranges::random_access_range inserted_rng_t>
44 requires std::ranges::view<urng_t> && std::ranges::sized_range<urng_t> && std::ranges::view<inserted_rng_t>
45 && std::ranges::sized_range<inserted_rng_t>
46 && std::common_reference_with<std::ranges::range_reference_t<urng_t>,
47 std::ranges::range_reference_t<inserted_rng_t>>
48class view_interleave :
public std::ranges::view_interface<view_interleave<urng_t, inserted_rng_t>>
63 using size_type = std::ranges::range_size_t<urng_t>;
70 std::ranges::range_reference_t<inserted_rng_t const>>,
83 template <
typename range_type,
template <
typename...>
typename derived_t_template,
typename... args_t>
102 explicit constexpr
view_interleave(urng_t && _urange,
size_t const _step_size, inserted_rng_t && _inserted_range) :
117 template <
typename orng_t,
typename oirng_t>
118 requires std::constructible_from<urng_t, decltype(views::type_reduce(std::declval<orng_t>()))>
119 && std::constructible_from<inserted_rng_t, seqan3::detail::all_t<oirng_t>>
120 explicit constexpr view_interleave(orng_t && _urange,
size_t const _step_size, oirng_t && _inserted_range) :
123 seqan3::detail::
all(
std::forward<oirng_t>(_inserted_range))}
169 return {*
this,
size()};
175 return {*
this,
size()};
189 return std::ranges::size(
urange)
198 return std::ranges::size(
urange)
243template <std::ranges::random_access_range urng_t, std::ranges::random_access_range inserted_rng_t>
244 requires std::ranges::viewable_range<urng_t> && std::ranges::sized_range<urng_t>
245 && std::ranges::sized_range<inserted_rng_t>
246 && std::common_reference_with<std::ranges::range_reference_t<urng_t>,
247 std::ranges::range_reference_t<inserted_rng_t>>
261 template <std::ranges::forward_range inserted_rng_t, std::
integral
size_type>
262 constexpr auto operator()(size_type
const size, inserted_rng_t && i)
const noexcept
273 template <std::ranges::range urng_t, std::ranges::range inserted_rng_t, std::
integral
size_type>
274 constexpr auto operator()(urng_t && urange, size_type
const size, inserted_rng_t && i)
const noexcept
276 static_assert(std::ranges::forward_range<urng_t>,
277 "The underlying range parameter in views::interleave must model std::ranges::forward_range.");
278 static_assert(std::ranges::viewable_range<urng_t>,
279 "The underlying range parameter in views::interleave must model std::ranges::viewable_range.");
280 static_assert(std::ranges::forward_range<inserted_rng_t>,
281 "The range to be inserted by views::interleave must model std::ranges::forward_range.");
282 if constexpr (std::ranges::random_access_range<urng_t> && std::ranges::sized_range<urng_t>
283 && std::ranges::random_access_range<inserted_rng_t> && std::ranges::sized_range<inserted_rng_t>)
286 static_cast<size_t>(size),
287 std::forward<inserted_rng_t>(i)};
Provides seqan3::detail::adaptor_from_functor.
Provides seqan3::detail::all.
Provides seqan3::views::chunk.
Template for range adaptor closure objects that store arguments and wrap a proto-adaptor.
Definition adaptor_from_functor.hpp:54
A CRTP base template for creating random access iterators.
Definition random_access_iterator.hpp:39
A generic random access iterator that delegates most operations to the range.
Definition random_access_iterator.hpp:288
The type returned by seqan3::views::interleave.
Definition interleave.hpp:49
std::ranges::range_difference_t< urng_t > difference_type
A signed integer type, usually std::ptrdiff_t.
Definition interleave.hpp:75
iterator end() noexcept
Returns an iterator to the element following the last element of the container.
Definition interleave.hpp:167
const_iterator begin() const noexcept
This is an overloaded member function, provided for convenience. It differs from the above function o...
Definition interleave.hpp:149
inserted_rng_t inserted_range
The range to be inserted into urange.
Definition interleave.hpp:56
detail::transformation_trait_or_t< std::common_reference< std::ranges::range_reference_t< urng_t const >, std::ranges::range_reference_t< inserted_rng_t const > >, void > const_reference
The const_reference type is equal to the reference type.
Definition interleave.hpp:71
const_iterator end() const noexcept
This is an overloaded member function, provided for convenience. It differs from the above function o...
Definition interleave.hpp:173
size_type size()
Returns the number of elements in the view.
Definition interleave.hpp:187
view_interleave(urng_t &&, size_t, inserted_rng_t &&) -> view_interleave< decltype(views::type_reduce(std::declval< urng_t >())), seqan3::detail::all_t< inserted_rng_t > >
Template argument type deduction guide for viewable_range inputs.
std::ranges::range_value_t< urng_t > value_type
The value_type (which equals the reference_type with any references removed).
Definition interleave.hpp:73
constexpr view_interleave(orng_t &&_urange, size_t const _step_size, oirng_t &&_inserted_range)
Construct from a viewable_range urange and inserted_range by wrapping in a views::type_reduce.
Definition interleave.hpp:120
constexpr view_interleave() noexcept=default
Defaulted.
const_reference operator[](size_type const i) const
This is an overloaded member function, provided for convenience. It differs from the above function o...
Definition interleave.hpp:230
iterator begin() noexcept
Returns an iterator to the first element of the container.
Definition interleave.hpp:143
urng_t urange
The underlying range.
Definition interleave.hpp:52
size_type size() const
This is an overloaded member function, provided for convenience. It differs from the above function o...
Definition interleave.hpp:196
size_t step_size
The step size for the insertion.
Definition interleave.hpp:54
reference operator[](size_type const i)
Return the i-th element.
Definition interleave.hpp:219
std::ranges::range_size_t< urng_t > size_type
This resolves to range_type::size_type as the underlying range is guaranteed to be sized.
Definition interleave.hpp:63
seqan::stl::views::all_t all_t
Returns the type that results from appying seqan3::detail::all to a range.
Definition all_view.hpp:40
seqan::stl::views::all all
Returns a view that includes all elements of the range argument.
Definition all_view.hpp:35
typename transformation_trait_or< type_t, default_t >::type transformation_trait_or_t
Helper type of seqan3::detail::transformation_trait_or (transformation_trait shortcut).
Definition transformation_trait_or.hpp:48
seqan::stl::views::join_with join_with
A view adaptor that represents view consisting of the sequence obtained from flattening a view of ran...
Definition join_with.hpp:25
seqan::stl::views::chunk chunk
A view adaptor that divides a range into chunks. <dl class="no-api">This entity is not part of the Se...
Definition chunk.hpp:23
constexpr auto interleave
A view that interleaves a given range into another range at regular intervals.
Definition interleave.hpp:376
Provides seqan3::views::join_with.
The internal SeqAn3 namespace.
Definition aligned_sequence_concept.hpp:26
The SeqAn namespace for views.
Definition char_strictly_to.hpp:19
The main SeqAn3 namespace.
Definition aligned_sequence_concept.hpp:26
SeqAn specific customisations in the standard namespace.
Provides the seqan3::detail::random_access_iterator class.
views::interleave's range adaptor object type (non-closure).
Definition interleave.hpp:259
constexpr auto operator()(size_type const size, inserted_rng_t &&i) const noexcept
Store the argument and return a range adaptor closure object.
Definition interleave.hpp:262
constexpr auto operator()(urng_t &&urange, size_type const size, inserted_rng_t &&i) const noexcept
Call the view's constructor with the underlying view as argument.
Definition interleave.hpp:274
Provides seqan3::views::type_reduce.