1 #ifndef SCALAR_TRANSFORMER_H 2 #define SCALAR_TRANSFORMER_H 9 template <
typename ScalarOp,
typename TransformerSignature,
typename Traits_ = Traits::useDefaults>
11 template <
typename ScalarOp,
typename Out,
typename... In,
typename Traits_>
15 const ScalarOp&
scalarOp()
const {
return static_cast<const ScalarOp&
>( *this ); }
24 out.reserve( inrange.size() );
25 auto& scalar = scalarOp();
26 for (
const auto&& tuple : inrange ) {
30 std::apply( [&](
const auto&... i ) {
return scalar(
details::deref( i )... ); }, tuple ) );
38 template <
typename ScalarOp,
typename TransformerSignature,
typename Traits_ = Traits::useDefaults>
40 template <
typename ScalarOp,
typename... Out,
typename... In,
typename Traits_>
45 const ScalarOp&
scalarOp()
const {
return static_cast<const ScalarOp&
>( *this ); }
54 std::apply( [sz = inrange.size()](
auto&&... o ) { ( o.reserve( sz ), ... ); }, out );
55 auto& scalar = scalarOp();
56 for (
const auto&& indata : inrange ) {
58 [&scalar, &indata](
auto&... out ) {
63 [&out...](
auto&& outdata ) {
65 [&out...]( auto&&... outdata1 ) {
66 ( details::insert( out, std::forward<decltype( outdata1 )>( outdata1 ) ), ... );
constexpr struct Gaudi::Functional::details::insert_t insert
constexpr struct Gaudi::Functional::details::deref_t deref
constexpr struct Gaudi::Functional::details::invoke_optionally_t invoke_optionally
class MergingTransformer< Out(const vector_of_const_< In > Traits_
constexpr void applyPostProcessing(const Fun &, Container &, Args...)
decltype(auto) const_range(Args &&...args)
Zips multiple containers together to form a single const range.
details::Transformer< Signature, Traits_, details::isLegacy< Traits_ >> Transformer