]>
Commit | Line | Data |
---|---|---|
bbc27441 AJ |
1 | /* |
2 | * Copyright (C) 1996-2014 The Squid Software Foundation and contributors | |
3 | * | |
4 | * Squid software is distributed under GPLv2+ license and includes | |
5 | * contributions from numerous individuals and organizations. | |
6 | * Please see the COPYING and CONTRIBUTORS files for details. | |
7 | */ | |
8 | ||
37dedc58 AJ |
9 | #ifndef SQUID_BASE_ASYNCCBDATACALLS_H |
10 | #define SQUID_BASE_ASYNCCBDATACALLS_H | |
11 | ||
12 | #include "base/AsyncCall.h" | |
13 | #include "base/CbcPointer.h" | |
14 | ||
15 | // dialer to run cbdata callback functions as Async Calls | |
16 | // to ease the transition of these cbdata objects to full Jobs | |
17 | template<class Argument1> | |
18 | class UnaryCbdataDialer : public CallDialer | |
19 | { | |
20 | public: | |
21 | typedef void Handler(Argument1 *); | |
22 | ||
23 | UnaryCbdataDialer(Handler *aHandler, Argument1 *aArg) : | |
24 | arg1(aArg), | |
54544731 A |
25 | handler(aHandler) {} |
26 | ||
37dedc58 AJ |
27 | virtual bool canDial(AsyncCall &call) { return arg1.valid(); } |
28 | void dial(AsyncCall &call) { handler(arg1.get()); } | |
29 | virtual void print(std::ostream &os) const { os << '(' << arg1 << ')'; } | |
30 | ||
31 | public: | |
32 | CbcPointer<Argument1> arg1; | |
33 | Handler *handler; | |
34 | }; | |
35 | ||
36 | // helper function to simplify Dialer creation. | |
37 | template <class Argument1> | |
38 | UnaryCbdataDialer<Argument1> | |
39 | cbdataDialer(typename UnaryCbdataDialer<Argument1>::Handler *handler, Argument1 *arg1) | |
40 | { | |
41 | return UnaryCbdataDialer<Argument1>(handler, arg1); | |
42 | } | |
43 | ||
44 | #endif |