24template <
typename left_adaptor_t,
typename right_adaptor_t>
25class combined_adaptor;
72template <
typename derived_type,
typename... stored_args_ts>
80 template <
typename urng_t,
size_t... Is>
86 std::forward<urng_t>(urange),
91 template <
typename urng_t,
size_t... Is>
96 std::forward<urng_t>(urange),
115 constexpr
adaptor_base(stored_args_ts... args) noexcept(noexcept(
std::tuple<stored_args_ts...>{
116 std::forward<stored_args_ts>(args)...})) :
117 arguments{std::forward<stored_args_ts>(args)...}
122 template <std::ranges::input_range urng_t>
129 template <std::ranges::input_range urng_t>
132 return std::move(*this).pass_args_to_impl(std::forward<urng_t>(urange),
147 template <
typename arg_t>
150 if constexpr (std::ranges::input_range<arg_t>)
151 return me(std::forward<arg_t>(arg));
157 template <
typename arg_t>
160 if constexpr (std::ranges::input_range<arg_t>)
161 return std::move(me)(std::forward<arg_t>(arg));
182 template <
typename arg_t>
189 template <
typename arg_t>
210template <
typename left_adaptor_t,
typename right_adaptor_t>
212 public adaptor_base<combined_adaptor<left_adaptor_t, right_adaptor_t>, left_adaptor_t, right_adaptor_t>
222 template <std::ranges::input_range urng_t,
typename left_adaptor_t_,
typename right_adaptor_t_>
223 static auto impl(urng_t && urange, left_adaptor_t_ && left_adaptor, right_adaptor_t_ && right_adaptor)
225 return std::forward<urng_t>(urange) | std::forward<left_adaptor_t_>(left_adaptor)
226 | std::forward<right_adaptor_t_>(right_adaptor);
245 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:74
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:130
std::tuple< stored_args_ts... > arguments
Stores the arguments.
Definition adaptor_base.hpp:77
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:158
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:123
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:92
constexpr friend auto operator|(adaptor_base const &me, arg_t &&arg)
Right-hand-side pipe operator that handles composing.
Definition adaptor_base.hpp:183
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:81
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:148
friend derived_type
Befriend the derived_type so it can access private members if need be.
Definition adaptor_base.hpp:101
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:190
Template for range adaptor closure objects that consist of two other range adaptor closure objects.
Definition adaptor_base.hpp:213
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:223
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:219
constexpr combined_adaptor()=default
Defaulted.
constexpr combined_adaptor(combined_adaptor &&) noexcept=default
Defaulted.
The internal SeqAn3 namespace.
Definition aligned_sequence_concept.hpp:26
SeqAn specific customisations in the standard namespace.