11 #ifndef SCALAR_TRANSFORMER_H
12 #define SCALAR_TRANSFORMER_H
19 template <
typename ScalarOp,
typename TransformerSignature,
typename Traits_ = Traits::useDefaults>
21 template <
typename ScalarOp,
typename Out,
typename... In,
typename Traits_>
25 const ScalarOp&
scalarOp()
const {
return static_cast<const ScalarOp&
>( *this ); }
34 out.reserve( inrange.size() );
35 auto& scalar = scalarOp();
36 for (
const auto&& tuple : inrange ) {
40 std::apply( [&](
const auto&... i ) {
return scalar(
details::deref( i )... ); }, tuple ) );
48 template <
typename ScalarOp,
typename TransformerSignature,
typename Traits_ = Traits::useDefaults>
50 template <
typename ScalarOp,
typename... Out,
typename... In,
typename Traits_>
55 const ScalarOp&
scalarOp()
const {
return static_cast<const ScalarOp&
>( *this ); }
64 std::apply( [sz = inrange.size()](
auto&&... o ) { ( o.reserve( sz ), ... ); },
out );
65 auto& scalar = scalarOp();
66 for (
const auto&& indata : inrange ) {
68 [&scalar, &indata](
auto&...
out ) {
73 [&
out...](
auto&& outdata ) {
74 GF_SUPPRESS_SPURIOUS_CLANG_WARNING_BEGIN
76 [&out...]( auto&&... outdata1 ) {
77 ( details::insert( out, std::forward<decltype( outdata1 )>( outdata1 ) ), ... );