Branch data Line data Source code
1 : : #include "CubitObservable.hpp"
2 : : #include "CubitObserver.hpp"
3 : : #include "CubitDefines.h"
4 : :
5 : 239794 : CubitObservable::CubitObservable()
6 : : {
7 : 239794 : observerList = NULL;
8 : 239794 : }
9 : :
10 : 148269 : CubitObservable::~CubitObservable()
11 : : {
12 [ + + ]: 148269 : if (observerList)
13 : : {
14 [ + - ][ + - ]: 3637 : assert( (observerList->remove_all_with_value( NULL ),
15 [ - + ]: 3637 : observerList->size() == 0) );
16 [ + - ]: 3637 : delete observerList;
17 : 3637 : observerList = NULL;
18 : : }
19 [ - + ]: 148269 : }
20 : :
21 : 13085 : CubitStatus CubitObservable::add_observer(CubitObserver *observer)
22 : : {
23 [ + + ]: 13085 : if ( !observerList )
24 [ + - ]: 3988 : observerList = new DLIList <CubitObserver*>;
25 [ + - ]: 13085 : if( observerList->append_unique( observer ) == CUBIT_TRUE )
26 : : {
27 : 13085 : return CUBIT_SUCCESS;
28 : : }
29 : 13085 : return CUBIT_FAILURE;
30 : : }
31 : :
32 : 12734 : CubitStatus CubitObservable::remove_observer(CubitObserver *observer)
33 : : {
34 : 12734 : CubitStatus success = CUBIT_FAILURE;
35 [ + - ]: 12734 : if( observerList != NULL )
36 : : {
37 : : int i;
38 [ + - ]: 44036 : for ( i = 0; i < observerList->size(); i++ )
39 : : {
40 [ + + ]: 31302 : if ( observerList->get() == observer )
41 : : {
42 : 12734 : success = CUBIT_SUCCESS;
43 : 12734 : observerList->change_to( NULL );
44 : 12734 : break;
45 : : }
46 : 18568 : observerList->step();
47 : : }
48 : : }
49 : 12734 : return success;
50 : : }
51 : :
52 : 102164 : void CubitObservable::remove_from_observers()
53 : : {
54 [ + + ]: 102164 : if( observerList != NULL )
55 : 4370 : observerList->clean_out();
56 : 102164 : }
57 : :
58 : 7468 : void CubitObservable::get_observer_list( DLIList <CubitObserver*> &observers)
59 : : {
60 [ + + ]: 7468 : if (observerList)
61 : : {
62 [ + + ]: 744 : for( int i = observerList->size(); i > 0; i-- )
63 : : {
64 [ + - ]: 372 : CubitObserver* observer = observerList->get_and_step();
65 [ + - ]: 372 : if( observer )
66 [ + - ]: 372 : observers.append( observer );
67 : : }
68 : : }
69 : 7468 : }
70 : :
71 : 248866 : void CubitObservable::notify_observers( const CubitEvent *event )
72 : : {
73 [ + + ][ + + ]: 248866 : if ( ! observerList || observerList->size() == 0 )
[ + + ]
74 : 248866 : return;
75 : :
76 : 3637 : CubitObserver *observer = NULL;
77 [ + + ]: 16371 : for ( int i = 0; i < observerList->size(); i++ )
78 : : {
79 : 12734 : observerList->reset();
80 : 12734 : observerList->step(i);
81 : 12734 : observer = observerList->get();
82 [ + + ]: 12734 : if ( observer != NULL )
83 : : {
84 : 84 : observer->notify_observer(event);
85 : : }
86 : : }
87 [ + - ]: 3637 : observerList->remove_all_with_value( NULL );
88 : : }
89 : :
|