COIN-OR::LEMON - Graph Library

source: lemon-0.x/src/work/marci/time_measure.h @ 121:9d5a99b282c0

Last change on this file since 121:9d5a99b282c0 was 121:9d5a99b282c0, checked in by jacint, 17 years ago

include unistd

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    long cls = sysconf(_SC_CLK_TCK);
80    return double(ts.tms_utime)/cls;
81  }
82  double getSystemTime() const
83  {
84    long cls = sysconf(_SC_CLK_TCK);
85    return double(ts.tms_stime)/cls;
86  }
87  double getCUserTime() const
88  {
89    long cls = sysconf(_SC_CLK_TCK);
90    return double(ts.tms_cutime)/cls;
91  }
92  double getCSystemTime() const
93  {
94    long cls = sysconf(_SC_CLK_TCK);
95    return double(ts.tms_cstime)/cls;
96  }
97};
98
99class Timer
100{
101  TimeStamp start_time;
102
103public:
104  void reset() {start_time.stamp();}
105  Timer() {reset();}
106
107  operator TimeStamp ()
108  {
109    TimeStamp t;
110    t.stamp();
111    return t-start_time;
112  } 
113};
114
115inline std::ostream& operator<<(std::ostream& os,const TimeStamp &t)
116{
117  long cls = sysconf(_SC_CLK_TCK);
118  os << "u: " << double(t.getTms().tms_utime)/cls <<
119    "s, s: " << double(t.getTms().tms_stime)/cls <<
120    "s, cu: " << double(t.getTms().tms_cutime)/cls <<
121    "s, cs: " << double(t.getTms().tms_cstime)/cls <<
122    "s, real: " << t.getRealTime() << "s";
123  return os;
124}
125
126#endif //TIME_MEASURE_H
Note: See TracBrowser for help on using the repository browser.