Sen API
Sen Libraries
Loading...
Searching...
No Matches
duration.h
Go to the documentation of this file.
1// === duration.h ======================================================================================================
2// Sen Infrastructure
3// Released under the Apache License v2.0 (SPDX-License-Identifier Apache-2.0).
4// See the LICENSE.txt file for more information.
5// © Airbus SAS, Airbus Helicopters, and Airbus Defence and Space SAU/GmbH/SAS.
6// =====================================================================================================================
7
8#ifndef SEN_CORE_BASE_DURATION_H
9#define SEN_CORE_BASE_DURATION_H
10
13
14// std
15#include <chrono>
16
17namespace sen
18{
19
22
24class Duration final: public StrongType<std::int64_t, Duration>
25{
26public:
28 using Base::Base;
29 using Base::get;
30 using Base::set;
32
33 template <class Rep, class Period>
34 constexpr Duration(std::chrono::nanoseconds value) noexcept // NOLINT(hicpp-explicit-conversions)
35 : Base(value.count())
36 {
37 }
38
39 template <class Rep, class Period>
40 constexpr Duration(std::chrono::duration<Rep, Period> value) noexcept // NOLINT(hicpp-explicit-conversions)
41 {
42 set(static_cast<ValueType>((value.count() / std::ratio_divide<Period, std::nano>::den) *
43 std::ratio_divide<Period, std::nano>::num));
44 }
45
46public: // special members
47 constexpr SEN_MOVE_CONSTRUCT(Duration) = default;
48 constexpr SEN_COPY_CONSTRUCT(Duration) = default;
49 constexpr SEN_MOVE_ASSIGN(Duration) = default;
50 constexpr SEN_COPY_ASSIGN(Duration) = default;
51 ~Duration() noexcept = default;
52
53public: // accessors
55 [[nodiscard]] constexpr ValueType getNanoseconds() const noexcept { return get(); }
56
58 [[nodiscard]] constexpr std::chrono::nanoseconds toChrono() const noexcept
59 {
60 return std::chrono::nanoseconds {get()};
61 }
62
64 [[nodiscard]] constexpr float64_t toSeconds() const noexcept
65 {
66 return std::chrono::duration<float64_t>(toChrono()).count();
67 }
68
69public:
72 [[nodiscard]] static constexpr Duration fromHertz(float64_t hz) noexcept
73 {
74 using F64Seconds = std::chrono::duration<float64_t, std::chrono::seconds::period>;
75 return {F64Seconds(1.0 / hz)};
76 }
77
80 [[nodiscard]] static constexpr Duration fromHertz(float32_t hz) noexcept
81 {
82 using F32Seconds = std::chrono::duration<float32_t, std::chrono::seconds::period>;
83 return {F32Seconds(1.0f / hz)};
84 }
85};
86
87template <>
88struct ShouldBePassedByValue<Duration>: std::true_type
89{
90};
91
92static_assert(std::is_trivially_copyable_v<Duration>);
93
95
96} // namespace sen
97
98#endif // SEN_CORE_BASE_DURATION_H
A time duration.
Definition duration.h:25
constexpr std::chrono::nanoseconds toChrono() const noexcept
Conversion to std::chrono representation.
Definition duration.h:58
Base::ValueType ValueType
Definition duration.h:31
constexpr float64_t toSeconds() const noexcept
Number of seconds.
Definition duration.h:64
constexpr Duration(std::chrono::duration< Rep, Period > value) noexcept
Definition duration.h:40
constexpr Duration(std::chrono::nanoseconds value) noexcept
Definition duration.h:34
sen::StrongType< int64_t, Duration > Base
Definition duration.h:27
~Duration() noexcept=default
constexpr ValueType getNanoseconds() const noexcept
Number of nanoseconds.
Definition duration.h:55
static constexpr Duration fromHertz(float64_t hz) noexcept
Creates a duration out of a frequency in Hertz.
Definition duration.h:72
static constexpr Duration fromHertz(float32_t hz) noexcept
Creates a duration out of a frequency in Hertz.
Definition duration.h:80
constexpr int64_t get() const noexcept
Definition strong_type.h:52
constexpr void set(const int64_t &value) noexcept
Definition strong_type.h:53
CRTP class that wraps T to make it a strong type.
Definition strong_type.h:72
typename StrongTypeBase< int64_t >::ValueType ValueType
Definition strong_type.h:75
float float32_t
Definition numbers.h:16
double float64_t
Definition numbers.h:17
Definition assert.h:17
Utility to indicate that your class wants to be passed by value in some of the library calls.
Definition class_helpers.h:34