llmediaemitter.h

Go to the documentation of this file.
00001 
00034 #ifndef LLMEDIAEMITTER_H
00035 #define LLMEDIAEMITTER_H
00036 
00037 #include <list>
00038 #include <algorithm>
00039 #include <typeinfo>
00040 
00042 //
00043 template< class T >
00044 class LLMediaEmitter
00045 {
00046         public:
00047                 LLMediaEmitter() { };
00048                 ~LLMediaEmitter() { };
00049 
00050                 typedef typename T::EventType EventType;
00051                 typedef std::list< T* > ObserverContainer;
00052                 typedef void( T::*observerMethod )( const EventType& );
00053 
00055                 //
00056                 bool addObserver( T* observer_in )
00057                 {
00058                         if ( ! observer_in )
00059                                 return false;
00060 
00061                         if ( std::find( observers.begin(), observers.end(), observer_in) != observers.end() )
00062                                 return false;
00063 
00064                         observers.push_back( observer_in );
00065 
00066                         return true;
00067                 };
00068 
00070                 //
00071                 bool remObserver( T* observer_in )
00072                 {
00073                         if ( ! observer_in )
00074                                 return false;
00075 
00076                         observers.remove( observer_in );
00077                         observers.remove( observer_in );
00078                         observers.remove( observer_in );
00079 
00080 
00081 
00082                         return true;
00083                 };
00084 
00086                 //
00087                 void update( observerMethod method, const EventType& msgIn )
00088                 {
00089                         typename std::list< T* >::iterator iter = observers.begin();
00090 
00091                         while( iter != observers.end() )
00092                         {
00093                                 ( ( *iter )->*method )( msgIn );
00094 
00095                                 ++iter;
00096                         };
00097                 };
00098 
00099         protected:
00100                 ObserverContainer observers;
00101 };
00102 
00103 #endif  // LLMEDIAEMITTER_H

Generated on Fri May 16 08:32:20 2008 for SecondLife by  doxygen 1.5.5