15 template<
class ToDuration, RoundingMethod rounding_type = RoundingMethod::Up,
class Rep =
unsigned int, fiber::CRatio Period = std::ratio<1>>
17 using conversion =
typename std::ratio_divide<Period, typename ToDuration::period>::type;
19 if constexpr (std::is_unsigned_v<Rep>){
20 const auto mul = d.count() * conversion::num;
21 const auto round = mul + conversion::den/2;
22 const auto new_count = round / conversion::den;
23 ToDuration result(
static_cast<ToDuration::rep
>(new_count));
26 const auto mul = d.count() * conversion::num;
27 const auto round = ((d.count() > 0) ? (mul + conversion::den/2) : (mul - conversion::den/2));
28 const auto new_count = round / conversion::den;
29 ToDuration result(
static_cast<ToDuration::rep
>(new_count));
33 if constexpr (std::is_unsigned_v<Rep>){
34 const auto mul = d.count() * conversion::num;
35 const auto round = mul + (conversion::den-1);
36 const auto new_count = round / conversion::den;
37 ToDuration result(
static_cast<ToDuration::rep
>(new_count));
40 const auto mul = d.count() * conversion::num;
41 const auto round = ((d.count() > 0) ? (mul + (conversion::den-1)) : (mul - (conversion::den-1)));
42 const auto new_count = round / conversion::den;
43 ToDuration result(
static_cast<ToDuration::rep
>(new_count));
47 const auto mul = d.count() * conversion::num;
48 const auto round = mul;
49 const auto new_count = round / conversion::den;
50 ToDuration result(
static_cast<ToDuration::rep
>(new_count));
constexpr ToDuration rounding_duration_cast(const std::chrono::duration< Rep, Period > &d)
duration cast that round to the nearest tick of the new ToDuration
Definition rounding_duration_cast.hpp:16