29#ifndef INCLUDE_OLA_CLOCK_H_
30#define INCLUDE_OLA_CLOCK_H_
43static const int USEC_IN_SECONDS = 1000000;
44static const int ONE_THOUSAND = 1000;
53 BaseTimeVal() { timerclear(&m_tv); }
54 BaseTimeVal(int32_t sec, int32_t usec);
56 explicit BaseTimeVal(
const struct timeval ×tamp) { m_tv = timestamp; }
57 explicit BaseTimeVal(
const struct timespec ×tamp) { Set(timestamp); }
58 explicit BaseTimeVal(int64_t interval_useconds) { Set(interval_useconds); }
60 BaseTimeVal(
const BaseTimeVal &other) : m_tv(other.m_tv) {}
63 BaseTimeVal& operator=(
const BaseTimeVal& other);
64 BaseTimeVal& operator=(
const struct timeval &tv);
65 BaseTimeVal& operator=(
const struct timespec &ts);
68 bool operator==(
const BaseTimeVal &other)
const;
69 bool operator!=(
const BaseTimeVal &other)
const;
70 bool operator>(
const BaseTimeVal &other)
const;
71 bool operator>=(
const BaseTimeVal &other)
const;
72 bool operator<(
const BaseTimeVal &other)
const;
73 bool operator<=(
const BaseTimeVal &other)
const;
76 BaseTimeVal& operator+=(
const BaseTimeVal& other);
77 BaseTimeVal &operator-=(
const BaseTimeVal &other);
78 const BaseTimeVal operator+(
const BaseTimeVal &interval)
const;
79 const BaseTimeVal operator-(
const BaseTimeVal &other)
const;
80 BaseTimeVal operator*(
unsigned int i)
const;
84 void AsTimeval(
struct timeval *tv)
const;
87 time_t Seconds()
const {
return m_tv.tv_sec; }
89 int32_t MicroSeconds()
const {
return static_cast<int32_t
>(m_tv.tv_usec); }
92 int64_t InMilliSeconds()
const;
95 int64_t AsInt()
const;
97 std::string ToString()
const;
105 void TimerAdd(
const struct timeval &tv1,
const struct timeval &tv2,
106 struct timeval *result)
const;
111 void TimerSub(
const struct timeval &tv1,
const struct timeval &tv2,
112 struct timeval *result)
const;
114 void Set(int64_t interval_useconds);
120 void Set(
const struct timespec &ts);
130 TimeInterval(int32_t sec, int32_t usec) : m_interval(sec, usec) {}
131 explicit TimeInterval(int64_t usec) : m_interval(usec) {}
133 TimeInterval(
const TimeInterval &other) : m_interval(other.m_interval) {}
136 TimeInterval& operator=(
const TimeInterval& other);
139 bool operator==(
const TimeInterval &other)
const;
140 bool operator!=(
const TimeInterval &other)
const;
141 bool operator>(
const TimeInterval &other)
const;
142 bool operator>=(
const TimeInterval &other)
const;
143 bool operator<(
const TimeInterval &other)
const;
144 bool operator<=(
const TimeInterval &other)
const;
147 TimeInterval& operator+=(
const TimeInterval& other);
148 TimeInterval operator*(
unsigned int i)
const;
151 bool IsZero()
const {
return !m_interval.IsSet(); }
153 void AsTimeval(
struct timeval *tv)
const { m_interval.AsTimeval(tv); }
155 time_t Seconds()
const {
return m_interval.Seconds(); }
156 int32_t MicroSeconds()
const {
return m_interval.MicroSeconds(); }
158 int64_t InMilliSeconds()
const {
return m_interval.InMilliSeconds(); }
159 int64_t AsInt()
const {
return m_interval.AsInt(); }
161 std::string ToString()
const {
return m_interval.ToString(); }
163 friend std::ostream& operator<< (std::ostream &out,
164 const TimeInterval &interval) {
165 return out << interval.m_interval.ToString();
169 explicit TimeInterval(
const BaseTimeVal &time_val) : m_interval(time_val) {}
172 friend class TimeStamp;
183 explicit TimeStamp(
const struct timeval ×tamp) : m_tv(timestamp) {}
184 explicit TimeStamp(
const struct timespec ×tamp) : m_tv(timestamp) {}
186 TimeStamp(
const TimeStamp &other) : m_tv(other.m_tv) {}
189 TimeStamp& operator=(
const TimeStamp& other);
190 TimeStamp& operator=(
const struct timeval &tv);
191 TimeStamp& operator=(
const struct timespec &ts);
194 bool operator==(
const TimeStamp &other)
const {
return m_tv == other.m_tv; }
195 bool operator!=(
const TimeStamp &other)
const {
return m_tv != other.m_tv; }
196 bool operator>(
const TimeStamp &other)
const {
return m_tv > other.m_tv; }
197 bool operator>=(
const TimeStamp &other)
const {
return m_tv >= other.m_tv; }
198 bool operator<(
const TimeStamp &other)
const {
return m_tv < other.m_tv; }
199 bool operator<=(
const TimeStamp &other)
const {
return m_tv <= other.m_tv; }
204 const TimeStamp operator+(
const TimeInterval &interval)
const;
205 const TimeInterval operator-(
const TimeStamp &other)
const;
206 const TimeStamp operator-(
const TimeInterval &interval)
const;
209 bool IsSet()
const {
return m_tv.IsSet(); }
211 time_t Seconds()
const {
return m_tv.Seconds(); }
212 int32_t MicroSeconds()
const {
return m_tv.MicroSeconds(); }
214 std::string ToString()
const {
return m_tv.ToString(); }
216 friend std::ostream& operator<<(std::ostream &out,
217 const TimeStamp ×tamp) {
218 return out << timestamp.m_tv.ToString();
224 explicit TimeStamp(
const BaseTimeVal &time_val) : m_tv(time_val) {}
275 Clock(
const Clock &) =
delete;
276 const Clock &operator=(
const Clock &) =
delete;
282class MockClock:
public Clock {
284 MockClock() : Clock() {}
288 void AdvanceTime(int32_t sec, int32_t usec);
virtual void CurrentMonotonicTime(TimeStamp *timestamp) const
Sets timestamp to the current monotonic time.
Definition Clock.cpp:270
virtual void CurrentTime(TimeStamp *timestamp) const
Wrapper around CurrentRealime.
Definition Clock.cpp:286
virtual void CurrentRealTime(TimeStamp *timestamp) const
Sets timestamp to the current real time.
Definition Clock.cpp:280
void CurrentMonotonicTime(TimeStamp *timestamp) const
Sets timestamp to the current monotonic time.
Definition Clock.cpp:299
void CurrentRealTime(TimeStamp *timestamp) const
Sets timestamp to the current real time.
Definition Clock.cpp:311
void CurrentTime(TimeStamp *timestamp) const
Wrapper around CurrentRealime.
Definition Clock.cpp:318
The namespace containing all OLA symbols.
Definition Credentials.cpp:44