16 #ifndef IOX_UTILS_UNITS_DURATION_HPP
17 #define IOX_UTILS_UNITS_DURATION_HPP
19 #include "iceoryx_utils/cxx/expected.hpp"
20 #include "iceoryx_utils/cxx/smart_c.hpp"
21 #include "iceoryx_utils/platform/time.hpp"
32 enum class TimeSpecReference
41 inline namespace duration_literals
44 constexpr Duration
operator"" _ns(
unsigned long long int) noexcept;
47 constexpr Duration
operator"" _us(
unsigned long long int) noexcept;
50 constexpr Duration
operator"" _ms(
unsigned long long int) noexcept;
53 constexpr Duration
operator"" _s(
unsigned long long int) noexcept;
56 constexpr Duration
operator"" _m(
unsigned long long int) noexcept;
59 constexpr Duration
operator"" _h(
unsigned long long int) noexcept;
62 constexpr Duration
operator"" _d(
unsigned long long int) noexcept;
102 template <
typename T>
110 template <
typename T>
118 template <
typename T>
126 template <
typename T>
134 template <
typename T>
143 constexpr
explicit Duration(
const struct timeval& value) noexcept;
152 constexpr
explicit Duration(
const struct itimerspec& value) noexcept;
157 constexpr
explicit Duration(
const std::chrono::milliseconds& value) noexcept;
162 constexpr
explicit Duration(
const std::chrono::nanoseconds& value) noexcept;
228 template <
typename T>
254 constexpr uint64_t
toSeconds()
const noexcept;
258 constexpr uint64_t
toMinutes()
const noexcept;
262 constexpr uint64_t
toHours()
const noexcept;
266 constexpr uint64_t
toDays() const noexcept;
269 struct
timespec timespec(const TimeSpecReference& reference = TimeSpecReference::None) const noexcept;
274 constexpr operator struct timeval() const noexcept;
278 friend constexpr
Duration duration_literals::operator"" _ns(
unsigned long long int) noexcept;
279 friend constexpr
Duration duration_literals::operator"" _us(
unsigned long long int) noexcept;
280 friend constexpr
Duration duration_literals::operator"" _ms(
unsigned long long int) noexcept;
281 friend constexpr
Duration duration_literals::operator"" _s(
unsigned long long int) noexcept;
282 friend constexpr
Duration duration_literals::operator"" _m(
unsigned long long int) noexcept;
283 friend constexpr
Duration duration_literals::operator"" _h(
unsigned long long int) noexcept;
284 friend constexpr
Duration duration_literals::operator"" _d(
unsigned long long int) noexcept;
286 template <typename T>
287 friend constexpr
Duration operator*(const T& lhs, const
Duration& rhs) noexcept;
289 friend std::ostream& operator<<(std::ostream& stream, const
Duration& t) noexcept;
291 static constexpr uint32_t SECS_PER_MINUTE{60U};
292 static constexpr uint32_t SECS_PER_HOUR{3600U};
293 static constexpr uint32_t HOURS_PER_DAY{24U};
295 static constexpr uint32_t MILLISECS_PER_SEC{1000U};
296 static constexpr uint32_t MICROSECS_PER_SEC{MILLISECS_PER_SEC * 1000U};
298 static constexpr uint32_t NANOSECS_PER_MICROSEC{1000U};
299 static constexpr uint32_t NANOSECS_PER_MILLISEC{NANOSECS_PER_MICROSEC * 1000U};
300 static constexpr uint32_t NANOSECS_PER_SEC{NANOSECS_PER_MILLISEC * 1000U};
303 using Seconds_t = uint64_t;
304 using Nanoseconds_t = uint32_t;
310 constexpr
Duration(
const Seconds_t seconds,
const Nanoseconds_t nanoseconds) noexcept;
314 static constexpr
Duration createDuration(
const Seconds_t seconds,
const Nanoseconds_t nanoseconds) noexcept;
316 static constexpr
Duration max() noexcept;
317 static constexpr
Duration zero() noexcept;
320 template <typename T, typename String>
321 static constexpr
unsigned long long int positiveValueOrClampToZero(const T value, const String fromMethod) noexcept;
323 template <typename T>
324 constexpr
Duration fromFloatingPointSeconds(const T floatingPointSeconds) const noexcept;
325 template <typename From, typename To>
326 constexpr
bool wouldCastFromFloatingPointProbablyOverflow(const From floatingPoint) const noexcept;
328 template <typename T>
329 constexpr
Duration multiplyWith(const std::enable_if_t<!std::is_floating_point<T>::value, T>& rhs) const noexcept;
331 template <typename T>
332 constexpr
Duration multiplyWith(const std::enable_if_t<std::is_floating_point<T>::value, T>& rhs) const noexcept;
335 Seconds_t m_seconds{0U};
336 Nanoseconds_t m_nanoseconds{0U};
345 template <
typename T>
346 constexpr Duration operator*(
const T& lhs,
const Duration& rhs) noexcept;
349 std::ostream& operator<<(std::ostream& stream,
const Duration& t) noexcept;
354 #include "iceoryx_utils/internal/units/duration.inl"
Definition: duration.hpp:77
constexpr Duration operator+(const Duration &rhs) const noexcept
Creates Duration object by addition.
Definition: duration.inl:261
constexpr bool operator>=(const Duration &rhs) const noexcept
Greater than or equal to operator.
Definition: duration.inl:256
constexpr Duration operator*(const T &rhs) const noexcept
Creates Duration object by multiplication.
Definition: duration.inl:443
constexpr uint64_t toNanoseconds() const noexcept
returns the duration in nanoseconds
Definition: duration.inl:144
constexpr Duration operator-(const Duration &rhs) const noexcept
Creates Duration object by subtraction.
Definition: duration.inl:281
struct timespec timespec(const TimeSpecReference &reference=TimeSpecReference::None) const noexcept
converts duration in a timespec c struct
constexpr bool operator<(const Duration &rhs) const noexcept
Less than operator.
Definition: duration.inl:241
constexpr uint64_t toMicroseconds() const noexcept
returns the duration in microseconds
Definition: duration.inl:161
constexpr Duration(const struct timeval &value) noexcept
Construct a Duration object from timeval.
Definition: duration.inl:113
static constexpr Duration fromMicroseconds(const T value) noexcept
Constructs a new Duration object from microseconds.
Definition: duration.inl:83
constexpr bool operator==(const Duration &rhs) const noexcept
Equal to operator.
Definition: duration.inl:231
static constexpr Duration fromHours(const T value) noexcept
Constructs a new Duration object from hours.
Definition: duration.inl:103
static constexpr Duration fromMilliseconds(const T value) noexcept
Constructs a new Duration object from milliseconds.
Definition: duration.inl:88
static constexpr Duration fromDays(const T value) noexcept
Constructs a new Duration object from days.
Definition: duration.inl:108
constexpr uint64_t toDays() const noexcept
returns the duration in days
Definition: duration.inl:212
Duration & operator=(const std::chrono::milliseconds &rhs) noexcept
Assigns a std::chrono::milliseconds to an duration object.
Definition: duration.inl:138
constexpr bool operator>(const Duration &rhs) const noexcept
Greater than operator.
Definition: duration.inl:251
static constexpr Duration fromSeconds(const T value) noexcept
Constructs a new Duration object from seconds.
Definition: duration.inl:93
constexpr bool operator!=(const Duration &rhs) const noexcept
Not equal to operator.
Definition: duration.inl:236
constexpr uint64_t toSeconds() const noexcept
returns the duration in seconds
Definition: duration.inl:197
static constexpr Duration fromNanoseconds(const T value) noexcept
Constructs a new Duration object from nanoseconds.
Definition: duration.inl:78
constexpr uint64_t toMilliseconds() const noexcept
returns the duration in milliseconds
Definition: duration.inl:179
static constexpr Duration fromMinutes(const T value) noexcept
Constructs a new Duration object from minutes.
Definition: duration.inl:98
static constexpr Duration createDuration(const Seconds_t seconds, const Nanoseconds_t nanoseconds) noexcept
Definition: duration.inl:47
constexpr uint64_t toHours() const noexcept
returns the duration in hours
Definition: duration.inl:207
constexpr bool operator<=(const Duration &rhs) const noexcept
Less than or equal to operator.
Definition: duration.inl:246
constexpr uint64_t toMinutes() const noexcept
returns the duration in minutes
Definition: duration.inl:202
building block to easily create free function for logging in a library context
Definition: lockfree_queue.hpp:28