SWC-DB  v0.5.12 C++ documentations
SWC-DB© (Super Wide Column Database) - High Performance Scalable Database (https://github.com/kashirin-alex/swc-db)
Time.h
Go to the documentation of this file.
1 /*
2  * SWC-DB© Copyright since 2019 Alex Kashirin <kashirin.alex@gmail.com>
3  * License details at <https://github.com/kashirin-alex/swc-db/#license>
4  */
5 
6 
7 #ifndef swcdb_core_Time_h
8 #define swcdb_core_Time_h
9 
10 
11 #include "swcdb/core/Compat.h"
12 #include <chrono>
13 
14 
15 namespace SWC {
16 
17 
23 namespace Time {
24 
25 
26 static_assert(
27  std::ratio_less_equal<
28  std::chrono::system_clock::duration::period,
29  std::chrono::nanoseconds::period
30  >::value
31 );
32 
33 
35 extern
36 int64_t now_ms() noexcept {
37  return std::chrono::duration_cast<std::chrono::milliseconds>(
38  std::chrono::system_clock::now().time_since_epoch()).count();
39 }
40 
42 extern
43 int64_t now_ns() noexcept {
44  return std::chrono::duration_cast<std::chrono::nanoseconds>(
45  std::chrono::system_clock::now().time_since_epoch()).count();
46 }
47 
48 int64_t parse_ns(int& err, const std::string& buf);
49 
50 std::string fmt_ns(int64_t ns);
51 
52 
53 
54 template<typename ClockT, typename DurationT>
55 struct Measure : std::chrono::time_point<ClockT> {
56 
58  Measure() noexcept
59  : std::chrono::time_point<ClockT>(ClockT::now()) {
60  }
61 
62  constexpr SWC_CAN_INLINE
63  Measure(typename std::chrono::time_point<ClockT>::duration&& v) noexcept
64  : std::chrono::time_point<ClockT>(v) {
65  }
66 
68  void restart() noexcept {
69  std::chrono::time_point<ClockT>::operator=(ClockT::now());
70  }
71 
72  template<typename T = DurationT>
74  uint64_t elapsed() const noexcept {
75  return std::chrono::duration_cast<T>(ClockT::now() - *this).count();
76  }
77 
78 };
79 
80 typedef Measure<std::chrono::steady_clock, std::chrono::nanoseconds>
88 
89 
90 }}
91 
92 
93 
94 #ifdef SWC_IMPL_SOURCE
95 #include "swcdb/core/Time.cc"
96 #endif
97 
98 #endif // swcdb_core_Time_h
SWC::Time::now_ns
SWC_CAN_INLINE int64_t now_ns() noexcept
Definition: Time.h:43
SWC::Time::Measure_us
Measure< std::chrono::steady_clock, std::chrono::microseconds > Measure_us
Definition: Time.h:83
SWC::Time::Measure_sec
Measure< std::chrono::steady_clock, std::chrono::seconds > Measure_sec
Definition: Time.h:87
SWC::Time::Measure::Measure
SWC_CAN_INLINE Measure() noexcept
Definition: Time.h:58
SWC::Time::Measure::elapsed
SWC_CAN_INLINE uint64_t elapsed() const noexcept
Definition: Time.h:74
SWC::Time::Measure_ms
Measure< std::chrono::steady_clock, std::chrono::milliseconds > Measure_ms
Definition: Time.h:85
SWC_CAN_INLINE
#define SWC_CAN_INLINE
Definition: Compat.h:102
SWC
The SWC-DB C++ namespace 'SWC'.
Definition: main.cc:12
SWC::Time::parse_ns
int64_t parse_ns(int &err, const std::string &buf)
Definition: Time.cc:37
SWC::Time::Measure
Definition: Time.h:55
Time.cc
Compat.h
SWC::Time::Measure::restart
SWC_CAN_INLINE void restart() noexcept
Definition: Time.h:68
SWC::Time::Measure_ns
Measure< std::chrono::steady_clock, std::chrono::nanoseconds > Measure_ns
Definition: Time.h:81
SWC::Time::now_ms
SWC_CAN_INLINE int64_t now_ms() noexcept
Definition: Time.h:36
SWC::Time::Measure::Measure
constexpr SWC_CAN_INLINE Measure(typename std::chrono::time_point< ClockT >::duration &&v) noexcept
Definition: Time.h:63
SWC::Time::fmt_ns
std::string fmt_ns(int64_t ns)
Definition: Time.cc:133