27template <
typename left_adaptor_t,
typename right_adaptor_t>
28class combined_adaptor;
75template <
typename derived_type,
typename... stored_args_ts>
83 template <
typename urng_t,
size_t... Is>
89 std::forward<urng_t>(urange),
94 template <
typename urng_t,
size_t... Is>
99 std::forward<urng_t>(urange),
118 constexpr
adaptor_base(stored_args_ts... args) noexcept(noexcept(
std::tuple<stored_args_ts...>{
119 std::forward<stored_args_ts>(args)...})) :
120 arguments{std::forward<stored_args_ts>(args)...}
125 template <std::ranges::input_range urng_t>
132 template <std::ranges::input_range urng_t>
135 return std::move(*this).pass_args_to_impl(std::forward<urng_t>(urange),
150 template <
typename arg_t>
153 if constexpr (std::ranges::input_range<arg_t>)
154 return me(std::forward<arg_t>(arg));
160 template <
typename arg_t>
163 if constexpr (std::ranges::input_range<arg_t>)
164 return std::move(me)(std::forward<arg_t>(arg));
185 template <
typename arg_t>
192 template <
typename arg_t>
213template <
typename left_adaptor_t,
typename right_adaptor_t>
215 public adaptor_base<combined_adaptor<left_adaptor_t, right_adaptor_t>, left_adaptor_t, right_adaptor_t>
225 template <std::ranges::input_range urng_t,
typename left_adaptor_t_,
typename right_adaptor_t_>
226 static auto impl(urng_t && urange, left_adaptor_t_ && left_adaptor, right_adaptor_t_ && right_adaptor)
228 return std::forward<urng_t>(urange) | std::forward<left_adaptor_t_>(left_adaptor)
229 | std::forward<right_adaptor_t_>(right_adaptor);
248 base_type{std::forward<left_adaptor_t>(l), std::forward<right_adaptor_t>(r)}
CRTP-base to simplify the definition of range adaptor closure objects and similar types.
Definition: adaptor_base.hpp:77
constexpr auto operator()(urng_t &&urange) &&
This is an overloaded member function, provided for convenience. It differs from the above function o...
Definition: adaptor_base.hpp:133
std::tuple< stored_args_ts... > arguments
Stores the arguments.
Definition: adaptor_base.hpp:80
constexpr adaptor_base(adaptor_base &&) noexcept=default
Defaulted.
constexpr friend auto operator|(arg_t &&arg, derived_type &&me)
This is an overloaded member function, provided for convenience. It differs from the above function o...
Definition: adaptor_base.hpp:161
constexpr adaptor_base(adaptor_base const &) noexcept=default
Defaulted.
constexpr auto operator()(urng_t &&urange) const &
Function-style overload for ranges.
Definition: adaptor_base.hpp:126
constexpr auto pass_args_to_impl(urng_t &&urange, std::index_sequence< Is... > const &) &&
This is an overloaded member function, provided for convenience. It differs from the above function o...
Definition: adaptor_base.hpp:95
constexpr friend auto operator|(adaptor_base const &me, arg_t &&arg)
Right-hand-side pipe operator that handles composing.
Definition: adaptor_base.hpp:186
constexpr auto pass_args_to_impl(urng_t &&urange, std::index_sequence< Is... > const &) const &
Helper function to unpack the tuple and delegate to the derived type.
Definition: adaptor_base.hpp:84
constexpr friend auto operator|(arg_t &&arg, derived_type const &me)
Left-hand-side pipe operator that handles range input or composing.
Definition: adaptor_base.hpp:151
friend derived_type
Befriend the derived_type so it can access private members if need be.
Definition: adaptor_base.hpp:104
constexpr friend auto operator|(adaptor_base &&me, arg_t &&arg)
This is an overloaded member function, provided for convenience. It differs from the above function o...
Definition: adaptor_base.hpp:193
Template for range adaptor closure objects that consist of two other range adaptor closure objects.
Definition: adaptor_base.hpp:216
static auto impl(urng_t &&urange, left_adaptor_t_ &&left_adaptor, right_adaptor_t_ &&right_adaptor)
Combine all arguments via operator|.
Definition: adaptor_base.hpp:226
constexpr combined_adaptor(combined_adaptor const &) noexcept=default
Defaulted.
friend base_type
Befriend the base class so it can call impl().
Definition: adaptor_base.hpp:222
constexpr combined_adaptor()=default
Defaulted.
constexpr combined_adaptor(combined_adaptor &&) noexcept=default
Defaulted.
The internal SeqAn3 namespace.
Definition: aligned_sequence_concept.hpp:29
SeqAn specific customisations in the standard namespace.