29 template <
typename left_adaptor_t,
typename right_adaptor_t>
30 class combined_adaptor;
77 template <
typename derived_type,
typename ... stored_args_ts>
85 template <
typename urng_t,
size_t... Is>
90 return static_cast<derived_type
const &
>(*this).impl(
91 std::forward<urng_t>(urange),
96 template <
typename urng_t,
size_t... Is>
100 return static_cast<derived_type &&
>(*this).impl(
101 std::forward<urng_t>(urange),
114 constexpr adaptor_base(adaptor_base
const &) noexcept =
default;
115 constexpr adaptor_base(adaptor_base &&) noexcept = default;
116 constexpr adaptor_base & operator=(adaptor_base const &) noexcept = default;
117 constexpr adaptor_base & operator=(adaptor_base &&) noexcept = default;
118 ~adaptor_base() noexcept = default;
121 constexpr adaptor_base(stored_args_ts ... args) :
122 arguments{std::forward<stored_args_ts>(args)...}
127 template <std::ranges::InputRange urng_t>
128 constexpr
auto operator()(urng_t && urange)
const &
134 template <std::ranges::InputRange urng_t>
135 constexpr
auto operator()(urng_t && urange) &&
137 return std::move(*this).pass_args_to_impl(std::forward<urng_t>(urange),
152 template <
typename arg_t>
153 constexpr
friend auto operator|(arg_t && arg, derived_type
const & me)
156 return me(std::forward<arg_t>(arg));
158 return combined_adaptor{std::forward<arg_t>(arg), me};
162 template <
typename arg_t>
163 constexpr
friend auto operator|(arg_t && arg, derived_type && me)
166 return std::move(me)(std::forward<arg_t>(arg));
168 return combined_adaptor{std::forward<arg_t>(arg), std::move(me)};
187 template <
typename arg_t>
188 constexpr
friend auto operator|(adaptor_base
const & me, arg_t && arg)
190 return combined_adaptor{
static_cast<derived_type
const &
>(me), std::forward<arg_t>(arg)};
194 template <
typename arg_t>
195 constexpr
friend auto operator|(adaptor_base && me, arg_t && arg)
197 return combined_adaptor{
static_cast<derived_type &&
>(me), std::forward<arg_t>(arg)};
215 template <
typename left_adaptor_t,
typename right_adaptor_t>
216 class combined_adaptor :
217 public adaptor_base<combined_adaptor<left_adaptor_t, right_adaptor_t>,
223 using base_type = adaptor_base<combined_adaptor<left_adaptor_t, right_adaptor_t>,
232 typename left_adaptor_t_,
233 typename right_adaptor_t_>
234 static auto impl(urng_t && urange, left_adaptor_t_ && left_adaptor, right_adaptor_t_ && right_adaptor)
236 return std::forward<urng_t>(urange)
237 | std::forward<left_adaptor_t_>(left_adaptor)
238 | std::forward<right_adaptor_t_>(right_adaptor);
243 using base_type::base_type;
246 combined_adaptor(left_adaptor_t l, right_adaptor_t r) :
247 base_type{std::forward<left_adaptor_t>(l), std::forward<right_adaptor_t>(r)}
278 template <
template <
typename,
typename...>
typename view_type>
279 class adaptor_for_view_without_args :
public adaptor_base<adaptor_for_view_without_args<view_type>>
283 using base_type = adaptor_base<adaptor_for_view_without_args<view_type>>;
294 template <
typename ... arg_types>
295 static auto impl(arg_types && ... args)
297 return view_type{std::forward<arg_types>(args)...};
302 using base_type::base_type;
340 template <
typename functor_type,
typename ... stored_args_ts>
341 class adaptor_from_functor :
342 public adaptor_base<adaptor_from_functor<functor_type, stored_args_ts...>, stored_args_ts...>
346 using base_type = adaptor_base<adaptor_from_functor<functor_type, stored_args_ts...>, stored_args_ts...>;
361 template <std::ranges::InputRange urng_t>
362 constexpr
auto impl(urng_t && urange, stored_args_ts ... args)
const 364 return fun(std::forward<urng_t>(urange), std::forward<stored_args_ts>(args)...);
369 constexpr adaptor_from_functor(functor_type f, stored_args_ts ... args) :
370 base_type{std::forward<stored_args_ts>(args)...}, fun{std::move(f)}
Adaptations of concepts from the Ranges TS.
Definition: aligned_sequence_concept.hpp:35
Provides various type traits on generic types.
auto operator|(validator1_type &&vali1, validator2_type &&vali2)
Enables the chaining of validators.
Definition: validators.hpp:889
Provides various transformation traits used by the range module.