00001 /* #start# *********************************************************** 00002 00003 Scheduling Simulator 00004 Lehrstuhl f"ur Effiziente Algorithmen 00005 Technische Universit"at M"unchen 00006 00007 File : $Id: SObserver.h,v 1.4 2003/01/08 18:57:11 meierb Exp $ 00008 00009 Purpose : the observer part in the classical observer-pattern 00010 00011 RCS-Log: 00012 $Log: SObserver.h,v $ 00013 Revision 1.4 2003/01/08 18:57:11 meierb 00014 added randomized release times 00015 00016 Revision 1.1.1.1 2002/12/02 22:26:19 meierb 00017 my_schedule 00018 00019 Revision 1.2 2002/11/13 18:42:59 taeubig 00020 Adaptation of the compare() function for LEDA 4.4 (namespace leda) 00021 00022 Revision 1.1 2002/08/29 12:59:58 taeubig 00023 Added the sources 00024 00025 Revision 1.10 2000/05/24 13:26:59 taeubig 00026 New compiler (gcc-2.95) and new Qt (2.1) 00027 Replaced "list" by "leda_list" etc. 00028 00029 Revision 1.9 2000/01/11 17:26:11 zoidl 00030 added javadoc comments 00031 00032 Revision 1.8 1999/11/19 16:10:51 hall 00033 changed SObserver::update( SEvent & ) to ...( const SEvent & ) 00034 00035 Revision 1.7 1999/11/19 14:54:48 hall 00036 a nice destructor added to SObserver 00037 00038 Revision 1.6 1999/08/05 08:47:51 schickin 00039 purpose of important classes noted in the header-files 00040 00041 Revision 1.5 1999/04/27 13:38:53 schickin 00042 well folks, that's the first demo version that really runs 8-) 00043 00044 Revision 1.4 1999/02/10 15:53:30 hall 00045 TypeInfo, Observer works 00046 00047 Revision 1.3 1999/02/10 10:50:43 schickin 00048 main loop for simulation added 00049 00050 Revision 1.2 1999/01/29 10:03:29 schickin 00051 Project-Headers added. 00052 00053 00054 * #end# ************************************************************* */ 00055 00056 #ifndef SOBSERVER_H 00057 #define SOBSERVER_H 00058 00059 // system header files 00060 #include <LEDA/list.h> 00061 00062 // project header files 00063 #include "SEvent.h" 00064 00065 class SObservable; 00066 00074 // ----------------------------------------------------------------------- 00075 class SObserver { 00076 friend class SObservable; 00077 public: 00080 SObserver() {}; 00081 00084 SObserver(const SObserver& rObs); 00085 00088 virtual ~SObserver(); 00089 00097 virtual void update(const SEvent& event) = 0; 00098 00099 private: 00100 leda_list<SObservable *> _observables; 00101 00102 /* only for the SObservable-class */ 00103 void addObservable(SObservable &obs); 00104 void deleteObservable(SObservable &obs); 00105 }; 00106 // ----------------------------------------------------------------------- 00107 00108 // ----------------------------------------------------------------------- 00109 inline 00110 SObserver::SObserver(const SObserver& rObs) 00111 {} 00112 // ----------------------------------------------------------------------- 00113 inline 00114 void SObserver::addObservable(SObservable &obs) { 00115 _observables.append(&obs); 00116 } 00117 // ----------------------------------------------------------------------- 00118 00119 // ----------------------------------------------------------------------- 00120 #if __LEDA__ >= 440 00121 namespace leda { 00122 #endif 00123 inline 00124 int compare(SObserver *const & obs1, SObserver *const & obs2) { 00125 if( obs1 < obs2 ) 00126 return -1; 00127 else if( obs1 > obs2 ) 00128 return 1; 00129 else 00130 return 0; 00131 } 00132 #if __LEDA__ >= 440 00133 } 00134 #endif 00135 // ----------------------------------------------------------------------- 00136 00137 #endif //SOBSERVER_H