00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00035
00036 #ifndef QOLYESTER_UTL_TIMEVAL_HH
00037 # define QOLYESTER_UTL_TIMEVAL_HH 1
00038
00039 # include <sys/time.h>
00040 # include <cassert>
00041 # include <ostream>
00042
00043 namespace olsr {
00044
00045 namespace utl {
00046
00053 class TimeVal {
00054 typedef TimeVal This;
00055 public:
00062 inline
00063 TimeVal(unsigned sec, unsigned usec);
00064
00068 inline
00069 TimeVal(const This& rhs);
00070
00074 inline
00075 TimeVal(const ::timeval& rhs);
00076
00080 inline
00081 TimeVal(const unsigned period);
00082
00087 inline
00088 TimeVal(const int period);
00089
00093 inline
00094 TimeVal(const double seconds);
00095
00096 inline
00097 int poll_time() const;
00098
00102 inline
00103 This operator+(const This& rhs) const;
00104
00108 inline
00109 This operator-(const This& rhs) const;
00110
00114 inline
00115 This& operator+=(const This& rhs);
00116
00120 inline
00121 bool operator==(const This& rhs) const;
00122
00123 inline
00124 bool operator!=(const This& rhs) const;
00125
00129 inline
00130 bool operator<(const This& rhs) const;
00131
00135 inline
00136 bool operator<=(const This& rhs) const;
00137
00141 bool operator>(const This& rhs) const { return !operator<=(rhs); }
00142
00146 bool operator>=(const This& rhs) const { return !operator<(rhs); }
00147
00148 inline
00149 float diff(const This& rhs = now()) const;
00150
00154 inline
00155 This distance(const This& rhs) const;
00156
00165 inline
00166 bool is_past(const This& now = now()) const;
00167
00171 inline
00172 This operator+(unsigned msec) const;
00173
00177 inline
00178 This& operator+=(unsigned msec);
00179
00183 inline
00184 This operator*(const double& f) const;
00185
00189 inline
00190 This operator/(const double& f) const;
00191
00195 inline
00196 This abs() const;
00197
00201 operator ::timeval() const {
00202 return _tv;
00203 }
00204
00210 inline
00211 static This jitter(const This& j);
00212
00216 inline
00217 static void set_now(const This& now = TimeVal::real_now());
00218
00222 inline
00223 float to_float() const;
00224
00228 static const TimeVal& now() { return _now; }
00229
00233 inline
00234 static const TimeVal real_now();
00235
00242 inline
00243 static const TimeVal in(const This& x);
00244
00251 static const TimeVal in_jitter(const This& x) {
00252 return in(jitter(x));
00253 }
00254 private:
00255 timeval _tv;
00256 static This _now;
00257 };
00258
00259 std::ostream& operator<<(std::ostream&, const TimeVal&);
00260
00261 }
00262
00263 typedef utl::TimeVal timeval_t;
00264
00265 }
00266
00267 # ifndef QOLYESTER_DONTINCLUDE_HXX
00268 # include "timeval.hxx"
00269 # endif
00270
00271 #endif // ! QOLYESTER_UTL_TIMEVAL_HH