27 #include <sys/timeb.h>
33 #include "timestamp.h"
43 static const long Million = 1000000;
47 template<
class T1,
class T2>
48 static void regularize(T1 &sec, T2 &usec)
63 m_sec(sec), m_usec(usec)
66 regularize(m_sec, m_usec);
69 TimeDiff::TimeDiff(
long msec) :
83 return m_sec * 1000 + m_usec / 1000;
89 val.m_usec += d.m_usec;
90 val.m_isvalid = val.m_isvalid && d.m_isvalid;
93 regularize(val.m_sec, val.m_usec);
100 val.m_sec -= d.m_sec;
101 val.m_usec -= d.m_usec;
102 val.m_isvalid = val.m_isvalid && d.m_isvalid;
105 regularize(val.m_sec, val.m_usec);
112 return TimeDiff(a.m_sec + b.m_sec, a.m_usec + b.m_usec, a.m_isvalid && b.m_isvalid);
117 return TimeDiff(a.m_sec - b.m_sec, a.m_usec - b.m_usec, a.m_isvalid && b.m_isvalid);
122 return (a.m_sec < b.m_sec) || ((a.m_sec == b.m_sec) && (a.m_usec < b.m_usec));
125 bool operator==(
const TimeDiff &a,
const TimeDiff &b)
127 return (a.m_sec == b.m_sec) && (a.m_usec == b.m_usec);
134 gettimeofday(&ret.
_val,
nullptr);
137 FILETIME fileTime = {0};
140 GetSystemTime(&sysTime);
141 SystemTimeToFileTime(&sysTime, &fileTime);
144 memcpy(&i, &fileTime,
sizeof(LARGE_INTEGER));
146 ret.
_val.tv_sec = i.QuadPart / 10000000;
147 ret.
_val.tv_usec = (i.QuadPart / 10) % 1000000;
159 ret.
_val.tv_usec = 0;
173 regularize(_val.tv_sec, _val.tv_usec);
176 bool operator<(
const TimeStamp &a,
const TimeStamp &b)
178 if (a._val.tv_sec == b._val.tv_sec)
179 return (a._val.tv_usec < b._val.tv_usec);
181 return a._val.tv_sec < b._val.tv_sec;
184 bool operator==(
const TimeStamp &a,
const TimeStamp &b)
186 return (a._val.tv_sec == b._val.tv_sec)
187 && (a._val.tv_usec == b._val.tv_usec);
192 a.
_val.tv_sec += d.m_sec;
193 a.
_val.tv_usec += d.m_usec;
194 a._isvalid = a._isvalid && d.m_isvalid;
197 regularize(a.
_val.tv_sec, a.
_val.tv_usec);
203 a.
_val.tv_sec -= d.m_sec;
204 a.
_val.tv_usec -= d.m_usec;
205 a._isvalid = a._isvalid && d.m_isvalid;
208 regularize(a.
_val.tv_sec, a.
_val.tv_usec);
215 a._isvalid && d.m_isvalid);
221 a._isvalid && d.m_isvalid);
227 a.
_val.tv_usec - b.
_val.tv_usec, a._isvalid && b._isvalid);
The difference between two timestamps.
TimeDiff()
construct an uninitialized TimeDiff
long milliseconds() const
Get the value of a TimeDiff in milliseconds.
static TimeStamp epochStart()
set a TimeStamp to Jan 1, 1970
static TimeStamp now()
set a TimeStamp to the current time
TimeStamp()
Construct an uninitialized TimeStamp.
Generic library namespace.