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 ) ), ... );
constexpr void applyPostProcessing(const Fun &, Container &, Args...)
details::MultiTransformer< Signature, Traits_, details::isLegacy< Traits_ > > MultiTransformer
details::Transformer< Signature, Traits_, details::isLegacy< Traits_ > > Transformer
constexpr struct ranges::Gaudi::Functional::details::insert_t insert
decltype(auto) range(Args &&... args)
Zips multiple containers together to form a single range.
#define GF_SUPPRESS_SPURIOUS_CLANG_WARNING_END
constexpr struct ranges::Gaudi::Functional::details::deref_t deref
constexpr struct ranges::Gaudi::Functional::details::invoke_optionally_t invoke_optionally