 |
OpendTect
6.6
|
Go to the documentation of this file.
39 #define mCBFn(fn) (static_cast<CallBackFunction>(&fn))
42 #define mCB(obj,clss,fn) CallBack( static_cast<clss*>(obj), mCBFn(clss::fn))
45 #define mSCB(fn) CallBack( (static_cast<StaticCallBackFunction>(&fn)) )
66 : cberobj_(nullptr), fn_(nullptr), sfn_(nullptr)
69 : cberobj_(o), fn_(f), sfn_(nullptr)
72 : cberobj_(nullptr), fn_(nullptr), sfn_(f)
81 void enable()
const { disable(
false); }
132 { removeFromThreadCalls( cber ); }
135 #define mMainThreadCall( func ) \
136 CallBack::callInMainThread( CallBack( this, mCBFn(func) ), 0)
138 #define mEnsureExecutedInMainThread( func ) \
139 if ( CallBack::queueIfNotInMainThread( \
140 CallBack( this, mCBFn(func) ), 0 ) ) \
143 #define mEnsureExecutedInMainThreadWithCapsule( func, caps ) \
144 CallBack cb( this, mCBFn(func) ); \
145 if ( CallBack::queueIfNotInMainThread(cb,caps->clone()) ) \
194 bool onlyifnew=
false)
const;
200 bool onlyifnew=
false)
const;
208 {
if ( notif ) detachCB( *notif, cb ); }
229 { detachAllNotifiers(); }
258 : data(d), caller(c) {}
291 #define mCBCapsuleGet(PayLoadType,var,cb) \
292 CBCapsule<PayLoadType>* var = dynamic_cast< CBCapsule<PayLoadType>* >( cb );
294 #define mCBCapsuleUnpack(PayLoadType,var,cb) \
295 mCBCapsuleGet(PayLoadType,cb##caps,cb) \
296 PayLoadType var = cb##caps->data
298 #define mCBCapsuleUnpackWithCaller(PayLoadType,var,cber,cb) \
299 mCBCapsuleGet(PayLoadType,cb##caps,cb) \
300 PayLoadType var = cb##caps->data; \
301 CallBacker* cber = cb##caps->caller
void detachCB(const NotifierAccess &, const CallBack &) const
void disable(bool yn=true) const
static bool callInMainThread(const CallBack &, CallBacker *=nullptr)
void stopReceivingNotifications() const
Definition: callback.h:228
T to(const F &fr)
Definition: convert.h:34
bool hasAnyDisabled() const
void(*)(CallBacker *) StaticCallBackFunction
Definition: callback.h:44
CallBacker(const CallBacker &)
bool attachCB(const NotifierAccess &, const CallBack &, bool onlyifnew=false) const
CallBacker * caller
Definition: callback.h:261
void removeWith(StaticCallBackFunction)
CallBacker * cberobj_
Definition: callback.h:115
CallBackFunction fn_
Definition: callback.h:116
CallBackSet & operator=(const CallBackSet &)
void doCall(CallBacker *) const
StaticCallBackFunction scbFn() const
Definition: callback.h:86
#define mExpClass(module)
Definition: commondefs.h:177
void doCall(CallBacker *)
it is possible to remove another callback during the doCall
void removeWith(const CallBacker *)
T data
Definition: callback.h:260
bool attachCB(const NotifierAccess *notif, const CallBack &cb, bool onlyifnew=false) const
CallBack(StaticCallBackFunction f)
Definition: callback.h:71
void(CallBacker::*)(CallBacker *) CallBackFunction
Definition: callback.h:38
StaticCallBackFunction sfn_
Definition: callback.h:117
TypeSet of CallBacks with a few extras.
Definition: callback.h:152
bool operator==(const CallBack &) const
Inherit from this class to be able to send and/or receive CallBacks.
Definition: callback.h:185
void detachAllNotifiers() const
Call from the destructor of your inherited object.
static bool queueIfNotInMainThread(CallBack, CallBacker *=nullptr)
static void removeReceiverForCurrentThread()
virtual bool isCapsule() const
Definition: callback.h:265
void * ThreadID
Definition: thread.h:34
CallBacks object-oriented (object + method).
Definition: callback.h:62
CallBackSet(const CallBackSet &)
void disableAll(bool yn=true)
bool isDisabled() const
Definition: callback.h:79
Interface class for Notifier. See comments there.
Definition: notify.h:22
CallBack(CallBacker *o, CallBackFunction f)
Definition: callback.h:68
#define mClass(module)
Definition: commondefs.h:181
#define mDeprecated(msg)
Definition: plfdefs.h:215
CBCapsule(T d, CallBacker *c)
Definition: callback.h:257
Threads::Lock attachednotifierslock_
Definition: callback.h:224
static bool addToThread(Threads::ThreadID, const CallBack &, CallBacker *=nullptr)
CallBacker * cbObj()
Definition: callback.h:83
CallBackFunction cbFn() const
Definition: callback.h:85
ObjectSet< NotifierAccess > attachednotifiers_
Definition: callback.h:223
CallBack()
Definition: callback.h:65
static void createReceiverForCurrentThread()
const CallBacker * cbObj() const
Definition: callback.h:84
bool operator!=(const CallBack &) const
static void removeFromThreadCalls(const CallBacker *)
Threads::Lock lock_
Definition: callback.h:173
bool isNotifierAttached(const NotifierAccess *) const
Only for debugging purposes, don't use.
void transferTo(CallBackSet &to, const CallBacker *onlyfor=nullptr, const CallBacker *notfor=nullptr)
void detachCB(const NotifierAccess *notif, const CallBack &cb) const
Definition: callback.h:206
CBCapsule< T > * clone() const
Definition: callback.h:263
bool notifyShutdown(const NotifierAccess *, bool wait) const
static Threads::ThreadID mainthread_
Definition: callback.h:119
Capsule class to wrap any class into a CallBacker.
Definition: callback.h:255
void enable() const
Definition: callback.h:81
static bool addToMainThread(const CallBack &, CallBacker *=nullptr)
void removeWith(CallBackFunction)
Threads::Atomic< int > disablecount_
Definition: callback.h:118
virtual bool isCapsule() const
Definition: callback.h:213
A lock of a type that (hopefully) suits your needs. To use it, you need the Locker class.
Definition: threadlock.h:53
Generated at
for the OpendTect
seismic interpretation project.
Copyright (C): dGB Beheer B.V. 1995-2021