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 INLINE
00027 CTime::CTime()
00028 {
00029 #ifdef WIN32
00030 _ftime(&FTime);
00031 #else
00032 gettimeofday(&FTime, NULL);
00033 #endif
00034 }
00035
00036
00037 #ifdef WIN32
00038
00039 INLINE
00040 CTime::CTime(long ASec, long AMilliSec)
00041 {
00042 FTime.time = ASec;
00043 FTime.millitm = AMilliSec;
00044 }
00045
00046
00047
00048 INLINE
00049 void CTime::setTime(long ASec, long AMilliSec)
00050 {
00051 FTime.time = ASec;
00052 FTime.millitm = AMilliSec;
00053 }
00054
00055
00056
00057 INLINE
00058 void CTime::getTime(long * ASec, long * AMilliSec) const
00059 {
00060 *ASec = FTime.time;
00061 *AMilliSec = FTime.millitm;
00062 }
00063
00064
00065 #else // WIN32
00066
00067 INLINE
00068 CTime::CTime(long ASec, long AMicroSec)
00069 {
00070 FTime.tv_sec = ASec;
00071 FTime.tv_usec = AMicroSec;
00072 }
00073
00074
00075
00076 INLINE
00077 void CTime::setTime(long ASec, long AMicroSec)
00078 {
00079 FTime.tv_sec = ASec;
00080 FTime.tv_usec = AMicroSec;
00081 }
00082
00083
00084
00085 INLINE
00086 void CTime::getTime(long * ASec, long * AMicroSec) const
00087 {
00088 *ASec = FTime.tv_sec;
00089 *AMicroSec = FTime.tv_usec;
00090 }
00091
00092 #endif // WIN32
00093
00094
00095 INLINE
00096 void CTime::updateTime()
00097 {
00098 #ifdef WIN32
00099 _ftime(&FTime);
00100 #else
00101 gettimeofday(&FTime, NULL);
00102 #endif
00103 }
00104
00105
00106
00107 INLINE
00108 void CTime::displayTime(std::ostream & AStream, bool ADisplayAll) const
00109 {
00110 #ifdef WIN32
00111 time_t tmp = FTime.time;
00112 #else
00113 time_t tmp = FTime.tv_sec;
00114 #endif
00115 struct tm * t = gmtime(&tmp);
00116 bool display = false;
00117
00118 long msec, usec;
00119
00120 #ifdef WIN32
00121 msec = FTime.millitm;
00122 usec = 0;
00123 #else
00124 msec = FTime.tv_usec / 1000;
00125 usec = FTime.tv_usec % 1000;
00126 #endif
00127
00128 if (t->tm_hour > 0) {
00129 AStream << t->tm_hour << " h ";
00130 display = ADisplayAll;
00131 }
00132 if (t->tm_min > 0 || display) {
00133 AStream << t->tm_min << " m ";
00134 display = ADisplayAll;
00135 }
00136 if (t->tm_sec > 0 || display) {
00137 AStream << t->tm_sec << " s ";
00138 display = ADisplayAll;
00139 }
00140 if (msec > 0 || display) {
00141 AStream << msec << " ms ";
00142 display = ADisplayAll;
00143 }
00144
00145 #ifndef WIN32
00146 if (usec > 0 || display)
00147 AStream << usec << " µs";
00148 #endif
00149 }
00150
00151
00152
00153 INLINE
00154 CTime CTime::operator + (const CTime & ATime) const
00155 {
00156 CTime t;
00157
00158 #ifdef WIN32
00159 t.FTime.time = this->FTime.time + ATime.FTime.time;
00160 t.FTime.millitm = this->FTime.millitm + ATime.FTime.millitm;
00161
00162 if (t.FTime.millitm > 1000) {
00163 t.FTime.millitm -= 1000;
00164 t.FTime.time += 1;
00165 }
00166 #else
00167 t.FTime.tv_sec = this->FTime.tv_sec + ATime.FTime.tv_sec;
00168 t.FTime.tv_usec = this->FTime.tv_usec + ATime.FTime.tv_usec;
00169
00170 if (t.FTime.tv_usec > 1000000) {
00171 t.FTime.tv_usec -= 1000000;
00172 t.FTime.tv_sec += 1;
00173 }
00174 #endif
00175
00176 return t;
00177 }
00178
00179
00180
00181 INLINE
00182 CTime CTime::operator - (const CTime & ATime) const
00183 {
00184 CTime t;
00185
00186 #ifdef WIN32
00187 t.FTime.time = this->FTime.time - ATime.FTime.time;
00188
00189 if (ATime.FTime.millitm <= this->FTime.millitm)
00190 t.FTime.millitm = this->FTime.millitm - ATime.FTime.millitm;
00191 else {
00192 t.FTime.millitm = (this->FTime.millitm + 1000) - ATime.FTime.millitm;
00193 t.FTime.time -= 1;
00194 }
00195 #else
00196 t.FTime.tv_sec = this->FTime.tv_sec - ATime.FTime.tv_sec;
00197
00198 if (ATime.FTime.tv_usec <= this->FTime.tv_usec)
00199 t.FTime.tv_usec = this->FTime.tv_usec - ATime.FTime.tv_usec;
00200 else {
00201 t.FTime.tv_usec = (this->FTime.tv_usec + 1000000) - ATime.FTime.tv_usec;
00202 t.FTime.tv_sec -= 1;
00203 }
00204 #endif
00205
00206 return t;
00207 }
00208
00209
00210
00211 INLINE
00212 const CTime & CTime::operator += (const CTime & ATime)
00213 {
00214 #ifdef WIN32
00215 FTime.time += ATime.FTime.time;
00216 FTime.millitm += ATime.FTime.millitm;
00217
00218 if (FTime.millitm > 1000) {
00219 FTime.millitm -= 1000;
00220 FTime.time += 1;
00221 }
00222 #else
00223 FTime.tv_sec += ATime.FTime.tv_sec;
00224 FTime.tv_usec += ATime.FTime.tv_usec;
00225
00226 if (FTime.tv_usec > 1000000) {
00227 FTime.tv_usec -= 1000000;
00228 FTime.tv_sec += 1;
00229 }
00230 #endif
00231
00232 return *this;
00233 }
00234
00235
00236
00237 INLINE
00238 const CTime & CTime::operator -= (const CTime & ATime)
00239 {
00240 #ifdef WIN32
00241 FTime.time -= ATime.FTime.time;
00242
00243 if (ATime.FTime.millitm > FTime.millitm) {
00244 FTime.millitm = (FTime.millitm + 1000) - ATime.FTime.millitm;
00245 FTime.time -= 1;
00246 }
00247 else
00248 FTime.millitm -= ATime.FTime.millitm;
00249 #else
00250 FTime.tv_sec -= ATime.FTime.tv_sec;
00251
00252 if (ATime.FTime.tv_usec > FTime.tv_usec) {
00253 FTime.tv_usec = (FTime.tv_usec + 1000000) - ATime.FTime.tv_usec;
00254 FTime.tv_sec -= 1;
00255 }
00256 else
00257 FTime.tv_usec -= ATime.FTime.tv_usec;
00258 #endif
00259
00260 return *this;
00261 }
00262
00263