00001
00002
00003 #ifndef __LISTENER__publisher_h__
00004 #define __LISTENER__publisher_h__
00005
00006 #include "common.h"
00007 #include "event_filter.h"
00008 #include <vector>
00009 #include <list>
00010
00024 #define igs_emit(E) post_event(new E)
00025
00026 namespace listener {
00027
00028 class Event ;
00029 class Listener ;
00030 class Subscriber ;
00031
00040 class IGSLISTENER Publisher {
00041 public:
00042 Publisher() ;
00043 virtual ~Publisher() ;
00044
00064 int post_event(Event* e) ;
00065 int post_event(Event* e) const ;
00066
00067 void block_all_events() ;
00068 void unblock_all_events() ;
00069 bool are_all_events_blocked() const ;
00070
00071 void dump_publisher(std::ostream&) ;
00072
00073 private:
00074 friend class Subscriber ;
00075 friend class Listener ;
00076 typedef std::list<Listener*> Listeners ;
00077 void add_listener_private(Listener* l) ;
00078 void notify_remove_listener(Listener* l) ;
00079 Listeners listeners_ ;
00080 bool blocked_ ;
00081
00082 } ;
00083
00084 inline bool Publisher::are_all_events_blocked() const {
00085 return blocked_ ;
00086 }
00087
00088 }
00089
00090 #endif