marci@73: // -*- c++ -*- marci@73: #ifndef TIME_MEASURE_H marci@73: #define TIME_MEASURE_H marci@73: marci@73: #include alpar@117: #include alpar@117: #include alpar@117: #include jacint@121: #include marci@73: marci@73: double currTime() { marci@73: timeval tv; marci@73: //timezone tz; marci@73: gettimeofday(&tv, 0); marci@73: return double(tv.tv_sec)+double(tv.tv_usec)/1000000.0; marci@73: } marci@73: alpar@117: class TimeStamp alpar@117: { alpar@117: tms ts; alpar@118: double real_time; alpar@118: alpar@117: public: alpar@117: alpar@117: tms &getTms() {return ts;} alpar@117: const tms &getTms() const {return ts;} alpar@118: double getRealTime() const {return real_time;} alpar@118: void stamp() alpar@118: { alpar@118: timeval tv; alpar@118: times(&ts); alpar@118: gettimeofday(&tv, 0);real_time=tv.tv_sec+double(tv.tv_usec)/1e6; alpar@118: } alpar@118: alpar@118: TimeStamp() alpar@118: { ts.tms_utime=ts.tms_stime=ts.tms_cutime=ts.tms_cstime=0; real_time=0;} alpar@118: alpar@117: TimeStamp(void *) { stamp();} alpar@117: alpar@117: TimeStamp &operator+=(const TimeStamp &b) alpar@117: { alpar@117: ts.tms_utime+=b.ts.tms_utime; alpar@117: ts.tms_stime+=b.ts.tms_stime; alpar@117: ts.tms_cutime+=b.ts.tms_cutime; alpar@117: ts.tms_cstime+=b.ts.tms_cstime; alpar@118: real_time+=b.real_time; alpar@117: return *this; alpar@117: } alpar@117: TimeStamp operator+(const TimeStamp &b) const alpar@117: { alpar@117: TimeStamp t(*this); alpar@117: return t+=b; alpar@117: } alpar@117: TimeStamp &operator-=(const TimeStamp &b) alpar@117: { alpar@117: ts.tms_utime-=b.ts.tms_utime; alpar@117: ts.tms_stime-=b.ts.tms_stime; alpar@117: ts.tms_cutime-=b.ts.tms_cutime; alpar@117: ts.tms_cstime-=b.ts.tms_cstime; alpar@118: real_time-=b.real_time; alpar@117: return *this; alpar@117: } alpar@117: TimeStamp operator-(const TimeStamp &b) const alpar@117: { alpar@117: TimeStamp t(*this); alpar@117: return t-=b; alpar@117: } alpar@117: alpar@117: TimeStamp Ellapsed() const alpar@117: { alpar@117: TimeStamp t(NULL); alpar@117: return t-*this; alpar@117: } alpar@117: alpar@117: friend std::ostream& operator<<(std::ostream& os,const TimeStamp &t); alpar@117: alpar@118: double getUserTime() const alpar@118: { alpar@118: long cls = sysconf(_SC_CLK_TCK); alpar@118: return double(ts.tms_utime)/cls; alpar@118: } alpar@118: double getSystemTime() const alpar@118: { alpar@118: long cls = sysconf(_SC_CLK_TCK); alpar@118: return double(ts.tms_stime)/cls; alpar@118: } alpar@118: double getCUserTime() const alpar@118: { alpar@118: long cls = sysconf(_SC_CLK_TCK); alpar@118: return double(ts.tms_cutime)/cls; alpar@118: } alpar@118: double getCSystemTime() const alpar@118: { alpar@118: long cls = sysconf(_SC_CLK_TCK); alpar@118: return double(ts.tms_cstime)/cls; alpar@118: } alpar@117: }; alpar@117: alpar@117: class Timer alpar@117: { alpar@117: TimeStamp start_time; alpar@117: alpar@117: public: alpar@117: void reset() {start_time.stamp();} alpar@117: Timer() {reset();} alpar@117: alpar@117: operator TimeStamp () alpar@117: { alpar@117: TimeStamp t; alpar@117: t.stamp(); alpar@117: return t-start_time; alpar@117: } alpar@117: }; alpar@117: alpar@117: inline std::ostream& operator<<(std::ostream& os,const TimeStamp &t) alpar@117: { alpar@117: long cls = sysconf(_SC_CLK_TCK); alpar@118: os << "u: " << double(t.getTms().tms_utime)/cls << alpar@117: "s, s: " << double(t.getTms().tms_stime)/cls << alpar@117: "s, cu: " << double(t.getTms().tms_cutime)/cls << alpar@118: "s, cs: " << double(t.getTms().tms_cstime)/cls << alpar@118: "s, real: " << t.getRealTime() << "s"; alpar@117: return os; alpar@117: } alpar@117: marci@73: #endif //TIME_MEASURE_H