Remove inverse_if_negative()

Fixes #332.
This commit is contained in:
Chip Hogg
2022-04-09 17:48:04 +00:00
parent 85d6e35d79
commit 5c0eb0667c

View File

@@ -23,6 +23,7 @@
#pragma once
#include <units/derived_dimension.h>
#include <units/magnitude.h>
namespace units::detail {
@@ -35,23 +36,20 @@ inline constexpr bool same_scaled_units<exponent_list<Es...>, Us...> = (UnitOf<U
// derived_unit
template<Exponent E>
constexpr ratio inverse_if_negative(const ratio& r)
template<Unit... Us, typename... Es>
constexpr Magnitude auto derived_mag(exponent_list<Es...>)
{
if constexpr (E::num * E::den > 0)
return r;
else
return inverse(r);
return (as_magnitude<1>() * ... *
pow<ratio{Es::num, Es::den}>(Us::mag / dimension_unit<typename Es::dimension>::mag));
}
template<Unit... Us, typename... Es>
constexpr ratio derived_ratio(exponent_list<Es...>)
constexpr ratio derived_ratio(exponent_list<Es...> es)
{
return (... * inverse_if_negative<Es>(
pow<detail::abs(Es::num)>(Us::ratio / dimension_unit<typename Es::dimension>::ratio)));
return as_ratio(derived_mag<Us...>(es));
}
template<DerivedDimension D, Unit... Us>
using derived_unit = scaled_unit<derived_ratio<Us...>(typename D::recipe()), typename D::coherent_unit::reference>;
using derived_unit = scaled_unit<derived_mag<Us...>(typename D::recipe()), typename D::coherent_unit::reference>;
} // namespace units::detail