COIN-OR::LEMON - Graph Library

source: lemon-0.x/src/work/marci/time_measure.h @ 124:8d24100ad408

Last change on this file since 124:8d24100ad408 was 124:8d24100ad408, checked in by Alpar Juttner, 16 years ago

.

File size: 2.6 KB
Line 
1// -*- c++ -*-
2#ifndef TIME_MEASURE_H
3#define TIME_MEASURE_H
4
5#include <sys/time.h>
6#include <sys/times.h>
7#include <fstream>
8#include <iostream>
9#include <unistd.h>
10
11double currTime() {
12  timeval tv;
13  //timezone tz;
14  gettimeofday(&tv, 0);
15  return double(tv.tv_sec)+double(tv.tv_usec)/1000000.0;
16}
17
18class TimeStamp
19{
20  tms ts;
21  double real_time;
22 
23public:
24
25  tms &getTms() {return ts;}
26  const tms &getTms() const {return ts;}
27  double getRealTime() const {return real_time;}
28  void stamp()
29  {
30    timeval tv;
31    times(&ts);
32    gettimeofday(&tv, 0);real_time=tv.tv_sec+double(tv.tv_usec)/1e6;
33  }
34 
35  TimeStamp()
36  { ts.tms_utime=ts.tms_stime=ts.tms_cutime=ts.tms_cstime=0; real_time=0;}
37 
38  TimeStamp(void *) { stamp();}
39 
40  TimeStamp &operator+=(const TimeStamp &b)
41  {
42    ts.tms_utime+=b.ts.tms_utime;
43    ts.tms_stime+=b.ts.tms_stime;
44    ts.tms_cutime+=b.ts.tms_cutime;
45    ts.tms_cstime+=b.ts.tms_cstime;
46    real_time+=b.real_time;
47    return *this;
48  }
49  TimeStamp operator+(const TimeStamp &b) const
50  {
51    TimeStamp t(*this);
52    return t+=b;
53  }
54  TimeStamp &operator-=(const TimeStamp &b)
55  {
56    ts.tms_utime-=b.ts.tms_utime;
57    ts.tms_stime-=b.ts.tms_stime;
58    ts.tms_cutime-=b.ts.tms_cutime;
59    ts.tms_cstime-=b.ts.tms_cstime;
60    real_time-=b.real_time;
61    return *this;
62  }
63  TimeStamp operator-(const TimeStamp &b) const
64  {
65    TimeStamp t(*this);
66    return t-=b;
67  }
68
69  TimeStamp Ellapsed() const
70  {
71    TimeStamp t(NULL);
72    return t-*this;
73  }
74 
75  friend std::ostream& operator<<(std::ostream& os,const TimeStamp &t);
76 
77  double getUserTime() const
78  {
79    return double(ts.tms_utime)/sysconf(_SC_CLK_TCK);
80  }
81  double getSystemTime() const
82  {
83    return double(ts.tms_stime)/sysconf(_SC_CLK_TCK);
84  }
85  double getCUserTime() const
86  {
87    return double(ts.tms_cutime)/sysconf(_SC_CLK_TCK);
88  }
89  double getCSystemTime() const
90  {
91    return double(ts.tms_cstime)/sysconf(_SC_CLK_TCK);
92  }
93};
94
95class Timer
96{
97  TimeStamp start_time;
98
99  void _reset() {start_time.stamp();}
100
101public:
102  Timer() {_reset();}
103
104  operator TimeStamp ()
105  {
106    TimeStamp t;
107    t.stamp();
108    return t-start_time;
109  }
110 
111  TimeStamp reset()
112  {
113    TimeStamp t(start_time);
114    _reset();
115    return start_time-t;
116  }
117
118};
119
120inline std::ostream& operator<<(std::ostream& os,const TimeStamp &t)
121{
122  long cls = sysconf(_SC_CLK_TCK);
123  os << "u: " << double(t.getTms().tms_utime)/cls <<
124    "s, s: " << double(t.getTms().tms_stime)/cls <<
125    "s, cu: " << double(t.getTms().tms_cutime)/cls <<
126    "s, cs: " << double(t.getTms().tms_cstime)/cls <<
127    "s, real: " << t.getRealTime() << "s";
128  return os;
129}
130
131#endif //TIME_MEASURE_H
Note: See TracBrowser for help on using the repository browser.