1 #ifndef SCALAR_TRANSFORMER_H 2 #define SCALAR_TRANSFORMER_H 10 template <
typename ScalarOp,
typename TransformerSignature,
typename Traits_ = Traits::useDefaults>
12 template <
typename ScalarOp,
typename Out,
typename... In,
typename Traits_>
16 const ScalarOp&
scalarOp()
const {
return static_cast<const ScalarOp&
>( *this ); }
25 out.reserve( inrange.size() );
26 auto& scalar = scalarOp();
27 for (
const auto&& tuple : inrange ) {
39 template <
typename ScalarOp,
typename TransformerSignature,
typename Traits_ = Traits::useDefaults>
41 template <
typename ScalarOp,
typename... Out,
typename... In,
typename Traits_>
46 const ScalarOp&
scalarOp()
const {
return static_cast<const ScalarOp&
>( *this ); }
56 [sz = inrange.size()](
auto&&... o ) {
57 #if __cplusplus < 201703L 60 ( o.reserve( sz ), ... );
64 auto& scalar = scalarOp();
65 for (
const auto&& indata : inrange ) {
67 [&scalar, &indata](
auto&... out ) {
72 [&out...](
auto&& outdata ) {
74 [&out...]( auto&&... outdata1 ) {
75 #if __cplusplus < 201703L
76 (void)std::initializer_list<int>{
77 ( details::insert( out, std::forward<decltype( outdata1 )>( outdata1 ) ), 0 )...};
79 ( details::insert( out, std::forward<decltype( outdata1 )>( outdata1 ) ), ... );
constexpr struct Gaudi::Functional::details::insert_t insert
class MergingTransformer< Out(const vector_of_const_< In > void
decltype(auto) constexpr apply(F &&f, Tuple &&t) noexcept(noexcept( detail::apply_impl(std::forward< F >(f), std::forward< Tuple >(t), std::make_index_sequence< std::tuple_size< std::remove_reference_t< Tuple >>::value >{})))
constexpr struct Gaudi::Functional::details::deref_t deref
constexpr struct Gaudi::Functional::details::invoke_optionally_t invoke_optionally
constexpr void applyPostProcessing(const Fun &, Container &, Args...)
class MergingTransformer< Out(const vector_of_const_< In > Traits_
decltype(auto) const_range(Args &&...args)
Zips multiple containers together to form a single const range.
Helper functions to set/get the application return code.