From 726c67b19403bd21e9f00c205fc3eff3a082d709 Mon Sep 17 00:00:00 2001 From: Mateusz Pusz Date: Fri, 16 Sep 2022 17:40:13 -0600 Subject: [PATCH] refactor: `ratio` usage added to `power` --- .../include/units/bits/expression_template.h | 52 +++++++------------ 1 file changed, 20 insertions(+), 32 deletions(-) diff --git a/src/core/include/units/bits/expression_template.h b/src/core/include/units/bits/expression_template.h index 054a5900..e911428d 100644 --- a/src/core/include/units/bits/expression_template.h +++ b/src/core/include/units/bits/expression_template.h @@ -31,11 +31,14 @@ namespace units { template struct type_list {}; -template +template struct per {}; -template -struct power; +template +struct power { + using factor = F; + static constexpr ::units::ratio ratio{Num, Den...}; +}; // TODO make_power() that will simplify cases like ? @@ -49,38 +52,25 @@ inline constexpr bool is_specialization_of_power> = true; } // namespace detail -template -struct power { - using factor = F; - static constexpr int num = Num; - static constexpr int den = 1; -}; - -template -struct power { - using factor = F; - static constexpr int num = Num; - static constexpr int den = Den; -}; - namespace detail { -template +template +// template // TODO consteval auto power_or_T_impl() { - constexpr ratio r{Num, Den}; - if constexpr (r.den == 1) { - if constexpr (r.num == 1) + if constexpr (R.den == 1) { + if constexpr (R.num == 1) return T{}; else - return power{}; + return power{}; } else { - return power{}; + return power{}; } }; -template -using power_or_T = decltype(power_or_T_impl()); +template +// template // TODO +using power_or_T = decltype(power_or_T_impl()); // type_power // template @@ -142,16 +132,14 @@ struct expr_consolidate_impl> { template struct expr_consolidate_impl, Rest...>> { - using type = expr_consolidate_impl< - type_list::num + power::den, power::den>, Rest...>>::type; + using type = expr_consolidate_impl::ratio + 1>, Rest...>>::type; }; template struct expr_consolidate_impl, power, Rest...>> { - static constexpr ratio r = - ratio(power::num, power::den) + ratio(power::num, power::den); + static constexpr ratio r = power::ratio + power::ratio; using type = conditional>::type, - typename expr_consolidate_impl, Rest...>>::type>; + typename expr_consolidate_impl, Rest...>>::type>; }; template @@ -162,8 +150,8 @@ using expr_consolidate = typename expr_consolidate_impl::type; template struct expr_simplify_power { - static constexpr ratio r = ratio(powerNum::num, powerNum::den) - ratio(powerDen::num, powerDen::den); - using type = power_or_T; + static constexpr ratio r = powerNum::ratio - powerDen::ratio; + using type = power_or_T; using num = conditional<(r > 0), type_list, type_list<>>; using den = conditional<(r < 0), type_list, type_list<>>; };