9#ifndef SQUID_SRC_BASE_ASYNCCALLBACKS_H
10#define SQUID_SRC_BASE_ASYNCCALLBACKS_H
17template <
typename AnswerT>
30template <
typename Answer>
55 const auto call =
call_;
61 explicit operator bool()
const {
return answer_; }
78template <
typename Argument1>
93 void print(std::ostream &os)
const final { os <<
'(' <<
arg1 <<
')'; }
105template <
class Destination,
typename Argument1>
112 typedef void (Destination::*
Method)(Argument1 &);
120 void print(std::ostream &os)
const final { os <<
'(' <<
arg1_ <<
')'; }
133template <
class Job,
typename Argument1>
142 Base(aJob, aMethod, {}) {}
152 std::is_base_of<AsyncJob, T>::value,
158template <class Destination, typename Argument1, std::enable_if_t<!IsAsyncJob<Destination>::value,
int> = 0>
160callbackDialer(
void (Destination::*method)(Argument1 &), Destination * const destination)
162 static_assert(!std::is_base_of<AsyncJob, Destination>::value,
"wrong wrapper");
167template <class Destination, typename Argument1, std::enable_if_t<IsAsyncJob<Destination>::value,
int> = 0>
169callbackDialer(
void (Destination::*method)(Argument1 &), Destination * const destination)
171 static_assert(std::is_base_of<AsyncJob, Destination>::value,
"wrong wrapper");
176template <
typename Argument1>
195#define asyncCallback(dbgSection, dbgLevel, method, object) \
196 AsyncCallback_(asyncCall((dbgSection), (dbgLevel), #method, \
197 callbackDialer(&method, (object))))
201#define asyncCallbackFun(dbgSection, dbgLevel, function) \
202 AsyncCallback_(asyncCall((dbgSection), (dbgLevel), #function, \
203 callbackDialer(&function)))
typename std::conditional< std::is_base_of< AsyncJob, T >::value, std::true_type, std::false_type >::type IsAsyncJob
UnaryCbcCallbackDialer< Destination, Argument1 > callbackDialer(void(Destination::*method)(Argument1 &), Destination *const destination)
helper function to simplify UnaryCbcCallbackDialer creation
AsyncCallback< typename Call::Dialer::Answer > AsyncCallback_(const RefCount< Call > &call)
a smart AsyncCall pointer for delivery of future results
const AsyncCall & operator*() const
const AsyncCall * operator->() const
AsyncCall::Pointer release()
AsyncCall::Pointer call_
callback carrying the answer
AsyncCallback(const RefCount< Call > &call)
Cbc * valid() const
was set and is valid
void print(std::ostream &os) const final
~UnaryCbcCallbackDialer() override=default
UnaryCbcCallbackDialer(Method method, Destination *destination)
bool canDial(AsyncCall &)
void(Destination::* Method)(Argument1 &)
CbcPointer< Destination > destination_
object to deliver the answer to
Method method_
Destination method to call with the answer.
Argument1 & answer() final
callback results setter
CallDialer for single-parameter callback functions.
Argument1 arg1
actual call parameter
bool canDial(AsyncCall &)
Handler * handler
the function to call
~UnaryFunCallbackDialer() override=default
void print(std::ostream &os) const final
Argument1 & answer() final
callback results setter
void(Argument1 &) Handler
UnaryFunCallbackDialer(Handler *const aHandler)
UnaryJobCallbackDialer(const CbcPointer< Job > &aJob, typename Base::Method aMethod)
Argument1 & answer() final
callback results setter
void(Job::* Method)(Argument1 &)
access to a callback result carried by an asynchronous CallDialer
virtual Answer & answer()=0
callback results setter
virtual ~WithAnswer()=default