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 >
37 void operator() ( std::shared_ptr<ArgType> &&req ) {
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;
63 typename SignalGetter >
64 auto await ( SignalGetter &&sigGet )
66 return std::make_shared<detail::AwaitImpl<T, SignalGetter>>( std::forward<SignalGetter>(sigGet) );
auto await(SignalGetter &&sigGet)
std::enable_if_t< std::is_same_v< void, RetType >, RetType > sigHandler(SigT...)
SignalProxy< SigR(SigT...)>(ArgType::*)() SigGetter
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)
std::enable_if_t< !std::is_same_v< void, RetType >, RetType > sigHandler(SigT...)
typename enable_if< B, T >::type enable_if_t
std::shared_ptr< ArgType > _req