di 0.1.0
Loading...
Searching...
No Matches
duration_cast.h
Go to the documentation of this file.
1#pragma once
2
4#include "di/meta/core.h"
5
6namespace di::chrono {
7namespace detail {
8 template<concepts::InstanceOf<Duration> To>
9 struct DurationCastFunction {
10 template<typename Rep, math::detail::IsRatio Period>
11 constexpr auto operator()(Duration<Rep, Period> const& from) const -> To {
12 constexpr auto conversion_factor = math::RatioDivide<Period, typename To::Period>::rational;
13
14 auto count = static_cast<imax>(from.count());
15 count *= conversion_factor.numerator();
16 count /= conversion_factor.denominator();
17
18 using Rep2 = To::Representation;
19 return To(static_cast<Rep2>(count));
20 }
21 };
22}
23
24template<concepts::InstanceOf<Duration> To>
25constexpr inline auto duration_cast = detail::DurationCastFunction<To> {};
26}
27
28namespace di {
30}
constexpr auto numerator() const -> T
Definition rational.h:25
Definition duration.h:9
constexpr auto duration_cast
Definition duration_cast.h:25
intmax_t imax
Definition integers.h:40
Definition any_storable.h:9
constexpr auto count
Definition count.h:37
static constexpr Rational< ratio_intmax_t > rational
Definition ratio.h:36