14#ifndef ZYPPNG_MONADIC_AWAIT_H_INCLUDED
15#define ZYPPNG_MONADIC_AWAIT_H_INCLUDED
18#include <zypp-core/zyppng/pipelines/AsyncResult>
19#include <zypp-core/zyppng/base/Signals>
25 template <
typename T,
typename SigGetter>
struct AwaitImpl;
27 template <
typename ArgType,
typename SigR,
typename ...SigT >
38 _req = std::move(req);
39 std::invoke( _sigGet, _req ).connect( sigc::mem_fun(
this, &AwaitImpl::sigHandler<SigR>) );
43 template <
typename RetType = SigR >
46 this->setReady( std::move(_req) );
49 template <
typename RetType = SigR >
52 this->setReady( std::move(_req) );
56 std::shared_ptr<ArgType>
_req;
66 return std::make_shared<detail::AwaitImpl<T, SignalGetter>>( std::forward<SignalGetter>(
sigGet) );
Reference counted access to a Tp object calling a custom Dispose function when the last AutoDispose h...
typename enable_if< B, T >::type enable_if_t
std::enable_if< std::is_member_pointer< typenamestd::decay< Functor >::type >::value, typenamestd::result_of< Functor &&(Args &&...)>::type >::typ invoke)(Functor &&f, Args &&... args)
auto await(SignalGetter &&sigGet)
std::enable_if_t< !std::is_same_v< void, RetType >, RetType > sigHandler(SigT...)
std::enable_if_t< std::is_same_v< void, RetType >, RetType > sigHandler(SigT...)
std::shared_ptr< ArgType > _req