00001 00002 #ifndef SIM_TIME_H 00003 #define SIM_TIME_H 00004 00005 #include <iostream> 00006 using namespace std; 00007 00008 #include <boost/shared_ptr.hpp> 00009 00013 class SimTime { 00014 public: 00015 00020 SimTime(); 00026 SimTime(double simTime); 00027 00032 inline void setTimeInMicroSeconds(double timeInMicroSeconds); 00033 00038 inline void setTimeInMilliSeconds(double timeInMilliSeconds); 00039 00044 inline void setTimeInSeconds(double timeInSeconds); 00045 00051 inline void setTimeInMinutes(double timeInMinutes); 00052 00058 inline double getTimeInMicroSeconds() const; 00059 00065 inline double getTimeInMilliSeconds() const; 00066 00071 inline double getTimeInSeconds() const; 00072 00077 inline double getTimeInMinutes() const; 00078 00083 inline void setTime(double timeInSeconds); 00084 00089 inline double getTime() const; 00090 00096 inline bool isValid() const; 00097 00099 00100 inline SimTime& operator+= (const SimTime& rhs); 00101 inline SimTime& operator-= (const SimTime& rhs); 00102 inline bool operator< (const SimTime& rhs) const; 00103 inline bool operator<= (const SimTime& rhs) const; 00104 inline bool operator> (const SimTime& rhs) const; 00105 inline bool operator>= (const SimTime& rhs) const; 00107 00108 private: 00109 double m_time; 00110 }; 00111 typedef boost::shared_ptr<SimTime> SimTimePtr; 00112 00114 // Inline Functions 00116 00117 inline void SimTime::setTimeInMicroSeconds(double timeInMicroSeconds) 00118 { 00119 assert(timeInMicroSeconds >= 0.0); 00120 m_time = (timeInMicroSeconds / 1000000.0); 00121 } 00122 00123 inline void SimTime::setTimeInMilliSeconds(double timeInMilliSeconds) 00124 { 00125 assert(timeInMilliSeconds >= 0.0); 00126 m_time = (timeInMilliSeconds / 1000.0); 00127 } 00128 00129 inline void SimTime::setTimeInSeconds(double timeInSeconds) 00130 { 00131 assert(timeInSeconds >= 0.0); 00132 m_time = timeInSeconds; 00133 } 00134 00135 inline void SimTime::setTimeInMinutes(double timeInMinutes) 00136 { 00137 assert(timeInMinutes >= 0.0); 00138 m_time = (60.0 * timeInMinutes); 00139 } 00140 00141 inline double SimTime::getTimeInMicroSeconds() const 00142 { 00143 return (1000000.0 * m_time); 00144 } 00145 00146 inline double SimTime::getTimeInMilliSeconds() const 00147 { 00148 return (1000.0 * m_time); 00149 } 00150 00151 inline double SimTime::getTimeInSeconds() const 00152 { 00153 return m_time; 00154 } 00155 00156 inline double SimTime::getTimeInMinutes() const 00157 { 00158 return (m_time / 60.0); 00159 } 00160 00161 inline void SimTime::setTime(double timeInSeconds) 00162 { 00163 setTimeInSeconds(timeInSeconds); 00164 } 00165 00166 inline double SimTime::getTime() const 00167 { 00168 return getTimeInSeconds(); 00169 } 00170 00171 inline bool SimTime::isValid() const 00172 { 00173 // Right now, our only requirement is that 00174 // the time is not negative. 00175 return (m_time >= 0.0); 00176 } 00177 00179 // Overloaded Operators 00181 00182 inline SimTime& SimTime::operator+= (const SimTime& rhs) 00183 { 00184 m_time += rhs.m_time; 00185 return *this; 00186 } 00187 00188 inline SimTime& SimTime::operator-= (const SimTime& rhs) 00189 { 00190 m_time -= rhs.m_time; 00191 return *this; 00192 } 00193 00194 inline bool SimTime::operator< (const SimTime& rhs) const 00195 { 00196 return m_time < rhs.m_time; 00197 } 00198 00199 inline bool SimTime::operator<= (const SimTime& rhs) const 00200 { 00201 return m_time <= rhs.m_time; 00202 } 00203 00204 inline bool SimTime::operator> (const SimTime& rhs) const 00205 { 00206 return m_time > rhs.m_time; 00207 } 00208 00209 inline bool SimTime::operator>= (const SimTime& rhs) const 00210 { 00211 return m_time >= rhs.m_time; 00212 } 00213 00214 // Note that this can't be included in the class definition, so we 00215 // define it here so that files that include sim_time.hpp can 00216 // use it. 00217 inline SimTime operator+ (const SimTime& lhs, const SimTime& rhs) 00218 { 00219 SimTime returnVal = lhs; 00220 return returnVal += rhs; 00221 } 00222 00223 inline SimTime operator- (const SimTime& lhs, const SimTime& rhs) 00224 { 00225 SimTime returnVal = lhs; 00226 return returnVal -= rhs; 00227 } 00228 00229 inline ostream& operator<< (ostream& s, const SimTime& st) 00230 { 00231 return s<< st.getTimeInSeconds(); 00232 } 00233 00234 #endif // SIM_TIME_H 00235