4#ifndef TETL_CHRONO_DURATION_HPP
5#define TETL_CHRONO_DURATION_HPP
7#include <etl/_chrono/duration_values.hpp>
8#include <etl/_chrono/treat_as_floating_point.hpp>
9#include <etl/_cstdint/int_least_t.hpp>
10#include <etl/_numeric/gcd.hpp>
11#include <etl/_numeric/lcm.hpp>
12#include <etl/_ratio/ratio.hpp>
13#include <etl/_ratio/ratio_divide.hpp>
14#include <etl/_type_traits/common_type.hpp>
15#include <etl/_type_traits/is_convertible.hpp>
31template <
typename Rep,
typename Period =
etl::
ratio<1>>
38 using period =
typename Period::type;
60 template <
typename Rep2>
61 requires(is_convertible_v<Rep2, rep>
and (treat_as_floating_point_v<rep>
or !treat_as_floating_point_v<Rep2>))
62 constexpr explicit duration(Rep2
const& r)
noexcept
84 template <
typename Rep2,
typename Period2>
86 treat_as_floating_point_v<rep>
87 or (ratio_divide<Period2, period>::den == 1
and not treat_as_floating_point_v<Rep2>)
90 : _rep(
static_cast<Rep>(other.count() * ratio_divide<Period2, period>::num))
226template <
typename Rep1,
typename Period1,
typename Rep2,
typename Period2>
229 static constexpr auto num = gcd(Period1::num, Period2::num);
230 static constexpr auto den = lcm(Period1::den, Period2::den);
247template <
typename Rep1,
typename Period1,
typename Rep2,
typename Period2>
252 using CR =
typename CD::rep;
253 return CD(
static_cast<CR>(CD(lhs).count() + CD(rhs).count()));
264template <
typename Rep1,
typename Period1,
typename Rep2,
typename Period2>
269 using CR =
typename CD::rep;
270 return CD(
static_cast<CR>(CD(lhs).count() - CD(rhs).count()));
281template <
typename Rep1,
typename Period1,
typename Rep2,
typename Period2>
283 -> common_type_t<Rep1, Rep2>
286 return CD(lhs).count() / CD(rhs).count();
297template <
typename Rep1,
typename Period1,
typename Rep2,
typename Period2>
302 using CR =
typename CD::rep;
303 return CD(
static_cast<CR>(CD(lhs).count() % CD(rhs).count()));
308template <
typename Rep1,
typename Period1,
typename Rep2,
typename Period2>
311 using common_t =
typename etl::common_type<
duration<Rep1, Period1>,
duration<Rep2, Period2>>::type;
312 return common_t(lhs).count() == common_t(rhs).count();
317template <
typename Rep1,
typename Period1,
typename Rep2,
typename Period2>
320 return !(lhs == rhs);
325template <
typename Rep1,
typename Period1,
typename Rep2,
typename Period2>
328 using common_t =
typename etl::common_type<
duration<Rep1, Period1>,
duration<Rep2, Period2>>::type;
329 return common_t(lhs).count() < common_t(rhs).count();
334template <
typename Rep1,
typename Period1,
typename Rep2,
typename Period2>
342template <
typename Rep1,
typename Period1,
typename Rep2,
typename Period2>
350template <
typename Rep1,
typename Period1,
typename Rep2,
typename Period2>
360using microseconds =
duration<int_least64_t, micro>;
363using milliseconds =
duration<int_least64_t, milli>;
constexpr auto operator%(duration< Rep1, Period1 > const &lhs, duration< Rep2, Period2 > const &rhs) -> common_type_t< duration< Rep1, Period1 >, duration< Rep2, Period2 > >
Performs basic arithmetic operations between two durations or between a duration and a tick count.
Definition duration.hpp:298
constexpr auto operator<(duration< Rep1, Period1 > const &lhs, duration< Rep2, Period2 > const &rhs) -> bool
Compares two durations. Compares lhs to rhs, i.e. compares the number of ticks for the type common to...
Definition duration.hpp:326
constexpr auto operator>(duration< Rep1, Period1 > const &lhs, duration< Rep2, Period2 > const &rhs) -> bool
Compares two durations. Compares lhs to rhs, i.e. compares the number of ticks for the type common to...
Definition duration.hpp:343
constexpr auto operator==(duration< Rep1, Period1 > const &lhs, duration< Rep2, Period2 > const &rhs) -> bool
Compares two durations. Checks if lhs and rhs are equal, i.e. the number of ticks for the type common...
Definition duration.hpp:309
constexpr auto operator!=(duration< Rep1, Period1 > const &lhs, duration< Rep2, Period2 > const &rhs) -> bool
Compares two durations. Checks if lhs and rhs are equal, i.e. the number of ticks for the type common...
Definition duration.hpp:318
constexpr auto operator+(duration< Rep1, Period1 > const &lhs, duration< Rep2, Period2 > const &rhs) -> common_type_t< duration< Rep1, Period1 >, duration< Rep2, Period2 > >
Performs basic arithmetic operations between two durations or between a duration and a tick count.
Definition duration.hpp:248
constexpr auto operator/(duration< Rep1, Period1 > const &lhs, duration< Rep2, Period2 > const &rhs) -> common_type_t< Rep1, Rep2 >
Performs basic arithmetic operations between two durations or between a duration and a tick count.
Definition duration.hpp:282
constexpr auto operator<=(duration< Rep1, Period1 > const &lhs, duration< Rep2, Period2 > const &rhs) -> bool
Compares two durations. Compares lhs to rhs, i.e. compares the number of ticks for the type common to...
Definition duration.hpp:335
constexpr auto operator-(duration< Rep1, Period1 > const &lhs, duration< Rep2, Period2 > const &rhs) -> common_type_t< duration< Rep1, Period1 >, duration< Rep2, Period2 > >
Performs basic arithmetic operations between two durations or between a duration and a tick count.
Definition duration.hpp:265
constexpr auto operator>=(duration< Rep1, Period1 > const &lhs, duration< Rep2, Period2 > const &rhs) -> bool
Compares two durations. Compares lhs to rhs, i.e. compares the number of ticks for the type common to...
Definition duration.hpp:351
constexpr auto operator""_ms(unsigned long long m) -> etl::chrono::milliseconds
Forms a etl::chrono::duration literal representing milliseconds. Integer literal, returns exactly etl...
Definition duration.hpp:444
constexpr auto operator""_min(unsigned long long m) -> etl::chrono::minutes
Forms a etl::chrono::duration literal representing minutes. Integer literal, returns exactly etl::chr...
Definition duration.hpp:413
constexpr auto operator""_us(long double m) -> etl::chrono::duration< long double, etl::micro >
Forms a etl::chrono::duration literal representing microseconds. Floating-point literal,...
Definition duration.hpp:468
constexpr auto operator""_s(long double m) -> etl::chrono::duration< long double >
Forms a etl::chrono::duration literal representing seconds. Floating-point literal,...
Definition duration.hpp:436
constexpr auto operator""_ns(unsigned long long m) -> etl::chrono::nanoseconds
Forms a etl::chrono::duration literal representing nanoseconds. Integer literal, returns exactly etl:...
Definition duration.hpp:476
constexpr auto operator""_ns(long double m) -> etl::chrono::duration< long double, etl::nano >
Forms a etl::chrono::duration literal representing nanoseconds. Floating-point literal,...
Definition duration.hpp:484
constexpr auto operator""_us(unsigned long long m) -> etl::chrono::microseconds
Forms a etl::chrono::duration literal representing microseconds. Integer literal, returns exactly etl...
Definition duration.hpp:460
constexpr auto operator""_ms(long double m) -> etl::chrono::duration< long double, etl::milli >
Forms a etl::chrono::duration literal representing milliseconds. Floating-point literal,...
Definition duration.hpp:452
constexpr auto operator""_h(unsigned long long h) -> etl::chrono::hours
Forms a etl::chrono::duration literal representing hours. Integer literal, returns exactly etl::chron...
Definition duration.hpp:398
constexpr auto operator""_s(unsigned long long m) -> etl::chrono::seconds
Forms a etl::chrono::duration literal representing seconds. Integer literal, returns exactly etl::chr...
Definition duration.hpp:428
constexpr auto operator""_h(long double h) -> etl::chrono::duration< long double, ratio< 3600, 1 > >
Forms a etl::chrono::duration literal representing hours. Floating-point literal, returns a floating-...
Definition duration.hpp:406
constexpr auto operator""_min(long double m) -> etl::chrono::duration< long double, etl::ratio< 60, 1 > >
Forms a etl::chrono::duration literal representing minutes. Floating-point literal,...
Definition duration.hpp:421
Definition adjacent_find.hpp:9
The etl::chrono::duration_values type defines three common durations.
Definition duration_values.hpp:20
Class template etl::chrono::duration represents a time interval.
Definition duration.hpp:32
static constexpr auto min() noexcept -> duration
Returns a duration with the lowest possible value.
Definition duration.hpp:110
constexpr auto count() const -> rep
Returns the number of ticks for this duration.
Definition duration.hpp:98
constexpr auto operator--() -> duration &
Increments or decrements the number of ticks for this duration. Equivalent to –_rep; return *this;.
Definition duration.hpp:150
constexpr auto operator/=(rep const &rhs) noexcept -> duration &
Performs compound assignments between two durations with the same period or between a duration and a ...
Definition duration.hpp:189
constexpr duration(duration const &) noexcept=default
Constructs a new duration from one of several optional data sources. The copy constructor is defaulte...
constexpr duration(Rep2 const &r) noexcept
Constructs a duration with r ticks.
Definition duration.hpp:62
constexpr auto operator-=(duration const &d) noexcept -> duration &
Performs compound assignments between two durations with the same period or between a duration and a ...
Definition duration.hpp:173
constexpr auto operator+=(duration const &d) noexcept -> duration &
Performs compound assignments between two durations with the same period or between a duration and a ...
Definition duration.hpp:165
constexpr auto operator+() const -> etl::common_type_t< duration >
Implements unary plus and unary minus for the durations.
Definition duration.hpp:122
constexpr auto operator++(int) -> duration
Increments or decrements the number of ticks for this duration. Equivalent to return duration(_rep++)
Definition duration.hpp:143
constexpr auto operator%=(rep const &rhs) noexcept -> duration &
Performs compound assignments between two durations with the same period or between a duration and a ...
Definition duration.hpp:197
auto operator=(duration const &other) -> duration &=default
Assigns the contents of one duration to another.
static constexpr auto zero() noexcept -> duration
Returns a zero-length duration.
Definition duration.hpp:104
constexpr auto operator-() const -> etl::common_type_t< duration >
Implements unary plus and unary minus for the durations.
Definition duration.hpp:128
constexpr auto operator*=(rep const &rhs) noexcept -> duration &
Performs compound assignments between two durations with the same period or between a duration and a ...
Definition duration.hpp:181
constexpr duration(duration< Rep2, Period2 > const &other) noexcept
Constructs a duration by converting d to an appropriate period and tick count, as if by duration_cast...
Definition duration.hpp:89
static constexpr auto max() noexcept -> duration
Returns a duration with the largest possible value.
Definition duration.hpp:116
constexpr auto operator--(int) -> duration
Increments or decrements the number of ticks for this duration. Equivalent to return duration(_rep–);...
Definition duration.hpp:158
constexpr auto operator%=(duration const &rhs) noexcept -> duration &
Performs compound assignments between two durations with the same period or between a duration and a ...
Definition duration.hpp:205
constexpr auto operator++() -> duration &
Increments or decrements the number of ticks for this duration. Equivalent to ++_rep; return *this;.
Definition duration.hpp:135
constexpr duration() noexcept=default
Constructs a new duration from one of several optional data sources. The default constructor is defau...
The typename template provides compile-time rational arithmetic support. Each instantiation of this t...
Definition ratio.hpp:22