diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2019-11-18 14:30:35 +0000 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2019-11-18 14:30:35 +0000 |
commit | a65c5f165553d4b954151e671b770706a749b727 (patch) | |
tree | 6429f124ff8b109289fdb911d74cc2128a4c8393 /fastos/src | |
parent | 24be87327ebbff702d113084b0ef87fd194c0ef4 (diff) |
Specify UTC explicit
Diffstat (limited to 'fastos/src')
-rw-r--r-- | fastos/src/vespa/fastos/timestamp.cpp | 20 | ||||
-rw-r--r-- | fastos/src/vespa/fastos/timestamp.h | 52 |
2 files changed, 66 insertions, 6 deletions
diff --git a/fastos/src/vespa/fastos/timestamp.cpp b/fastos/src/vespa/fastos/timestamp.cpp index d5c7f623fde..a1da4322f8c 100644 --- a/fastos/src/vespa/fastos/timestamp.cpp +++ b/fastos/src/vespa/fastos/timestamp.cpp @@ -32,7 +32,7 @@ TimeStamp::asString(double timeInSeconds) return std::string(retval); } -int64_t +UTCTimeStamp ClockSystem::now() { struct timeval timeNow; @@ -40,7 +40,7 @@ ClockSystem::now() int64_t ns = timeNow.tv_sec; ns *= TimeStamp::NANO; ns += timeNow.tv_usec*1000; - return ns; + return UTCTimeStamp(ns); } time_t @@ -57,6 +57,16 @@ steady_now() { } +std::ostream & +operator << (std::ostream & os, UTCTimeStamp ts) { + return os << ts.toString(); +} + +std::ostream & +operator << (std::ostream & os, SteadyTimeStamp ts) { + return os << ts.toString(); +} + SteadyTimeStamp ClockSteady::now() { @@ -65,10 +75,12 @@ ClockSteady::now() const SteadyTimeStamp SteadyTimeStamp::ZERO; const SteadyTimeStamp SteadyTimeStamp::FUTURE(TimeStamp::FUTURE); +const UTCTimeStamp UTCTimeStamp::ZERO; +const UTCTimeStamp UTCTimeStamp::FUTURE(TimeStamp::FUTURE); -TimeStamp +UTCTimeStamp SteadyTimeStamp::toUTC() const { - TimeStamp nowUtc = ClockSystem::now(); + UTCTimeStamp nowUtc = ClockSystem::now(); SteadyTimeStamp nowSteady = ClockSteady::now(); return nowUtc - (nowSteady - *this); } diff --git a/fastos/src/vespa/fastos/timestamp.h b/fastos/src/vespa/fastos/timestamp.h index 2eb895c01f9..c670e9f9b49 100644 --- a/fastos/src/vespa/fastos/timestamp.h +++ b/fastos/src/vespa/fastos/timestamp.h @@ -54,6 +54,48 @@ private: inline TimeStamp operator +(TimeStamp a, TimeStamp b) { return TimeStamp(a.val() + b.val()); } inline TimeStamp operator -(TimeStamp a, TimeStamp b) { return TimeStamp(a.val() - b.val()); } +inline TimeStamp operator *(long a, TimeStamp b) { return TimeStamp(a * b.val()); } +inline TimeStamp operator *(double a, TimeStamp b) { return TimeStamp(static_cast<int64_t>(a * b.val())); } + +class UTCTimeStamp { +public: + static const UTCTimeStamp ZERO; + static const UTCTimeStamp FUTURE; + UTCTimeStamp() : _timeStamp() { } + explicit UTCTimeStamp(TimeStamp timeStamp) : _timeStamp(timeStamp) { } + + friend TimeStamp operator -(UTCTimeStamp a, UTCTimeStamp b) { + return a._timeStamp - b._timeStamp; + } + friend UTCTimeStamp operator -(UTCTimeStamp a, TimeStamp b) { + return UTCTimeStamp(a._timeStamp - b); + } + friend UTCTimeStamp operator +(UTCTimeStamp a, TimeStamp b) { + return UTCTimeStamp(a._timeStamp + b); + } + friend bool operator != (UTCTimeStamp a, UTCTimeStamp b) { + return a._timeStamp != b._timeStamp; + } + friend bool operator == (UTCTimeStamp a, UTCTimeStamp b) { + return a._timeStamp == b._timeStamp; + } + friend bool operator < (UTCTimeStamp a, UTCTimeStamp b) { + return a._timeStamp < b._timeStamp; + } + friend bool operator <= (UTCTimeStamp a, UTCTimeStamp b) { + return a._timeStamp <= b._timeStamp; + } + friend bool operator > (UTCTimeStamp a, UTCTimeStamp b) { + return a._timeStamp > b._timeStamp; + } + friend bool operator >= (UTCTimeStamp a, UTCTimeStamp b) { + return a._timeStamp >= b._timeStamp; + } + TimeStamp timeSinceEpoch() const { return _timeStamp - ZERO._timeStamp; } + std::string toString() const { return _timeStamp.toString(); }; +private: + TimeStamp _timeStamp; +}; class SteadyTimeStamp { public: @@ -65,6 +107,9 @@ public: friend TimeStamp operator -(SteadyTimeStamp a, SteadyTimeStamp b) { return a._timeStamp - b._timeStamp; } + friend SteadyTimeStamp operator -(SteadyTimeStamp a, TimeStamp b) { + return SteadyTimeStamp(a._timeStamp - b); + } friend SteadyTimeStamp operator +(SteadyTimeStamp a, TimeStamp b) { return SteadyTimeStamp(a._timeStamp + b); } @@ -80,16 +125,19 @@ public: friend bool operator > (SteadyTimeStamp a, SteadyTimeStamp b) { return a._timeStamp > b._timeStamp; } - TimeStamp toUTC() const; + UTCTimeStamp toUTC() const; std::string toString() const { return _timeStamp.toString(); }; private: TimeStamp _timeStamp; }; +std::ostream & operator << (std::ostream & os, UTCTimeStamp ts); +std::ostream & operator << (std::ostream & os, SteadyTimeStamp ts); + class ClockSystem { public: - static int64_t now(); + static UTCTimeStamp now(); }; class ClockSteady |