00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef _CLOCK_H
00011 #define _CLOCK_H
00012
00025 class Clock
00026 {
00027 friend void testClock();
00028 public:
00029 Clock();
00030 ~Clock();
00031
00033
00035 void setDt( double v );
00036 double getDt() const;
00037 double getRunTime() const;
00038 double getCurrentTime() const;
00039 unsigned long getNsteps( ) const;
00040 unsigned long getCurrentStep() const;
00041 unsigned int getStride( ) const;
00042
00043 void setTickStep( unsigned int i, unsigned int v );
00044 unsigned int getTickStep( unsigned int i ) const;
00045 void setTickDt( unsigned int i, double v );
00046 double getTickDt( unsigned int i ) const;
00047 unsigned int getDefaultTick( string className ) const;
00048
00049 vector< double > getDts() const;
00050
00052
00054
00058 void stop();
00059
00061 void handleStart( const Eref& e, double runtime );
00062
00064 void handleStep( const Eref& e, unsigned long steps );
00065
00067 void handleReinit( const Eref& e );
00068
00070
00072
00073 void process();
00074
00075
00077 unsigned int getNumTicks() const;
00078
00082 bool isRunning() const;
00086 bool isDoingReinit() const;
00087
00091 static void reportClock();
00092 void innerReportClock() const;
00093
00094
00095 static const Cinfo* initCinfo();
00096
00098 bool checkTickNum( const string& funcName, unsigned int i ) const;
00099
00106 static unsigned int lookupDefaultTick( const string& className );
00107
00109 static void buildDefaultTick();
00110
00111
00112
00113
00114
00115
00116
00117
00121 static const unsigned int numTicks;
00122
00123 private:
00124 void buildTicks( const Eref& e );
00125 double runTime_;
00126 double currentTime_;
00127 unsigned long nSteps_;
00128 unsigned long currentStep_;
00129 unsigned int stride_;
00130 double dt_;
00131
00135 bool isRunning_;
00136
00140 bool doingReinit_;
00141
00145 ProcInfo info_;
00146
00152 vector< unsigned int > ticks_;
00153
00158 vector< unsigned int > activeTicks_;
00163 vector< unsigned int > activeTicksMap_;
00164
00169 static map< string, unsigned int > defaultTick_;
00170
00171 static vector< double > defaultDt_;
00172
00173 };
00174
00175 #endif // _CLOCK_H