100 template <
typename underlying_adaptor_t>
114 constexpr
deep() noexcept = default;
117 constexpr
deep & operator=(
deep const &) noexcept = default;
118 constexpr
deep & operator=(
deep &&) noexcept = default;
136 template <
std::ranges::input_range urng_t, typename underlying_adaptor_t_>
137 static constexpr auto
impl(urng_t && urange, underlying_adaptor_t_ && adap)
139 return std::forward<urng_t>(urange) | std::forward<underlying_adaptor_t_>(adap);
152 template <std::ranges::input_range urng_t>
154 requires std::ranges::input_range<std::ranges::range_reference_t<urng_t>>
160 return std::forward<decltype(e)>(e) | me;
165 template <std::ranges::input_range urng_t>
167 requires std::ranges::input_range<std::ranges::range_reference_t<urng_t>>
173 return std::forward<decltype(e)>(e) | me;
185 template <
typename first_arg_t,
typename ...stored_arg_types>
187 requires (!std::ranges::input_range<first_arg_t>)
189 constexpr auto operator()(first_arg_t && first, stored_arg_types && ...args)
const
194 auto adaptor_closure = std::get<0>(this->
arguments)(std::forward<first_arg_t>(first),
195 std::forward<stored_arg_types>(args)...);
197 return deep<decltype(adaptor_closure)>{
std::move(adaptor_closure)};
206 auto adaptor_closure = std::get<0>(this->
arguments)();
208 return deep<decltype(adaptor_closure)>{
std::move(adaptor_closure)};
223 template <std::ranges::input_range urng_t,
typename ...stored_arg_types>
225 requires (
sizeof...(stored_arg_types) > 0)
227 constexpr auto operator()(urng_t && urange, stored_arg_types && ...args)
const
229 auto adaptor_closure = std::get<0>(this->
arguments)(std::forward<stored_arg_types>(args)...);
230 return std::forward<urng_t>(urange) |
std::move(adaptor_closure);
239 template <
typename underlying_adaptor_t>
CRTP-base to simplify the definition of range adaptor closure objects and similar types.
Definition: detail.hpp:79
std::tuple< stored_args_ts... > arguments
Stores the arguments.
Definition: detail.hpp:82
A wrapper type around an existing view adaptor that enables "deep view" behaviour for that view.
Definition: deep.hpp:102
deep(underlying_adaptor_t &&inner) -> deep< underlying_adaptor_t >
Template argument deduction helper that preserves lvalue references and turns rvalue references into ...
constexpr auto operator()(urng_t &&urange) const &
Specialisation of the range-handling operator() for range-of-range (this is where deep changes the be...
Definition: deep.hpp:156
static constexpr auto impl(urng_t &&urange, underlying_adaptor_t_ &&adap)
Unwrap the internal adaptor closure object and pipe the range into it.
Definition: deep.hpp:137
constexpr auto operator()() const
This is an overloaded member function, provided for convenience. It differs from the above function o...
Definition: deep.hpp:201
friend base_type
Befriend the base class so it can call impl().
Definition: deep.hpp:108
constexpr auto operator()(urng_t &&urange) &&
This is an overloaded member function, provided for convenience. It differs from the above function o...
Definition: deep.hpp:169
constexpr deep() noexcept=default
Defaulted.
decltype(detail::transform< trait_t >(list_t{})) transform
Apply a transformation trait to every type in the list and return a seqan3::type_list of the results.
Definition: traits.hpp:434
auto const move
A view that turns lvalue-references into rvalue-references.
Definition: move.hpp:70
The SeqAn namespace for views.
SeqAn specific customisations in the standard namespace.
Auxiliary header for the views submodule .
Adaptations of concepts from the Ranges TS.