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 ) {
64 GF_SUPPRESS_SPURIOUS_CLANG_WARNING_BEGIN
66 [&out...]( auto&&... outdata1 ) {
67 ( 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