All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
milliSeconds.h
Go to the documentation of this file.
1 #ifndef OSL_MILLISECONDS_H
2 #define OSL_MILLISECONDS_H
3 
4 #include "osl/misc/cstdint.h"
5 #include <string>
6 #include <stdexcept>
7 #include <cassert>
8 #include <limits>
9 
10 namespace osl
11 {
12 namespace misc
13 {
14  struct NoMoreTime : std::runtime_error
15  {
16  NoMoreTime() : std::runtime_error("time limit over")
17  {
18  }
19  };
20 
22  {
23  int64_t msec;
24  public:
25  class Interval
26  {
27  int64_t interval;
28  public:
29  explicit Interval(int64_t m=std::numeric_limits<int64_t>::max()) : interval(m) {}
30  int64_t value() const { return interval; }
31  double toSeconds() const { return interval/1000.0; }
32  static const Interval infinity()
33  {
35  }
37  const Interval operator+(Interval r) const { return Interval(interval + r.interval); }
38  const Interval operator-(Interval r) const { return Interval(interval - r.interval); }
39  const Interval operator*(int scale) const { return Interval(interval*scale); }
40  const Interval operator/(int scale) const { return Interval(interval/scale); }
41  };
42  explicit MilliSeconds(int64_t ms=0) : msec(ms) {}
43  int64_t value() const { return msec; }
44  const MilliSeconds operator+(int64_t diff) const { return MilliSeconds(value()+diff); }
45  const MilliSeconds operator-(int64_t diff) const { return MilliSeconds(value()-diff); }
46  const MilliSeconds operator+(Interval diff) const { return operator+(diff.value()); }
47  const MilliSeconds operator-(Interval diff) const { return operator-(diff.value()); }
49  {
50  return Interval(value() - r.value());
51  }
52  static const MilliSeconds now();
53  double elapsedSeconds() const { return (now() - *this).toSeconds(); }
54  };
56  {
57  return l.value() == r.value();
58  }
60  {
61  return l.value() < r.value();
62  }
64  {
65  return l.value() == r.value();
66  }
68  {
69  return l.value() < r.value();
70  }
71 } // namespace misc
72  using misc::MilliSeconds;
73 } // namespace osl
74 
75 
76 #endif // OSL_MILLISECONDS_H
77 // ;;; Local Variables:
78 // ;;; mode:c++
79 // ;;; c-basic-offset:2
80 // ;;; End: