43 #include <range/v3/range_fwd.hpp> 60 struct view_base :
public ranges::view_base
89 template <
typename derived_type>
90 class pipable_adaptor_base
117 auto operator()(urng_t && urange, arg_types && ...args)
const 119 return static_cast<derived_type
const *
>(
this)->impl(std::forward<urng_t>(urange),
120 std::forward<arg_types>(args)...);
135 template <
typename ...arg_types>
137 requires (
sizeof...(arg_types) > 0)
139 struct auxiliary_functor_t
146 template <std::ranges::InputRange urng_t>
147 auto operator()(urng_t && urange)
149 return explode(std::forward<urng_t>(urange), std::make_index_sequence<
sizeof...(arg_types)>{});
153 template <std::ranges::InputRange urng_t>
154 auto operator()(urng_t && urange)
const 156 return explode(std::forward<urng_t>(urange), std::make_index_sequence<
sizeof...(arg_types)>{});
160 std::tuple<arg_types...> _arguments;
164 template <
typename urng_t,
size_t... Is>
165 auto explode(urng_t && urange, std::index_sequence<Is...>
const &)
const &
168 return pipable_adaptor_base{}(
169 std::forward<urng_t>(urange),
170 static_cast<std::tuple_element_t<Is, std::tuple<arg_types...
>>>(std::get<Is>(_arguments))...);
174 template <
typename urng_t,
size_t... Is>
175 auto explode(urng_t && urange, std::index_sequence<Is...>
const &) &
178 return pipable_adaptor_base{}(
179 std::forward<urng_t>(urange),
180 static_cast<std::tuple_element_t<Is, std::tuple<arg_types...
>>>(std::get<Is>(_arguments))...);
184 template <
typename urng_t,
size_t... Is>
185 auto explode(urng_t && urange, std::index_sequence<Is...>
const &) &&
188 return pipable_adaptor_base{}(std::forward<urng_t>(urange),
189 std::forward<arg_types>(std::get<Is>(_arguments))...);
211 template <
typename ...arg_types>
212 auxiliary_functor_t<arg_types...> operator()(arg_types && ...args)
const 214 return {{std::forward<arg_types>(args)...}};
239 friend auto operator|(urng_t && urange, auxiliary_functor_t<arg_types...> & bound_functor)
240 requires (
sizeof...(arg_types) > 0)
242 return bound_functor(std::forward<urng_t>(urange));
247 friend auto operator|(urng_t && urange, auxiliary_functor_t<arg_types...>
const & bound_functor)
248 requires (
sizeof...(arg_types) > 0)
250 return bound_functor(std::forward<urng_t>(urange));
255 friend auto operator|(urng_t && urange, auxiliary_functor_t<arg_types...> && bound_functor)
256 requires (
sizeof...(arg_types) > 0)
258 return bound_functor(std::forward<urng_t>(urange));
280 template <std::ranges::InputRange urng_t>
282 derived_type
const & fn)
284 return fn(std::forward<urng_t>(urange));
293 pipable_adaptor_base() =
default;
294 constexpr pipable_adaptor_base(pipable_adaptor_base
const &) =
default;
295 constexpr pipable_adaptor_base(pipable_adaptor_base &&) =
default;
296 constexpr pipable_adaptor_base & operator =(pipable_adaptor_base
const &) =
default;
297 constexpr pipable_adaptor_base & operator =(pipable_adaptor_base &&) =
default;
298 ~pipable_adaptor_base() =
default;
326 template <
template <
typename,
typename...>
class view_type>
327 class generic_pipable_view_adaptor :
public pipable_adaptor_base<generic_pipable_view_adaptor<view_type>>
331 using base_type = pipable_adaptor_base<generic_pipable_view_adaptor<view_type>>;
335 using base_type::base_type;
347 template <
typename ... arg_types>
348 static auto impl(arg_types && ... args)
350 return view_type{std::forward<arg_types>(args)...};
Provides seqan3::type_list and auxiliary metafunctions.
Provides seqan3::type_list and auxiliary metafunctions.
Adaptations of concepts from the Ranges TS.
Definition: aligned_sequence_concept.hpp:288
auto operator|(validator1_type &&vali1, validator2_type &&vali2)
Enables the chaining of validators. !
Definition: validators.hpp:671
Provides various metafunctions used by the range module.