14
14
15
15
#include < stdint.h>
16
16
#include < modm/architecture/utils.hpp>
17
+ #include < chrono>
17
18
18
19
#ifdef __DOXYGEN__
19
20
@@ -38,6 +39,10 @@ namespace modm
38
39
39
40
using percent_t = float ;
40
41
template <typename T> constexpr percent_t pct (T value);
42
+
43
+ using seconds_t = std::chrono::seconds;
44
+ using milliseconds_t = std::chrono::milliseconds;
45
+ using microseconds_t = std::chrono::microseconds;
41
46
// / @}
42
47
43
48
namespace literals
@@ -76,6 +81,15 @@ namespace literals { \
76
81
constexpr MODM_CONCAT (name, _t) MODM_CONCAT(operator " " _M, symbol)(long double value) { return MODM_CONCAT (M, symbol)(value); } \
77
82
}
78
83
84
+ #define MODM_UNITS_TIME_DEFINITION (type ) \
85
+ struct MODM_CONCAT (type, _t) { \
86
+ template < class Rep , class Period > \
87
+ constexpr MODM_CONCAT (type, _t)(std::chrono::duration<Rep, Period> duration) \
88
+ : count_{std::chrono::duration_cast<std::chrono::type>(duration).count ()} {} \
89
+ std::chrono::type::rep count_; \
90
+ constexpr std::chrono::type::rep count () const { return count_; } \
91
+ };
92
+
79
93
namespace modm
80
94
{
81
95
@@ -92,6 +106,11 @@ namespace literals
92
106
constexpr percent_t operator " " _pct(long double value) { return pct (value); }
93
107
constexpr percent_t operator " " _pct(unsigned long long int value) { return pct (value); }
94
108
}
109
+
110
+ MODM_UNITS_TIME_DEFINITION (seconds)
111
+ MODM_UNITS_TIME_DEFINITION (milliseconds)
112
+ MODM_UNITS_TIME_DEFINITION (microseconds)
113
+
95
114
using namespace ::modm::literals;
96
115
}
97
116
0 commit comments