lleventemitter.h

Go to the documentation of this file.
00001 
00032 // header guard
00033 #ifndef LL_EVENTEMITTER_H
00034 #define LL_EVENTEMITTER_H
00035 
00036 // standard headers
00037 #include <algorithm>
00038 #include <typeinfo>
00039 #include <iostream>
00040 #include <string>
00041 #include <list>
00042 
00043 #include "stdtypes.h"
00044 
00046 //      templatized emitter class
00047 template < class T >
00048 class eventEmitter
00049 {
00050         public:
00051                 typedef typename T::EventType EventType;
00052                 typedef std::list< T* > ObserverContainer;
00053                 typedef void ( T::*observerMethod )( const EventType& );
00054 
00055         protected:
00056                 ObserverContainer observers;
00057 
00058         public:
00059                 eventEmitter () { };
00060 
00061                 ~eventEmitter () { };
00062 
00064                 //
00065                 BOOL addObserver ( T* observerIn )
00066                 {
00067                         if ( ! observerIn )
00068                                 return FALSE;
00069 
00070                         // check if observer already exists
00071                         if ( std::find ( observers.begin (), observers.end (), observerIn ) != observers.end () )
00072                                 return FALSE;
00073 
00074                         // save it
00075                         observers.push_back ( observerIn );
00076 
00077                         return true;
00078                 };
00079 
00081                 //
00082                 BOOL remObserver ( T* observerIn )
00083                 {
00084                         if ( ! observerIn )
00085                                 return FALSE;
00086 
00087                         observers.remove ( observerIn );
00088 
00089                         return TRUE;
00090                 };
00091 
00093                 //
00094                 void update ( observerMethod method, const EventType& msgIn )
00095                 {
00096                         typename std::list< T* >::iterator iter = observers.begin ();
00097 
00098                         while ( iter != observers.end () )
00099                         {
00100                                 ( ( *iter )->*method ) ( msgIn );
00101 
00102                                 ++iter;
00103                         };
00104                 };
00105 };
00106 
00107 #endif // lleventemitter_h

Generated on Thu Jul 1 06:08:29 2010 for Second Life Viewer by  doxygen 1.4.7