00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00025 #ifndef VCSN_MISC_TIMER_INTERNAL_GATHERING_HXX
00026 # define VCSN_MISC_TIMER_INTERNAL_GATHERING_HXX
00027
00028 # include <iostream>
00029 # include <iomanip>
00030
00031 # ifdef VAUCANSON
00032 # include <vaucanson/misc/timer_internal_gathering.hh>
00033 # else
00034 # include "timer_internal_gathering.hh"
00035 # endif
00036
00037 NAMESPACE_VCSN_BEGIN
00038
00039 namespace misc
00040 {
00041 namespace timer
00042 {
00043
00044
00045
00046
00047 inline
00048 TimeVal::TimeVal ()
00049 : tv_sec (0),
00050 tv_usec (0)
00051 {
00052 }
00053
00054 inline
00055 TimeVal::TimeVal (int i)
00056 : tv_sec (i),
00057 tv_usec (0)
00058 {
00059 }
00060
00061 inline
00062 TimeVal::TimeVal (double d)
00063 : tv_sec (long (d)),
00064 tv_usec (long (d * 1000000) % 1000000)
00065 {
00066 }
00067
00068
00069 inline
00070 TimeVal::TimeVal (const TimeVal& tv)
00071 : tv_sec (tv.tv_sec),
00072 tv_usec (tv.tv_usec)
00073 {
00074 }
00075
00076 inline
00077 TimeVal::TimeVal (const timeval& tv)
00078 : tv_sec (tv.tv_sec),
00079 tv_usec (tv.tv_usec)
00080 {
00081 }
00082
00083 inline
00084 TimeVal
00085 TimeVal::operator+ (const TimeVal& tv) const
00086 {
00087 TimeVal res;
00088 res.tv_sec = tv.tv_sec + tv_sec;
00089 res.tv_usec = tv.tv_usec + tv_usec;
00090 res.tv_sec += res.tv_usec / 1000000;
00091 res.tv_usec = res.tv_usec % 1000000;
00092 return res;
00093 }
00094
00095 inline
00096 TimeVal
00097 TimeVal::operator- (const TimeVal& tv) const
00098 {
00099 TimeVal res (*this);
00100 res.tv_sec -= tv.tv_sec;
00101 res.tv_usec -= tv.tv_usec;
00102 res.tv_sec += res.tv_usec / 1000000;
00103 res.tv_usec = res.tv_usec % 1000000;
00104 return res;
00105 }
00106
00107 inline
00108 TimeVal&
00109 TimeVal::operator+= (const TimeVal& tv)
00110 {
00111 tv_sec += tv.tv_sec;
00112 tv_usec += tv.tv_usec;
00113 tv_sec += tv_usec / 1000000;
00114 tv_usec = tv_usec % 1000000;
00115 return *this;
00116 }
00117
00118 inline
00119 TimeVal&
00120 TimeVal::operator-= (const TimeVal& tv)
00121 {
00122 tv_sec -= tv.tv_sec;
00123 tv_usec -= tv.tv_usec;
00124 tv_sec += tv_usec / 1000000;
00125 tv_usec = tv_usec % 1000000;
00126 return *this;
00127 }
00128
00129 inline
00130 TimeVal&
00131 TimeVal::operator= (const TimeVal& tv)
00132 {
00133 if (this == &tv)
00134 return *this;
00135 tv_sec = tv.tv_sec;
00136 tv_usec = tv.tv_usec;
00137 return *this;
00138 }
00139
00140 inline
00141 TimeVal&
00142 TimeVal::operator/= (double d)
00143 {
00144 double t;
00145
00146 t = tv_sec / d;
00147 tv_sec = long (t);
00148 tv_usec = long (tv_usec / d + (t - tv_sec) * 1000000);
00149 tv_sec += tv_usec / 1000000;
00150 tv_usec = tv_usec % 1000000;
00151 return *this;
00152 }
00153
00154 inline
00155 TimeVal
00156 TimeVal::operator/ (double d) const
00157 {
00158 TimeVal res;
00159 double t;
00160
00161 t = tv_sec / d;
00162 res.tv_sec = long (t);
00163 res.tv_usec = long (tv_usec / d + (t - res.tv_sec) * 1000000);
00164 return res;
00165 }
00166
00167 inline
00168 bool
00169 TimeVal::operator< (const TimeVal& tv) const
00170 {
00171 return (tv_sec == tv.tv_sec ?
00172 tv_usec < tv.tv_usec :
00173 tv_sec < tv.tv_sec);
00174 }
00175
00176 inline
00177 bool
00178 TimeVal::operator> (const TimeVal& tv) const
00179 {
00180 return (tv_sec == tv.tv_sec ?
00181 tv_usec > tv.tv_usec :
00182 tv_sec > tv.tv_sec);
00183 }
00184
00185 inline
00186 bool
00187 TimeVal::operator== (const TimeVal& tv) const
00188 {
00189 return (tv_sec == tv.tv_sec && tv_usec == tv.tv_usec);
00190 }
00191
00192
00193 inline
00194 void
00195 TimeVal::clear ()
00196 {
00197 tv_sec = 0;
00198 tv_usec = 0;
00199 }
00200
00201 inline
00202 void
00203 TimeVal::set (const timeval& tv)
00204 {
00205 tv_sec = tv.tv_sec;
00206 tv_usec = tv.tv_usec;
00207 }
00208
00209 inline
00210 double
00211 TimeVal::us () const
00212 {
00213 return tv_usec + 1000000 * tv_sec;
00214 }
00215
00216 inline
00217 double
00218 TimeVal::ms () const
00219 {
00220 return double (tv_usec) / 1000 + 1000 * tv_sec;
00221 }
00222
00223 inline
00224 double
00225 TimeVal::s () const
00226 {
00227 return double (tv_usec) / 1000000 + tv_sec;
00228 }
00229
00230 inline
00231 double
00232 TimeVal::m () const
00233 {
00234 return (double (tv_usec) / 1000000 + double (tv_sec)) / 60;
00235 }
00236
00237 inline
00238 double
00239 TimeVal::h () const
00240 {
00241 return (double (tv_usec) / 1000000 + double (tv_sec)) / 3600;
00242 }
00243
00244
00245
00246
00247
00248
00249 inline
00250 std::ostream&
00251 operator<< (std::ostream& o,
00252 const TimeVal& tv)
00253 {
00254 return tv.print (o);
00255 }
00256
00257 inline
00258 std::ostream& print_time (std::ostream& o,
00259 timer::TimeVal& time,
00260 time_unit u)
00261 {
00262 return time.print (o, u);
00263 }
00264
00265
00266
00267
00268
00269 inline
00270 TimeStamp::TimeStamp ()
00271 {
00272 }
00273
00274 inline
00275 std::ostream&
00276 TimeStamp::print (std::ostream& o) const
00277 {
00278 return o << '(' << user_ << ", " << sys_ << ')';
00279 }
00280
00281 inline
00282 bool
00283 TimeStamp::operator< (const TimeStamp& rhs) const
00284 {
00285 return user_ + sys_ < rhs.user_ + rhs.sys_;
00286 }
00287
00288
00289
00290
00291
00292 inline
00293 Task::Task ()
00294 {
00295 }
00296
00297 inline
00298 Task::Task (const std::string& name,
00299 unsigned int id)
00300 : name_ (name),
00301 id_ (id)
00302 {
00303 }
00304
00305 inline
00306 Task::~Task ()
00307 {
00308 }
00309
00310 inline
00311 Call&
00312 Task::call(unsigned int called)
00313 {
00314 return calls_[called];
00315 }
00316
00317
00318
00319
00320
00321 inline
00322 StackedCall::StackedCall ()
00323 {
00324 total_.set_to_now ();
00325 children_.clear ();
00326 }
00327
00328 inline
00329 StackedCall::StackedCall (unsigned int called)
00330 {
00331 called_ = called;
00332 total_.set_to_now ();
00333 children_.clear ();
00334 }
00335 }
00336 }
00337
00338 NAMESPACE_VCSN_END
00339
00340 #endif