#include "CubitObservable.hpp"<--- Skipping configuration 'DBL_MAX' since the value of 'DBL_MAX' is unknown. Use -D if you want to check it. You can use -U to skip it explicitly.<--- Skipping configuration 'DBL_MIN' since the value of 'DBL_MIN' is unknown. Use -D if you want to check it. You can use -U to skip it explicitly.<--- Skipping configuration 'M_PI' since the value of 'M_PI' is unknown. Use -D if you want to check it. You can use -U to skip it explicitly.
#include "CubitObserver.hpp"
#include "CubitDefines.h"
CubitObservable::CubitObservable()
{
observerList = NULL;
}
CubitObservable::~CubitObservable()
{
if (observerList)
{
assert( (observerList->remove_all_with_value( NULL ),
observerList->size() == 0) );
delete observerList;
observerList = NULL;
}
}
CubitStatus CubitObservable::add_observer(CubitObserver *observer)
{
if ( !observerList )
observerList = new DLIList <CubitObserver*>;
if( observerList->append_unique( observer ) == CUBIT_TRUE )
{
return CUBIT_SUCCESS;
}
return CUBIT_FAILURE;
}
CubitStatus CubitObservable::remove_observer(CubitObserver *observer)
{
CubitStatus success = CUBIT_FAILURE;
if( observerList != NULL )
{
int i;
for ( i = 0; i < observerList->size(); i++ )
{
if ( observerList->get() == observer )
{
success = CUBIT_SUCCESS;
observerList->change_to( NULL );
break;
}
observerList->step();
}
}
return success;
}
void CubitObservable::remove_from_observers()
{
if( observerList != NULL )
observerList->clean_out();
}
void CubitObservable::get_observer_list( DLIList <CubitObserver*> &observers)
{
if (observerList)
{
for( int i = observerList->size(); i > 0; i-- )
{
CubitObserver* observer = observerList->get_and_step();
if( observer )
observers.append( observer );
}
}
}
void CubitObservable::notify_observers( const CubitEvent *event )
{
if ( ! observerList || observerList->size() == 0 )
return;
CubitObserver *observer = NULL;<--- The scope of the variable 'observer' can be reduced.
for ( int i = 0; i < observerList->size(); i++ )
{
observerList->reset();
observerList->step(i);
observer = observerList->get();
if ( observer != NULL )
{
observer->notify_observer(event);
}
}
observerList->remove_all_with_value( NULL );
}