diff --git a/src/include/units/dimension.h b/src/include/units/dimension.h index 092573d8..35fa36f5 100644 --- a/src/include/units/dimension.h +++ b/src/include/units/dimension.h @@ -58,18 +58,18 @@ namespace units { } template - bool concept Exp = detail::is_exp::value; + bool concept Exponent = detail::is_exp::value; // exp_less - template + template struct exp_less : dim_id_less { }; // exp_invert - template + template struct exp_invert; template @@ -77,21 +77,21 @@ namespace units { using type = exp; }; - template - using exp_invert_t = typename exp_invert::type; + template + using exp_invert_t = typename exp_invert::type; // dimension - template - using dimension = mp::type_list; + template + using dimension = mp::type_list; // is_dimension namespace detail { template struct is_dimension : std::false_type {}; - template - struct is_dimension> : std::bool_constant<(is_exp::value && ...)> {}; + template + struct is_dimension> : std::bool_constant<(is_exp::value && ...)> {}; } template @@ -113,19 +113,19 @@ namespace units { using type = dimension<>; }; - template + template struct dim_consolidate> { using type = dimension; }; - template + template struct dim_consolidate> { using rest = dim_consolidate_t>; using type = std::conditional_t>, dimension, mp::type_list_push_front_t>; }; - template + template struct dim_consolidate, exp, ERest...>> { using type = std::conditional_t>, dim_consolidate_t, ERest...>>>; @@ -133,13 +133,13 @@ namespace units { } // namespace detail - template + template struct make_dimension { - using type = detail::dim_consolidate_t, exp_less>>; + using type = detail::dim_consolidate_t, exp_less>>; }; - template - using make_dimension_t = typename make_dimension::type; + template + using make_dimension_t = typename make_dimension::type; @@ -148,9 +148,9 @@ namespace units { template struct dimension_multiply; - template - struct dimension_multiply, dimension> { - using type = make_dimension_t; + template + struct dimension_multiply, dimension> { + using type = make_dimension_t; }; template @@ -161,9 +161,9 @@ namespace units { template struct dimension_divide; - template - struct dimension_divide, dimension> - : dimension_multiply, dimension...>> { + template + struct dimension_divide, dimension> + : dimension_multiply, dimension...>> { }; template diff --git a/src/include/units/quantity.h b/src/include/units/quantity.h index 82123b0a..b821b95c 100644 --- a/src/include/units/quantity.h +++ b/src/include/units/quantity.h @@ -30,7 +30,7 @@ namespace units { // is_quantity - template + template class quantity; namespace detail { @@ -39,8 +39,8 @@ namespace units { struct is_quantity : std::false_type { }; - template - struct is_quantity> : std::true_type { + template + struct is_quantity> : std::true_type { }; } @@ -60,50 +60,50 @@ namespace units { namespace detail { - template + template struct quantity_cast_impl { - template - static constexpr To cast(const quantity& q) + template + static constexpr To cast(const quantity& q) { - return To(static_cast(static_cast(q.count()) * static_cast(CRatio::num) / - static_cast(CRatio::den))); + return To(static_cast(static_cast(q.count()) * static_cast(CR::num) / + static_cast(CR::den))); } }; - template - struct quantity_cast_impl { - template - static constexpr To cast(const quantity& q) + template + struct quantity_cast_impl { + template + static constexpr To cast(const quantity& q) { return To(static_cast(q.count())); } }; - template - struct quantity_cast_impl { - template - static constexpr To cast(const quantity& q) + template + struct quantity_cast_impl { + template + static constexpr To cast(const quantity& q) { - return To(static_cast(static_cast(q.count()) / static_cast(CRatio::den))); + return To(static_cast(static_cast(q.count()) / static_cast(CR::den))); } }; - template - struct quantity_cast_impl { - template - static constexpr To cast(const quantity& q) + template + struct quantity_cast_impl { + template + static constexpr To cast(const quantity& q) { - return To(static_cast(static_cast(q.count()) * static_cast(CRatio::num))); + return To(static_cast(static_cast(q.count()) * static_cast(CR::num))); } }; } // namespace detail - template - requires mp::Same - constexpr To quantity_cast(const quantity& q) + template + requires mp::Same + constexpr To quantity_cast(const quantity& q) { - using c_ratio = std::ratio_divide; + using c_ratio = std::ratio_divide; using c_rep = std::common_type_t; using cast = detail::quantity_cast_impl; return cast::cast(q); @@ -120,13 +120,13 @@ namespace units { // quantity - template> + template> class quantity { Rep value_; public: - using dimension = Dimension; + using dimension = D; using rep = Rep; - using ratio = Ratio; + using ratio = R; static_assert(!detail::is_quantity::value, "rep cannot be a quantity"); static_assert(ratio::num > 0, "ratio must be positive"); @@ -210,149 +210,149 @@ namespace units { }; // clang-format off - template - std::common_type_t, quantity> - constexpr operator+(const quantity& lhs, - const quantity& rhs) + template + std::common_type_t, quantity> + constexpr operator+(const quantity& lhs, + const quantity& rhs) { - using ret = std::common_type_t, quantity>; + using ret = std::common_type_t, quantity>; return ret(ret(lhs).count() + ret(rhs).count()); } - template - std::common_type_t, quantity> - constexpr operator-(const quantity& lhs, - const quantity& rhs) + template + std::common_type_t, quantity> + constexpr operator-(const quantity& lhs, + const quantity& rhs) { - using ret = std::common_type_t, quantity>; + using ret = std::common_type_t, quantity>; return ret(ret(lhs).count() - ret(rhs).count()); } - template - quantity, Ratio> - constexpr operator*(const quantity& q, + template + quantity, R> + constexpr operator*(const quantity& q, const Rep2& v) { - using ret = quantity, Ratio>; + using ret = quantity, R>; return ret(ret(q).count() * v); } - template - quantity, Ratio> + template + quantity, R> constexpr operator*(const Rep1& v, - const quantity& q) + const quantity& q) { return q * v; } - template - requires treat_as_floating_point_v> || std::ratio_multiply::den == 1 - quantity, std::common_type_t, std::ratio_multiply> - constexpr operator*(const quantity& lhs, - const quantity& rhs) + template + requires treat_as_floating_point_v> || std::ratio_multiply::den == 1 + quantity, std::common_type_t, std::ratio_multiply> + constexpr operator*(const quantity& lhs, + const quantity& rhs) { - using ret = quantity, std::common_type_t, std::ratio_multiply>; + using ret = quantity, std::common_type_t, std::ratio_multiply>; return ret(lhs.count() * rhs.count()); } - template - quantity>, std::common_type_t, Ratio> + template + quantity>, std::common_type_t, R> constexpr operator/(const Rep1& v, - const quantity, Rep2, Ratio>& q) + const quantity, Rep2, R>& q) { - using ret = quantity>, std::common_type_t, Ratio>; - using den = quantity, std::common_type_t, Ratio>; + using ret = quantity>, std::common_type_t, R>; + using den = quantity, std::common_type_t, R>; return ret(v / den(q).count()); } - template - quantity, Ratio> - constexpr operator/(const quantity& q, + template + quantity, R> + constexpr operator/(const quantity& q, const Rep2& v) { - using ret = quantity, Ratio>; + using ret = quantity, R>; return ret(ret(q).count() / v); } - template + template std::common_type_t - constexpr operator/(const quantity& lhs, - const quantity& rhs) + constexpr operator/(const quantity& lhs, + const quantity& rhs) { - using cq = std::common_type_t, quantity>; + using cq = std::common_type_t, quantity>; return cq(lhs).count() / cq(rhs).count(); } - template - requires treat_as_floating_point_v> || std::ratio_divide::den == 1 - quantity, std::common_type_t, std::ratio_divide> - constexpr operator/(const quantity& lhs, - const quantity& rhs) + template + requires treat_as_floating_point_v> || std::ratio_divide::den == 1 + quantity, std::common_type_t, std::ratio_divide> + constexpr operator/(const quantity& lhs, + const quantity& rhs) { - using ret = quantity, std::common_type_t, std::ratio_divide>; + using ret = quantity, std::common_type_t, std::ratio_divide>; return ret(lhs.count() / rhs.count()); } - template - quantity, Ratio> - constexpr operator%(const quantity& q, + template + quantity, R> + constexpr operator%(const quantity& q, const Rep2& v) { - using ret = quantity, Ratio>; + using ret = quantity, R>; return ret(ret(q).count() % v); } - template - std::common_type_t, quantity> - constexpr operator%(const quantity& lhs, - const quantity& rhs) + template + std::common_type_t, quantity> + constexpr operator%(const quantity& lhs, + const quantity& rhs) { - using ret = std::common_type_t, quantity>; + using ret = std::common_type_t, quantity>; return ret(ret(lhs).count() % ret(rhs).count()); } // clang-format on - template - constexpr bool operator==(const quantity& lhs, - const quantity& rhs) + template + constexpr bool operator==(const quantity& lhs, + const quantity& rhs) { - using ct = std::common_type_t, quantity>; + using ct = std::common_type_t, quantity>; return ct(lhs).count() == ct(rhs).count(); } - template - constexpr bool operator!=(const quantity& lhs, - const quantity& rhs) + template + constexpr bool operator!=(const quantity& lhs, + const quantity& rhs) { return !(lhs == rhs); } - template - constexpr bool operator<(const quantity& lhs, - const quantity& rhs) + template + constexpr bool operator<(const quantity& lhs, + const quantity& rhs) { - using ct = std::common_type_t, quantity>; + using ct = std::common_type_t, quantity>; return ct(lhs).count() < ct(rhs).count(); } - template - constexpr bool operator<=(const quantity& lhs, - const quantity& rhs) + template + constexpr bool operator<=(const quantity& lhs, + const quantity& rhs) { return !(rhs < lhs); } - template - constexpr bool operator>(const quantity& lhs, - const quantity& rhs) + template + constexpr bool operator>(const quantity& lhs, + const quantity& rhs) { return rhs < lhs; } - template - constexpr bool operator>=(const quantity& lhs, - const quantity& rhs) + template + constexpr bool operator>=(const quantity& lhs, + const quantity& rhs) { return !(lhs < rhs); } @@ -362,10 +362,10 @@ namespace units { namespace std { // todo: simplified - template - struct common_type, units::quantity> { + template + struct common_type, units::quantity> { using type = - units::quantity, mp::common_ratio_t>; + units::quantity, mp::common_ratio_t>; }; } // namespace std diff --git a/test/test_quantity.cpp b/test/test_quantity.cpp index 4793c141..801b7172 100644 --- a/test/test_quantity.cpp +++ b/test/test_quantity.cpp @@ -22,7 +22,7 @@ #include "units/si/velocity.h" #include - +#include using namespace units; using namespace units::literals;