libcluon  0.0.148
Time.hpp
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2017-2018 Christian Berger
3  *
4  * This Source Code Form is subject to the terms of the Mozilla Public
5  * License, v. 2.0. If a copy of the MPL was not distributed with this
6  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
7  */
8 
9 #ifndef CLUON_TIME_HPP
10 #define CLUON_TIME_HPP
11 
12 #include "cluon/cluonDataStructures.hpp"
13 
14 #include <chrono>
15 
16 namespace cluon {
17 namespace time {
18 
23 inline cluon::data::TimeStamp fromMicroseconds(int64_t tp) noexcept {
24  cluon::data::TimeStamp ts;
25  ts.seconds(static_cast<int32_t>(tp / static_cast<int64_t>(1000 * 1000))).microseconds(static_cast<int32_t>(tp % static_cast<int64_t>(1000 * 1000)));
26  return ts;
27 }
28 
33 inline int64_t toMicroseconds(const cluon::data::TimeStamp &tp) noexcept {
34  return static_cast<int64_t>(tp.seconds()) * static_cast<int64_t>(1000 * 1000) + static_cast<int64_t>(tp.microseconds());
35 }
36 
42 inline int64_t deltaInMicroseconds(const cluon::data::TimeStamp &AFTER, const cluon::data::TimeStamp &BEFORE) noexcept {
43  return toMicroseconds(AFTER) - toMicroseconds(BEFORE);
44 }
45 
50 inline cluon::data::TimeStamp convert(const std::chrono::system_clock::time_point &tp) noexcept {
51  cluon::data::TimeStamp timeStamp;
52 
53  // Transform chrono time representation to same behavior as gettimeofday.
54  typedef std::chrono::duration<int32_t> seconds_type;
55  typedef std::chrono::duration<int64_t, std::micro> microseconds_type;
56 
57  auto duration = tp.time_since_epoch();
58  seconds_type s = std::chrono::duration_cast<seconds_type>(duration);
59  microseconds_type us = std::chrono::duration_cast<microseconds_type>(duration);
60  microseconds_type partial_us = us - std::chrono::duration_cast<microseconds_type>(s);
61 
62  timeStamp.seconds(s.count()).microseconds(static_cast<int32_t>(partial_us.count()));
63 
64  return timeStamp;
65 }
66 
70 inline cluon::data::TimeStamp now() noexcept {
72 }
73 
74 } // namespace time
75 } // namespace cluon
76 
77 #endif
Definition: cluon.hpp:65
cluon::data::TimeStamp now() noexcept
Definition: Time.hpp:70
int64_t toMicroseconds(const cluon::data::TimeStamp &tp) noexcept
Definition: Time.hpp:33
cluon::data::TimeStamp fromMicroseconds(int64_t tp) noexcept
Definition: Time.hpp:23
int64_t deltaInMicroseconds(const cluon::data::TimeStamp &AFTER, const cluon::data::TimeStamp &BEFORE) noexcept
Definition: Time.hpp:42
cluon::data::TimeStamp convert(const std::chrono::system_clock::time_point &tp) noexcept
Definition: Time.hpp:50