refactor: asserts for zero simplified in quantity

This commit is contained in:
Mateusz Pusz
2023-09-13 08:52:01 +02:00
parent 507d5bc446
commit c4ad3039b3

View File

@@ -262,7 +262,7 @@ public:
} -> std::same_as<rep&>; } -> std::same_as<rep&>;
} }
{ {
gsl_ExpectsAudit(q.numerical_value() != quantity_values<rep>::zero()); gsl_ExpectsAudit(q != zero());
value_ %= q.numerical_value(); value_ %= q.numerical_value();
return *this; return *this;
} }
@@ -312,7 +312,7 @@ public:
} }
constexpr quantity& operator/=(const Q& rhs) constexpr quantity& operator/=(const Q& rhs)
{ {
gsl_ExpectsAudit(rhs.numerical_value() != quantity_values<typename Q::rep>::zero()); gsl_ExpectsAudit(rhs != rhs.zero());
value_ /= rhs.numerical_value(); value_ /= rhs.numerical_value();
return *this; return *this;
} }
@@ -358,7 +358,7 @@ template<auto R1, typename Rep1, auto R2, typename Rep2>
detail::InvocableQuantities<std::modulus<>, quantity<R1, Rep1>, quantity<R2, Rep2>> detail::InvocableQuantities<std::modulus<>, quantity<R1, Rep1>, quantity<R2, Rep2>>
[[nodiscard]] constexpr Quantity auto operator%(const quantity<R1, Rep1>& lhs, const quantity<R2, Rep2>& rhs) [[nodiscard]] constexpr Quantity auto operator%(const quantity<R1, Rep1>& lhs, const quantity<R2, Rep2>& rhs)
{ {
gsl_ExpectsAudit(rhs.numerical_value() != quantity_values<Rep1>::zero()); gsl_ExpectsAudit(rhs != rhs.zero());
using ret = detail::common_quantity_for<std::modulus<>, quantity<R1, Rep1>, quantity<R2, Rep2>>; using ret = detail::common_quantity_for<std::modulus<>, quantity<R1, Rep1>, quantity<R2, Rep2>>;
return make_quantity<ret::reference>(ret(lhs).numerical_value() % ret(rhs).numerical_value()); return make_quantity<ret::reference>(ret(lhs).numerical_value() % ret(rhs).numerical_value());
} }
@@ -391,7 +391,7 @@ template<auto R1, typename Rep1, auto R2, typename Rep2>
requires detail::InvokeResultOf<(get_quantity_spec(R1) / get_quantity_spec(R2)).character, std::divides<>, Rep1, Rep2> requires detail::InvokeResultOf<(get_quantity_spec(R1) / get_quantity_spec(R2)).character, std::divides<>, Rep1, Rep2>
[[nodiscard]] constexpr Quantity auto operator/(const quantity<R1, Rep1>& lhs, const quantity<R2, Rep2>& rhs) [[nodiscard]] constexpr Quantity auto operator/(const quantity<R1, Rep1>& lhs, const quantity<R2, Rep2>& rhs)
{ {
gsl_ExpectsAudit(rhs.numerical_value() != quantity_values<Rep2>::zero()); gsl_ExpectsAudit(rhs != rhs.zero());
return make_quantity<R1 / R2>(lhs.numerical_value() / rhs.numerical_value()); return make_quantity<R1 / R2>(lhs.numerical_value() / rhs.numerical_value());
} }