15#ifndef ZYPP_ZYPPNG_MONADIC_TRANSFORM_H
16#define ZYPP_ZYPPNG_MONADIC_TRANSFORM_H
18#include <zypp-core/ng/meta/TypeTraits>
19#include <zypp-core/ng/meta/Functional>
21#include <zypp-core/ng/pipelines/operators.h>
27 template <
typename ElementType,
typename Fn,
typename =
void>
30 template <
typename ElementType,
typename Fn,
typename>
33 using Ret = std::invoke_result_t<Fn, ElementType>;
35 template <
template<
class,
class... >
class Container,
36 typename Transformation = Fn,
38 static inline Container<Ret>
execute( Container<ElementType, CArgs...>&& val, Transformation &&transformation )
41 std::transform( std::make_move_iterator(val.begin()), std::make_move_iterator(val.end()), std::back_inserter(res), std::forward<Transformation>(transformation) );
45 template <
template<
class,
class... >
class Container,
46 typename Transformation = Fn,
48 static inline Container<Ret>
execute(
const Container<ElementType, CArgs...>& val, Transformation &&transformation )
51 std::transform( val.begin(), val.end(), std::back_inserter(res), std::forward<Transformation>(transformation) );
59template <
template<
class,
class... >
class Container,
61 typename Transformation,
64auto transform( Container<Msg, CArgs...>&& val, Transformation &&transformation )
69template <
template<
class,
class... >
class Container,
71 typename Transformation,
74auto transform(
const Container<Msg, CArgs...>& val, Transformation &&transformation )
82 template <
typename Transformation,
typename sfinae =
void >
86 template<
class Container >
94 template <
typename Transformation>
98 std::forward<Transformation>(transformation)};
105#ifdef ZYPP_ENABLE_ASYNC
106#include <zypp-core/ng/async/pipelines/transform.h>
typename result_of< T >::type result_of_t
auto transform(Transformation &&transformation)
auto transform(Container< Msg, CArgs... > &&val, Transformation &&transformation)