00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034 #ifndef __CNEventBaseSched_h
00035 #define __CNEventBaseSched_h
00036 #include <CNCL/Object.h>
00037 #include <CNCL/Event.h>
00038 #include <CNCL/EventHandler.h>
00039 #include <CNCL/Statistics.h>
00040
00041
00042 extern CNClassDesc CN_EVENTBASESCHED;
00043
00044 class CNEventIterator;
00045
00046
00050 class CNEventBaseSched : public CNObject
00051 {
00052 public:
00054 CNEventBaseSched() : simtime(0), stop_flag(FALSE), stat(NIL) {}
00056 CNEventBaseSched(CNParam *) : simtime(0), stop_flag(FALSE), stat(NIL) {}
00057
00058 public:
00060 virtual void send_event(CNEvent *ev) = 0;
00062 virtual void add_event(CNEvent *ev) = 0;
00066 virtual void delete_event(CNEventID id, bool with_obj=FALSE) = 0;
00067
00070 virtual void delete_events(CNEventHandler*, bool to=TRUE,
00071 bool with_obj = FALSE) = 0;
00074 void delete_events_from(CNEventHandler *h, bool with_obj = FALSE);
00077 void delete_events_to(CNEventHandler *h, bool with_obj = FALSE);
00078
00081 virtual CNEvent *peek_event() = 0;
00084 virtual CNEvent *peek_event(CNEventID id) = 0;
00086 virtual CNEvent *next_event() = 0;
00087
00089 virtual void start();
00091 virtual void start(CNEvent *ev);
00092
00096 virtual void stop(bool with_obj = FALSE) = 0;
00098 virtual bool stopped() {return stop_flag;}
00099
00102 virtual void reset(bool with_obj = FALSE);
00103
00105 virtual CNEventIterator *create_iterator() = 0;
00107 CNSimTime time() { return simtime; }
00108
00110 CNStatistics *statistics() const { return stat; };
00112 void statistics(CNStatistics *st) { stat = st; };
00113
00115 virtual void process_event();
00117 virtual void process_events();
00119 virtual void process_now();
00120
00121
00122 protected:
00124 CNSimTime simtime;
00126 bool stop_flag;
00128 CNStatistics *stat;
00129
00130
00131 public:
00132 virtual CNClassDesc class_desc() const
00133 { return CN_EVENTBASESCHED; }
00134
00136 virtual bool is_a(CNClassDesc desc) const
00137 { return desc == CN_EVENTBASESCHED ? TRUE : CNObject::is_a(desc); }
00138
00140 static CNEventBaseSched *cast_from_object(CNObject *obj)
00141 {
00142 # ifdef NO_TYPE_CHECK
00143 return (CNEventBaseSched *)obj;
00144 # else
00145 return (CNEventBaseSched *)( !obj || obj->is_a(CN_EVENTBASESCHED)
00146 ? obj : fatal_type(obj->class_desc(), CN_EVENTBASESCHED) );
00147 # endif
00148 }
00149
00151 virtual void print(ostream &strm = cout) const = 0;
00153 virtual void dump (ostream &strm = cout) const = 0;
00154 };
00155
00156 #endif
00158 // {{{ Emacs Local Variables
00159
00160
00161
00162
00163
00164
00165
00166
00167
00168
00169