summaryrefslogtreecommitdiffstats
path: root/fastos
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2019-11-18 14:30:35 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2019-11-18 14:30:35 +0000
commita65c5f165553d4b954151e671b770706a749b727 (patch)
tree6429f124ff8b109289fdb911d74cc2128a4c8393 /fastos
parent24be87327ebbff702d113084b0ef87fd194c0ef4 (diff)
Specify UTC explicit
Diffstat (limited to 'fastos')
-rw-r--r--fastos/src/vespa/fastos/timestamp.cpp20
-rw-r--r--fastos/src/vespa/fastos/timestamp.h52
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