cgma
CubitObservable.cpp
Go to the documentation of this file.
00001 #include "CubitObservable.hpp"
00002 #include "CubitObserver.hpp"
00003 #include "CubitDefines.h"
00004 
00005 CubitObservable::CubitObservable()
00006 {
00007   observerList = NULL;
00008 }
00009   
00010 CubitObservable::~CubitObservable()
00011 {
00012   if (observerList) 
00013   {
00014     assert( (observerList->remove_all_with_value( NULL ),
00015              observerList->size() == 0) );
00016     delete observerList;
00017     observerList = NULL;
00018   }
00019 }
00020   
00021 CubitStatus CubitObservable::add_observer(CubitObserver *observer)
00022 {
00023   if ( !observerList )
00024      observerList = new DLIList <CubitObserver*>;
00025   if( observerList->append_unique( observer ) == CUBIT_TRUE )
00026   {
00027     return CUBIT_SUCCESS;
00028   }
00029   return CUBIT_FAILURE;
00030 }
00031 
00032 CubitStatus CubitObservable::remove_observer(CubitObserver *observer)
00033 {
00034   CubitStatus success = CUBIT_FAILURE;
00035   if( observerList != NULL )
00036   {
00037     int i;
00038     for ( i = 0; i < observerList->size(); i++ )
00039     {
00040       if ( observerList->get() == observer )
00041       {
00042         success = CUBIT_SUCCESS;
00043         observerList->change_to( NULL );
00044         break;
00045       }
00046       observerList->step();
00047     }
00048   }
00049   return success;
00050 }
00051 
00052 void CubitObservable::remove_from_observers()
00053 {
00054   if( observerList != NULL )
00055      observerList->clean_out();
00056 }
00057   
00058 void CubitObservable::get_observer_list( DLIList <CubitObserver*> &observers)
00059 {
00060   if (observerList)
00061   {
00062     for( int i = observerList->size(); i > 0; i-- )
00063     {
00064       CubitObserver* observer = observerList->get_and_step();
00065       if( observer )
00066          observers.append( observer );
00067     }
00068   }
00069 }
00070   
00071 void CubitObservable::notify_observers( const CubitEvent *event )
00072 {
00073   if ( ! observerList || observerList->size() == 0 )
00074      return;
00075 
00076   CubitObserver *observer = NULL;
00077   for ( int i = 0; i < observerList->size(); i++ )
00078   {
00079     observerList->reset();
00080     observerList->step(i);
00081     observer = observerList->get();
00082     if ( observer != NULL )
00083     {
00084        observer->notify_observer(event);
00085     }
00086   }
00087   observerList->remove_all_with_value( NULL );
00088 }
00089 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines