Sen API
Sen Libraries
Toggle main menu visibility
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
11
#include "
sen/core/base/numbers.h
"
12
#include "
sen/core/base/strong_type.h
"
13
14
// std
15
#include <chrono>
16
17
namespace
sen
18
{
19
22
24
class
Duration
final:
public
StrongType
<std::int64_t, Duration>
25
{
26
public
:
27
using
Base
=
sen::StrongType<int64_t, Duration>
;
28
using
Base::Base;
29
using
Base::get
;
30
using
Base::set
;
31
using
ValueType
=
Base::ValueType
;
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
46
public
:
// 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
53
public:
// 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
69
public
:
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
87
template
<>
88
struct
ShouldBePassedByValue
<
Duration
>: std::true_type
89
{
90
};
91
92
static_assert
(std::is_trivially_copyable_v<Duration>);
93
95
96
}
// namespace sen
97
98
#endif
// SEN_CORE_BASE_DURATION_H
sen::Duration
A time duration.
Definition
duration.h:25
sen::Duration::toChrono
constexpr std::chrono::nanoseconds toChrono() const noexcept
Conversion to std::chrono representation.
Definition
duration.h:58
sen::Duration::ValueType
Base::ValueType ValueType
Definition
duration.h:31
sen::Duration::toSeconds
constexpr float64_t toSeconds() const noexcept
Number of seconds.
Definition
duration.h:64
sen::Duration::Duration
constexpr Duration(std::chrono::duration< Rep, Period > value) noexcept
Definition
duration.h:40
sen::Duration::Duration
constexpr Duration(std::chrono::nanoseconds value) noexcept
Definition
duration.h:34
sen::Duration::Base
sen::StrongType< int64_t, Duration > Base
Definition
duration.h:27
sen::Duration::~Duration
~Duration() noexcept=default
sen::Duration::getNanoseconds
constexpr ValueType getNanoseconds() const noexcept
Number of nanoseconds.
Definition
duration.h:55
sen::Duration::fromHertz
static constexpr Duration fromHertz(float64_t hz) noexcept
Creates a duration out of a frequency in Hertz.
Definition
duration.h:72
sen::Duration::fromHertz
static constexpr Duration fromHertz(float32_t hz) noexcept
Creates a duration out of a frequency in Hertz.
Definition
duration.h:80
sen::StrongType< int64_t, Duration >::get
constexpr int64_t get() const noexcept
Definition
strong_type.h:52
sen::StrongType< int64_t, Duration >::set
constexpr void set(const int64_t &value) noexcept
Definition
strong_type.h:53
sen::StrongType
CRTP class that wraps T to make it a strong type.
Definition
strong_type.h:72
sen::StrongType< int64_t, Duration >::ValueType
typename StrongTypeBase< int64_t >::ValueType ValueType
Definition
strong_type.h:75
float32_t
float float32_t
Definition
numbers.h:16
float64_t
double float64_t
Definition
numbers.h:17
sen
Definition
assert.h:17
numbers.h
strong_type.h
sen::ShouldBePassedByValue
Utility to indicate that your class wants to be passed by value in some of the library calls.
Definition
class_helpers.h:34
libs
core
include
sen
core
base
duration.h
Generated by
1.17.0