From e1109c0c328aaf671e2b03b3b4e6de1ae9061754 Mon Sep 17 00:00:00 2001 From: Alexander Tkachev Date: Sat, 21 May 2016 21:30:25 +0600 Subject: CLOUD: Add CallbackBridge This commit also adds GlobalFunctionCallback, because it was needed in order to replace plain C pointers to functions (which were used in Request) into our object-oriented BaseCallback pointers. --- common/callback.h | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'common') diff --git a/common/callback.h b/common/callback.h index 4cfdd53fd9..4cc63ed346 100644 --- a/common/callback.h +++ b/common/callback.h @@ -32,6 +32,18 @@ public: virtual void operator()(void *ptr) = 0; }; +class GlobalFunctionCallback: public BaseCallback { + typedef void(*GlobalFunction)(void *result); + GlobalFunction _callback; + +public: + GlobalFunctionCallback(GlobalFunction cb): _callback(cb) {} + virtual ~GlobalFunctionCallback() {} + virtual void operator()(void *ptr) { + if (_callback) _callback(ptr); + } +}; + template class Callback: public BaseCallback { typedef void(T::*TMethod)(void *); T *_object; @@ -42,6 +54,18 @@ public: void operator()(void *ptr) { (_object->*_method)(ptr); } }; +template class CallbackBridge: public BaseCallback { + typedef void(T::*TCallbackMethod)(BaseCallback *, void *); + T *_object; + TCallbackMethod _method; + BaseCallback *_outerCallback; +public: + CallbackBridge(T *object, TCallbackMethod method, BaseCallback *outerCallback): + _object(object), _method(method), _outerCallback(outerCallback) {} + virtual ~CallbackBridge() {} + void operator()(void *ptr) { (_object->*_method)(_outerCallback, ptr); } +}; + } // End of namespace Common #endif -- cgit v1.2.3