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

args_event_listener.h

00001 //-*- C++ -*-
00002 //
00003 #ifndef __LISTENER__args_event_listener_h__
00004 #define __LISTENER__args_event_listener_h__
00005 
00006 #include "common.h"
00007 #include "event.h"
00008 #include "listener.h"
00009 #include "utils/functions.h"
00010 
00025 namespace listener {
00026   template <typename E >
00027   class GenArgListener: public ListenerForEvent<E > {
00028   public:
00029     typedef typename E::function_type function_type ;
00030     GenArgListener(Publisher* p, const function_type& f) ;
00031   protected:
00032     inline bool process_event(E* e) ;
00033   private:
00034     function_type f_ ;
00035   } ;
00036 }
00037 
00038 #define CREATE_EVENT_LISTENER(EXP,NAME)                                       \
00039   class EXP NAME##Listener: public listener::GenArgListener< NAME##Event > {  \
00040   public:                                                                     \
00041     NAME##Listener(listener::Publisher* p, const function_type& f):                     \
00042       listener::GenArgListener< NAME##Event >(p,f) {}                         \
00043   } ;
00044 
00045 
00046 
00047 // ==================================================================
00048 // ----------- no arg
00049 // ==================================================================
00050 namespace listener { 
00051   class IGSLISTENER NoArgEvent: public Event {
00052   public:
00053     typedef basic::function0<void> function_type ;
00054     NoArgEvent() ;
00055     virtual ~NoArgEvent() ;
00056     bool process(const function_type&) ;
00057   } ;
00058 }
00064 #define CREATE_0_ARG_EVENT_LISTENER(EXP,NAME)                                 \
00065   class EXP NAME##Event: public listener::NoArgEvent {                        \
00066   public:                                                                     \
00067     NAME##Event(): listener::NoArgEvent() {}                                  \
00068   } ;                                                                         \
00069   CREATE_EVENT_LISTENER(EXP,NAME)
00070 
00071 // ==================================================================
00072 // ----------- 1 arg
00073 // ==================================================================
00074 namespace listener {
00075   template <typename T1>
00076   class OneArgEvent: public Event {
00077   public:
00078     typedef basic::function1<void, T1> function_type ;
00079     OneArgEvent(T1) ;
00080     virtual ~OneArgEvent() ;
00081     T1 arg1() const ;
00082     bool process(const function_type& f) ;
00083   private:
00084     T1 arg1_ ;
00085   } ;
00086 }
00093 #define CREATE_1_ARG_EVENT_LISTENER(EXP,NAME,T1)                              \
00094   class EXP NAME##Event: public listener::OneArgEvent<T1 > {                  \
00095   public:                                                                     \
00096     NAME##Event(T1 t1): listener::OneArgEvent<T1 >(t1) {}                     \
00097   } ;                                                                         \
00098   CREATE_EVENT_LISTENER(EXP,NAME)
00099 
00100 // ==================================================================
00101 // ----------- 2 args
00102 // ==================================================================
00103 namespace listener { 
00104   template <typename T1, typename T2>
00105   class TwoArgsEvent: public OneArgEvent< T1 > {
00106   public:
00107     typedef basic::function2<void,T1,T2 > function_type ;
00108     TwoArgsEvent(T1, T2) ;
00109     virtual ~TwoArgsEvent() ;
00110     T2 arg2() const ;
00111     bool process(const function_type& f) ;
00112   private:
00113     T2 arg2_ ;
00114   } ;
00115 }
00123 #define CREATE_2_ARGS_EVENT_LISTENER(EXP,NAME,T1,T2)                          \
00124   class EXP NAME##Event: public listener::TwoArgsEvent<T1,T2 > {              \
00125   public:                                                                     \
00126     NAME##Event(T1 t1,T2 t2): listener::TwoArgsEvent<T1,T2 >(t1,t2) {}        \
00127   } ;                                                                         \
00128   CREATE_EVENT_LISTENER(EXP,NAME)
00129 
00130 // ==================================================================
00131 // ----------- 3 args
00132 // ==================================================================
00133 namespace listener { 
00134   template <typename T1, typename T2, typename T3>
00135   class ThreeArgsEvent: public TwoArgsEvent<T1,T2 > {
00136   public:
00137     typedef basic::function3<void,T1,T2,T3 > function_type ;
00138     ThreeArgsEvent(T1, T2, T3) ;
00139     virtual ~ThreeArgsEvent() ;
00140     T3 arg3() const ;
00141     bool process(const function_type& f) ;
00142   private:
00143     T3 arg3_ ;
00144   } ;
00145 }
00154 #define CREATE_3_ARGS_EVENT_LISTENER(EXP,NAME,T1,T2,T3)                       \
00155   class EXP NAME##Event: public listener::ThreeArgsEvent<T1,T2,T3 > {         \
00156   public:                                                                     \
00157     NAME##Event(T1 t1,T2 t2,T3 t3):                                           \
00158       listener::ThreeArgsEvent<T1,T2,T3 >(t1,t2,t3) {}                        \
00159   } ;                                                                         \
00160   CREATE_EVENT_LISTENER(EXP,NAME)
00161 
00162 // ==================================================================
00163 // ----------- 4 args
00164 // ==================================================================
00165 namespace listener { 
00166   template <typename T1, typename T2, typename T3, typename T4>
00167   class FourArgsEvent: public ThreeArgsEvent<T1,T2,T3 > {
00168   public:
00169     typedef basic::function4<void,T1,T2,T3,T4 > function_type ;
00170     FourArgsEvent(T1, T2, T3, T4) ;
00171     virtual ~FourArgsEvent() ;
00172     T4 arg4() const ;
00173     bool process(const function_type& f) ;
00174   private:
00175     T4 arg4_ ;
00176   } ;
00177 }
00187 #define CREATE_4_ARGS_EVENT_LISTENER(EXP,NAME,T1,T2,T3,T4)                    \
00188   class EXP NAME##Event: public listener::FourArgsEvent<T1,T2,T3,T4 > {       \
00189   public:                                                                     \
00190     NAME##Event(T1 t1,T2 t2,T3 t3,T4 t4):                                     \
00191       listener::FourArgsEvent<T1,T2,T3,T4 >(t1,t2,t3,t4) {}                   \
00192   } ;                                                                         \
00193   CREATE_EVENT_LISTENER(EXP,NAME)
00194 
00195 // ==================================================================
00196 // ----------- 5 args
00197 // ==================================================================
00198 namespace listener { 
00199   template <typename T1, typename T2, typename T3, typename T4, typename T5>
00200   class FiveArgsEvent: public FourArgsEvent<T1,T2,T3,T4 > {
00201   public:
00202     typedef basic::function5<void,T1,T2,T3,T4,T5 > function_type ;
00203     FiveArgsEvent(T1, T2, T3, T4, T5) ;
00204     virtual ~FiveArgsEvent() ;
00205     T5 arg5() const ;
00206     bool process(const function_type& f) ;
00207   private:
00208     T5 arg5_ ;
00209   } ;
00210 }
00221 #define CREATE_5_ARGS_EVENT_LISTENER(EXP,NAME,T1,T2,T3,T4,T5)                 \
00222   class EXP NAME##Event: public listener::FiveArgsEvent<T1,T2,T3,T4,T5 > {    \
00223   public:                                                                     \
00224     NAME##Event(T1 t1,T2 t2,T3 t3,T4 t4, T5 t5):                              \
00225      listener::FiveArgsEvent<T1,T2,T3,T4,T5 >(t1,t2,t3,t4,t5) {}              \
00226   } ;                                                                         \
00227   CREATE_EVENT_LISTENER(EXP,NAME)
00228 
00229 
00230 
00231 
00232 #include "inline_src/args_event_listener.hxx"
00233 #endif

Generated on Mon Jan 30 11:57:50 2006 for EventListener by  doxygen 1.3.9.1