31#ifndef ETL_IN_CHRONO_H
32 #error DO NOT DIRECTLY INCLUDE THIS FILE. USE CHRONO.H
35#include "../../ratio.h"
36#include "../../static_assert.h"
37#include "../../limits.h"
38#include "../../type_traits.h"
46 namespace private_chrono
49 template <
intmax_t A,
intmax_t B>
62 template <
intmax_t A,
intmax_t B>
72 template <
typename TRep>
77 static ETL_CONSTEXPR
TRep zero() ETL_NOEXCEPT
84 static ETL_CONSTEXPR14
TRep min() ETL_NOEXCEPT
91 static ETL_CONSTEXPR14
TRep max() ETL_NOEXCEPT
97 template <
typename TRep,
typename TPeriod>
100 template <
typename TToDuration,
typename TRep,
typename TPeriod>
106 template <
typename TRep,
typename TPeriod = etl::ratio<1> >
112 using period =
typename TPeriod::type;
115 ETL_CONSTEXPR
duration() ETL_NOEXCEPT
127 template <
typename TRep2>
145 value =
other.count();
151 template <
typename TRep2,
typename TPeriod2>
155 value = etl::chrono::duration_cast<etl::chrono::duration<TRep, TPeriod> >(
other).count();
161 ETL_CONSTEXPR14
TRep count()
const ETL_NOEXCEPT
207 ETL_CONSTEXPR14
duration& operator ++() ETL_NOEXCEPT
215 ETL_CONSTEXPR14
duration operator ++(
int) ETL_NOEXCEPT
224 ETL_CONSTEXPR14
duration& operator --() ETL_NOEXCEPT
232 ETL_CONSTEXPR14
duration operator --(
int) ETL_NOEXCEPT
257 ETL_CONSTEXPR14
duration& operator *=(
const TRep&
r) ETL_NOEXCEPT
265 ETL_CONSTEXPR14
duration& operator /=(
const TRep&
r) ETL_NOEXCEPT
273 ETL_CONSTEXPR14
duration& operator %=(
const TRep&
r) ETL_NOEXCEPT
294 template <
typename TRep2,
typename TPeriod2>
317#if (ETL_USING_64BIT_TYPES)
338 template <
typename TToDuration,
typename TRep,
typename TPeriod>
344 using to_rep =
typename TToDuration::rep;
345 using to_period =
typename TToDuration::period;
348 using common_t =
typename etl::common_type<from_rep, to_rep, intmax_t>::type;
350 common_t
ct_count =
static_cast<common_t
>(d.count());
351 common_t
ct_num =
static_cast<common_t
>(ratio_divide_t::type::num);
352 common_t
ct_den =
static_cast<common_t
>(ratio_divide_t::type::den);
354 if ETL_IF_CONSTEXPR((from_period::num == to_period::num) && (from_period::den == to_period::den))
358 else if ETL_IF_CONSTEXPR(ratio_divide_t::num == 1)
362 else if ETL_IF_CONSTEXPR(ratio_divide_t::den == 1)
376#if ETL_USING_8BIT_TYPES
377 template <
typename TRep,
typename TPeriod>
378 struct hash<
etl::chrono::duration<TRep, TPeriod> >
382 uint8_t buffer[
sizeof(TRep) +
sizeof(intmax_t) +
sizeof(intmax_t)];
384 TRep value = d.count();
385 intmax_t num = TPeriod::num;
386 intmax_t den = TPeriod::den;
388 memcpy(buffer, &value,
sizeof(TRep));
389 memcpy(buffer +
sizeof(TRep), &num,
sizeof(intmax_t));
390 memcpy(buffer +
sizeof(TRep) +
sizeof(intmax_t), &den,
sizeof(intmax_t));
392 return etl::private_hash::generic_hash<size_t>(buffer, buffer +
sizeof(TRep) +
sizeof(intmax_t) +
sizeof(intmax_t));
400 template <
typename TRep1,
typename TPeriod1,
typename TRep2,
typename TPeriod2>
405 using value_type =
typename etl::common_type<TRep1, TRep2>::type ;
417 template <
typename TRep1,
typename TPeriod1,
typename TRep2,
typename TPeriod2>
423 common_t
l = etl::chrono::duration_cast<common_t>(
lhs);
424 common_t
r = etl::chrono::duration_cast<common_t>(
rhs);
426 return l.count() ==
r.count();
432 template <
typename TRep1,
typename TPeriod1,
typename TRep2,
typename TPeriod2>
442 template <
typename TRep1,
typename TPeriod1,
typename TRep2,
typename TPeriod2>
448 common_t
l = etl::chrono::duration_cast<common_t>(
lhs);
449 common_t
r = etl::chrono::duration_cast<common_t>(
rhs);
451 return l.count() <
r.count();
457 template <
typename TRep1,
typename TPeriod1,
typename TRep2,
typename TPeriod2>
467 template <
typename TRep1,
typename TPeriod1,
typename TRep2,
typename TPeriod2>
477 template <
typename TRep1,
typename TPeriod1,
typename TRep2,
typename TPeriod2>
488 template <
typename TRep1,
typename TPeriod1,
typename TRep2,
typename TPeriod2>
494 common_t
l = etl::chrono::duration_cast<common_t>(
lhs);
495 common_t
r = etl::chrono::duration_cast<common_t>(
rhs);
497 return (
l.count() <=>
r.count());
504 template <
typename TRep1,
typename TPeriod1,
typename TRep2,
typename TPeriod2>
523 template <
typename TRep1,
typename TPeriod1,
typename TRep2,
typename TPeriod2>
542 template <
typename TRep1,
typename TPeriod1,
typename TRep2>
548 using common_rep =
typename etl::common_type<TRep1, TRep2>::type;
558 template <
typename TRep1,
typename TRep2,
typename TPeriod2>
563 using common_rep =
typename etl::common_type<TRep1, TRep2>::type;
573 template <
typename TRep1,
typename TPeriod1,
typename TRep2>
579 using common_rep =
typename etl::common_type<TRep1, TRep2>::type;
589 template <
typename TRep1,
typename TPeriod1,
typename TRep2,
typename TPeriod2>
590 ETL_CONSTEXPR14
typename etl::common_type<TRep1, TRep2>::type
606 template <
typename TRep1,
typename TPeriod1,
typename TRep2>
612 using common_rep =
typename etl::common_type<TRep1, TRep2>::type;
622 template <
typename TRep1,
typename TPeriod1,
typename TRep2,
typename TPeriod2>
640 template <
typename TToDuration,
typename TRep,
typename TPeriod>
645 TToDuration result = etl::chrono::duration_cast<TToDuration>(d);
658 template <
typename TToDuration,
typename TRep,
typename TPeriod>
663 TToDuration result = etl::chrono::duration_cast<TToDuration>(d);
677 template <
typename TToDuration,
typename TRep,
typename TPeriod>
707 return d.count() >= 0 ? +d : -d;
711#if ETL_HAS_CHRONO_LITERALS_DURATION
714 inline namespace literals
716 inline namespace chrono_literals
721#if ETL_USING_VERBOSE_CHRONO_LITERALS
733#if ETL_USING_VERBOSE_CHRONO_LITERALS
745#if ETL_USING_VERBOSE_CHRONO_LITERALS
757#if ETL_USING_VERBOSE_CHRONO_LITERALS
769#if ETL_USING_VERBOSE_CHRONO_LITERALS
781#if ETL_USING_VERBOSE_CHRONO_LITERALS
793#if ETL_USING_VERBOSE_CHRONO_LITERALS
805#if ETL_USING_VERBOSE_CHRONO_LITERALS
817#if ETL_USING_VERBOSE_CHRONO_LITERALS
829#if ETL_USING_VERBOSE_CHRONO_LITERALS
841#if ETL_USING_VERBOSE_CHRONO_LITERALS
853#if ETL_USING_VERBOSE_CHRONO_LITERALS
duration
Definition duration.h:108
ETL_CONSTEXPR14 int compare(const duration< TRep2, TPeriod2 > &other) const ETL_NOEXCEPT
Definition duration.h:295
ETL_CONSTEXPR14 TToDuration duration_cast(const etl::chrono::duration< TRep, TPeriod > &d) ETL_NOEXCEPT
duration_cast
Definition duration.h:339
ETL_CONSTEXPR etl::enable_if< etl::is_integral< T >::value, bool >::type is_even(T value)
Definition binary.h:2209
enable_if
Definition type_traits_generator.h:1230
is_floating_point
Definition type_traits_generator.h:1070
is_integral
Definition type_traits_generator.h:1040
bitset_ext
Definition absolute.h:38
ETL_CONSTEXPR14 etl::enable_if< etl::is_specialization< TToDuration, etl::chrono::duration >::value, TToDuration >::type ceil(const etl::chrono::duration< TRep, TPeriod > &d) ETL_NOEXCEPT
Rounds up a duration to the nearest higher precision.
Definition duration.h:661
ETL_CONSTEXPR14 etl::circular_iterator< TIterator > operator-(etl::circular_iterator< TIterator > &lhs, typename etl::iterator_traits< TIterator >::difference_type offset)
Definition circular_iterator.h:672
bool operator>(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition array.h:1148
ETL_CONSTEXPR14 enable_if<!etl::is_specialization< TRep2, etl::chrono::duration >::value, etl::chrono::duration< typenameetl::common_type< TRep1, TRep2 >::type, TPeriod1 > >::type operator/(const etl::chrono::duration< TRep1, TPeriod1 > &lhs, const TRep2 &rhs) ETL_NOEXCEPT
Operator /.
Definition duration.h:576
ETL_CONSTEXPR14 etl::chrono::duration< typename etl::common_type< TRep1, TRep2 >::type, TPeriod1 > operator%(const etl::chrono::duration< TRep1, TPeriod1 > &lhs, const TRep2 &rhs) ETL_NOEXCEPT
Operator %.
Definition duration.h:609
ETL_CONSTEXPR14 etl::chrono::duration< TRep, TPeriod > abs(etl::chrono::duration< TRep, TPeriod > d) ETL_NOEXCEPT
Returns the absolute value of a duration.
Definition duration.h:705
bool operator>=(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition array.h:1160
bool operator!=(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition array.h:1109
ETL_CONSTEXPR14 etl::enable_if< etl::is_specialization< TToDuration, etl::chrono::duration >::value, TToDuration >::type floor(const etl::chrono::duration< TRep, TPeriod > &d) ETL_NOEXCEPT
Rounds down a duration to the nearest lower precision.
Definition duration.h:643
ETL_CONSTEXPR14 etl::enable_if< etl::is_specialization< TToDuration, etl::chrono::duration >::value, TToDuration >::type round(const etl::chrono::duration< TRep, TPeriod > &d) ETL_NOEXCEPT
Definition duration.h:680
bool operator==(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition array.h:1097
ETL_CONSTEXPR14 enable_if<!etl::is_specialization< TRep2, etl::chrono::duration >::value, etl::chrono::duration< typenameetl::common_type< TRep1, TRep2 >::type, TPeriod1 > >::type operator*(const etl::chrono::duration< TRep1, TPeriod1 > &lhs, const TRep2 &rhs) ETL_NOEXCEPT
Operator *.
Definition duration.h:545
ETL_CONSTEXPR14 etl::circular_iterator< TIterator > operator+(etl::circular_iterator< TIterator > &lhs, typename etl::iterator_traits< TIterator >::difference_type offset)
Definition circular_iterator.h:659
ETL_NODISCARD ETL_CONSTEXPR14 T round_half_even_unscaled(T value) ETL_NOEXCEPT
Definition scaled_rounding.h:314
bool operator<(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition array.h:1121
bool operator<=(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition array.h:1136
duration_values
Definition duration.h:74
ratio
Definition ratio.h:53