llmediaemitter.h

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

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