Go to the documentation of this file.
31 #ifndef PTLIB_NOTIFIER_H
32 #define PTLIB_NOTIFIER_H
62 template <
typename ParamType>
112 template <
typename ParamType>
136 ptr->
Call(notifier, extra);
142 return ptr != NULL ? ptr->
GetTarget() : NULL;
152 #define PDECLARE_NOTIFIER_COMMON1(notifier, notifiee, func, ParamType, BaseClass) \
153 class func##_PNotifier : public BaseClass { \
155 func##_PNotifier(notifiee * target) : BaseClass(target, target) { } \
156 virtual void Call(PObject & note, ParamType extra) const \
158 #define PDECLARE_NOTIFIER_COMMON2(notifier, notifiee, func, ParamType, BaseClass) \
159 { notifiee * target = reinterpret_cast<notifiee *>(this->GetTarget()); \
160 if (target != NULL) \
161 target->func(reinterpret_cast<notifier &>(note), extra); \
163 static PNotifierTemplate<ParamType> Create(notifiee * obj) { return new func##_PNotifier(obj); } \
164 static PNotifierTemplate<ParamType> Create(notifiee & obj) { return new func##_PNotifier(&obj); } \
166 friend class func##_PNotifier; \
167 virtual void func(notifier & note, ParamType extra) \
169 #define PDECLARE_NOTIFIER_COMMON(notifier, notifiee, func, ParamType, BaseClass) \
170 PDECLARE_NOTIFIER_COMMON1(notifier, notifiee, func, ParamType, BaseClass) \
171 PDECLARE_NOTIFIER_COMMON2(notifier, notifiee, func, ParamType, BaseClass)
198 #define PDECLARE_NOTIFIER2(notifier, notifiee, func, ParamType) \
199 PDECLARE_NOTIFIER_COMMON(notifier, notifiee, func, ParamType, PNotifierFunctionTemplate<ParamType>)
202 #define PDECLARE_NOTIFIER(notifier, notifiee, func) \
203 PDECLARE_NOTIFIER2(notifier, notifiee, func, P_INT_PTR)
214 #define PCREATE_NOTIFIER2_EXT(obj, notifiee, func, type) notifiee::func##_PNotifier::Create(obj)
217 #define PCREATE_NOTIFIER_EXT( obj, notifiee, func) notifiee::func##_PNotifier::Create(obj)
228 #define PCREATE_NOTIFIER2(func, type) P_DISABLE_MSVC_WARNINGS(4355, func##_PNotifier::Create(this))
231 #define PCREATE_NOTIFIER(func) P_DISABLE_MSVC_WARNINGS(4355, func##_PNotifier::Create(this))
234 #endif // PTLIB_NOTIFIER_H