3 #include "g_signal_subscribers.h"
14 typedef typename E::Subscriber Subscriber_t;
15 typedef typename E::SubscriberRef_t SubscriberRef_t;
16 typedef typename E::ListSubscriber_t ListSubscriber_t;
17 typedef typename E::FunctionSubscriber FunctionSubscriber_t;
18 typedef typename E::FunctionPointer_t FunctionPointer_t;
20 void subscribe ( SubscriberRef_t aSubscriberRef )
22 mListSubscribers.pushTail ( aSubscriberRef );
25 SubscriberRef_t subscribe (
typename E::FunctionPointer_t aFunctionPointer )
27 SubscriberRef_t event_ref = FunctionSubscriber_t::create ( aFunctionPointer );
28 subscribe ( event_ref );
33 template <
class T > SubscriberRef_t subscribe ( T* aClsInstance ,
typename E::template class_method<T>::Pointer_t aMethodPointer )
35 SubscriberRef_t event_ref = E::template method_subscriber<T>::create( aMethodPointer , aClsInstance );
36 subscribe ( event_ref );
41 void unsubscribe ( SubscriberRef_t aSubscriberRef )
43 mListSubscribers.removeAll ( aSubscriberRef );
46 void unsubscribe (
typename Event_t::FunctionPointer_t aFunctionPointer )
48 ListSubscriber_t to_remove_list;
50 for (
typename ListSubscriber_t::It_t it = mListSubscribers.getIterator ( ) ; it.isIn ( ) ; it++ )
55 if ( subscriber_ref.tryRefTakeDynamically((SubscriberRef_t)it) )
57 if ( subscriber_ref->functionPointer == aFunctionPointer )
59 to_remove_list.pushTail ( it );
64 for (
typename ListSubscriber_t::It_t it = to_remove_list.getIterator ( ) ; it.isIn ( ) ; it++ )
66 mListSubscribers.tryRemove ( it );
70 void doClearSubscribers() { mListSubscribers.setEmpty(); }
72 template <
class T >
void unsubscribe ( T* aInstanceP ,
typename E::template class_method<T>::Pointer_t aClassMethodPointer )
74 ListSubscriber_t to_remove_list;
76 for (
typename ListSubscriber_t::It_t it = mListSubscribers.getIterator ( ) ; it.isIn ( ) ; it++ )
81 if ( subscriber_ref.tryRefTakeDynamically((SubscriberRef_t)it) )
83 if ( subscriber_ref->clsInstanceP == aInstanceP && subscriber_ref->methodPointer == aClassMethodPointer )
85 to_remove_list.pushTail ( it );
90 for (
typename ListSubscriber_t::It_t it = to_remove_list.getIterator ( ) ; it.isIn ( ) ; it++ )
92 mListSubscribers.tryRemove ( it );
97 ListSubscriber_t mListSubscribers;
108 typedef typename E::template class_method<T>::Pointer_t MethodPointer_t;
109 typedef typename E::SubscriberRef_t SubscriberRef_t;
111 void subscribe ( MethodPointer_t aThisClassMethodPointer )
116 void unsubscribe ( MethodPointer_t aThisClassMethodPointer )
Class capable of receiving events.
Definition: g_signal_signal_receiver.h:10
Definition: g.mthread.ThreadSimpleEvent.h:5
Definition: g_cont_it_ref.h:10
Definition: g_signal_signal_receiver.h:127
Definition: g_signal_signal_receiver.h:101