Main Page | Namespace List | Class Hierarchy | Class List | Directories | File List | Class Members | File Members

notifier.h

Go to the documentation of this file.
00001 #ifndef _PNOTIFIER_H
00002 #define _PNOTIFIER_H
00003 
00004 #include <ptlib.h>
00005 #include <ptlib/smartptr.h>
00006 
00008 // General notification mechanism from one object to another
00009 
00034 class PNotifierFunction : public PSmartObject
00035 {
00036   PCLASSINFO(PNotifierFunction, PSmartObject);
00037 
00038   public:
00040     PNotifierFunction(
00041       void * obj    
00042     ) { object = PAssertNULL(obj); }
00043 
00047     virtual void Call(
00048       PObject & notifier,  
00049       INT extra            
00050     ) const = 0;
00051 
00052   protected:
00053     // Member variables
00055     void * object;
00056 };
00057 
00058 
00079 class PNotifier : public PSmartPointer
00080 {
00081   PCLASSINFO(PNotifier, PSmartPointer);
00082 
00083   public:
00085     PNotifier(
00086       PNotifierFunction * func = NULL   
00087     ) : PSmartPointer(func) { }
00088 
00094     virtual void operator()(
00095       PObject & notifier,  
00096       INT extra            
00097     ) const {((PNotifierFunction*)PAssertNULL(object))->Call(notifier,extra);}
00098 };
00099 
00100 
00124 #define PDECLARE_NOTIFIER(notifier, notifiee, func) \
00125   class func##_PNotifier : public PNotifierFunction { \
00126     public: \
00127       func##_PNotifier(notifiee * obj) : PNotifierFunction(obj) { } \
00128       virtual void Call(PObject & note, INT extra) const \
00129         { ((notifiee*)object)->func((notifier &)note, extra); } \
00130   }; \
00131   friend class func##_PNotifier; \
00132   virtual void func(notifier & note, INT extra)
00133 
00142 #define PCREATE_NOTIFIER2(obj, func) PNotifier(new func##_PNotifier(obj))
00143 
00152 #define PCREATE_NOTIFIER(func) PCREATE_NOTIFIER2(this, func)
00153 
00154 #endif
00155 

Generated on Sat Dec 22 16:46:51 2007 for PWLib by  doxygen 1.4.2