14 #ifndef ZYPPNG_MONADIC_LIFT_H_INCLUDED 15 #define ZYPPNG_MONADIC_LIFT_H_INCLUDED 21 #include <zypp-core/zyppng/meta/Functional> 22 #include <zypp-core/zyppng/pipelines/AsyncResult> 27 template <
typename LiftedFun,
typename extra =
void >
36 ,
typename Ret = std::pair<std::result_of_t<LiftedFun(T1)>, T2>
39 return std::make_pair(
std::invoke(
_fun, std::move(data.first) ), std::move(data.second) );
45 template <
typename AsyncOp >
46 struct lifter<
std::shared_ptr<AsyncOp>,
std::void_t< std::enable_if_t< zyppng::detail::is_async_op<AsyncOp>::value > > > {
62 return std::move(data.first)
64 | [ other = std::move(data.second)](
auto && res )
mutable {
65 return std::make_pair( std::forward<decltype (res)>(res), std::move(other) );
73 template<
typename Fun >
74 auto lift ( Fun && func ) {
typename make_void< Ts... >::type void_t
std::shared_ptr< AsyncOp > LiftedFun
std::enable_if< std::is_member_pointer< typename std::decay< Functor >::type >::value, typename std::result_of< Functor &&(Args &&...)>::type >::type invoke(Functor &&f, Args &&... args)
Ret operator()(std::pair< T1, T2 > &&data)
auto operator()(std::pair< T1, T2 > &&data)