mirror of
https://github.com/mpusz/mp-units.git
synced 2025-08-06 13:44:27 +02:00
@@ -106,7 +106,7 @@ using quantity_like_type = quantity<typename quantity_like_traits<Q>::dimension,
|
|||||||
*/
|
*/
|
||||||
template<Dimension D, UnitOf<D> U, QuantityValue Rep = double>
|
template<Dimension D, UnitOf<D> U, QuantityValue Rep = double>
|
||||||
class quantity {
|
class quantity {
|
||||||
Rep value_;
|
Rep number_;
|
||||||
public:
|
public:
|
||||||
// member types and values
|
// member types and values
|
||||||
using dimension = D;
|
using dimension = D;
|
||||||
@@ -146,10 +146,10 @@ public:
|
|||||||
|
|
||||||
template<safe_convertible_to_<rep> Value>
|
template<safe_convertible_to_<rep> Value>
|
||||||
constexpr explicit(!(is_same_v<dimension, dim_one> && is_same_v<unit, ::units::one>))
|
constexpr explicit(!(is_same_v<dimension, dim_one> && is_same_v<unit, ::units::one>))
|
||||||
quantity(const Value& v) : value_(v) {}
|
quantity(const Value& v) : number_(v) {}
|
||||||
|
|
||||||
template<safe_castable_to_<quantity> Q>
|
template<safe_castable_to_<quantity> Q>
|
||||||
constexpr explicit(false) quantity(const Q& q) : value_(quantity_cast<quantity>(q).number()) {}
|
constexpr explicit(false) quantity(const Q& q) : number_(quantity_cast<quantity>(q).number()) {}
|
||||||
|
|
||||||
template<QuantityLike Q>
|
template<QuantityLike Q>
|
||||||
requires safe_castable_to_<quantity_like_type<Q>, quantity>
|
requires safe_castable_to_<quantity_like_type<Q>, quantity>
|
||||||
@@ -159,7 +159,7 @@ public:
|
|||||||
quantity& operator=(quantity&&) = default;
|
quantity& operator=(quantity&&) = default;
|
||||||
|
|
||||||
// data access
|
// data access
|
||||||
[[nodiscard]] constexpr rep number() const noexcept { return value_; }
|
[[nodiscard]] constexpr rep number() const noexcept { return number_; }
|
||||||
|
|
||||||
// member unary operators
|
// member unary operators
|
||||||
[[nodiscard]] constexpr Quantity auto operator+() const
|
[[nodiscard]] constexpr Quantity auto operator+() const
|
||||||
@@ -179,40 +179,40 @@ public:
|
|||||||
constexpr quantity& operator++()
|
constexpr quantity& operator++()
|
||||||
requires requires(rep v) { { ++v } -> std::same_as<rep&>; }
|
requires requires(rep v) { { ++v } -> std::same_as<rep&>; }
|
||||||
{
|
{
|
||||||
++value_;
|
++number_;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
[[nodiscard]] constexpr quantity operator++(int)
|
[[nodiscard]] constexpr quantity operator++(int)
|
||||||
requires requires(rep v) { { v++ } -> std::same_as<rep>; }
|
requires requires(rep v) { { v++ } -> std::same_as<rep>; }
|
||||||
{
|
{
|
||||||
return quantity(value_++);
|
return quantity(number_++);
|
||||||
}
|
}
|
||||||
|
|
||||||
constexpr quantity& operator--()
|
constexpr quantity& operator--()
|
||||||
requires requires(rep v) { { --v } -> std::same_as<rep&>; }
|
requires requires(rep v) { { --v } -> std::same_as<rep&>; }
|
||||||
{
|
{
|
||||||
--value_;
|
--number_;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
[[nodiscard]] constexpr quantity operator--(int)
|
[[nodiscard]] constexpr quantity operator--(int)
|
||||||
requires requires(rep v) { { v-- } -> std::same_as<rep>; }
|
requires requires(rep v) { { v-- } -> std::same_as<rep>; }
|
||||||
{
|
{
|
||||||
return quantity(value_--);
|
return quantity(number_--);
|
||||||
}
|
}
|
||||||
|
|
||||||
constexpr quantity& operator+=(const quantity& q)
|
constexpr quantity& operator+=(const quantity& q)
|
||||||
requires requires(rep a, rep b) { { a += b } -> std::same_as<rep&>; }
|
requires requires(rep a, rep b) { { a += b } -> std::same_as<rep&>; }
|
||||||
{
|
{
|
||||||
value_ += q.number();
|
number_ += q.number();
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
constexpr quantity& operator-=(const quantity& q)
|
constexpr quantity& operator-=(const quantity& q)
|
||||||
requires requires(rep a, rep b) { { a -= b } -> std::same_as<rep&>; }
|
requires requires(rep a, rep b) { { a -= b } -> std::same_as<rep&>; }
|
||||||
{
|
{
|
||||||
value_ -= q.number();
|
number_ -= q.number();
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -220,14 +220,14 @@ public:
|
|||||||
constexpr quantity& operator*=(const Rep2& rhs)
|
constexpr quantity& operator*=(const Rep2& rhs)
|
||||||
requires requires(rep a, const Rep2 b) { { a *= b } -> std::same_as<rep&>; }
|
requires requires(rep a, const Rep2 b) { { a *= b } -> std::same_as<rep&>; }
|
||||||
{
|
{
|
||||||
value_ *= rhs;
|
number_ *= rhs;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
template<typename Rep2>
|
template<typename Rep2>
|
||||||
constexpr quantity& operator*=(const dimensionless<units::one, Rep2>& rhs)
|
constexpr quantity& operator*=(const dimensionless<units::one, Rep2>& rhs)
|
||||||
requires requires(rep a, const Rep2 b) { { a *= b } -> std::same_as<rep&>; }
|
requires requires(rep a, const Rep2 b) { { a *= b } -> std::same_as<rep&>; }
|
||||||
{
|
{
|
||||||
value_ *= rhs.number();
|
number_ *= rhs.number();
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -236,7 +236,7 @@ public:
|
|||||||
requires requires(rep a, const Rep2 b) { { a /= b } -> std::same_as<rep&>; }
|
requires requires(rep a, const Rep2 b) { { a /= b } -> std::same_as<rep&>; }
|
||||||
{
|
{
|
||||||
gsl_ExpectsAudit(rhs != quantity_values<Rep2>::zero());
|
gsl_ExpectsAudit(rhs != quantity_values<Rep2>::zero());
|
||||||
value_ /= rhs;
|
number_ /= rhs;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
template<typename Rep2>
|
template<typename Rep2>
|
||||||
@@ -244,7 +244,7 @@ public:
|
|||||||
requires requires(rep a, const Rep2 b) { { a /= b } -> std::same_as<rep&>; }
|
requires requires(rep a, const Rep2 b) { { a /= b } -> std::same_as<rep&>; }
|
||||||
{
|
{
|
||||||
gsl_ExpectsAudit(rhs.number() != quantity_values<Rep2>::zero());
|
gsl_ExpectsAudit(rhs.number() != quantity_values<Rep2>::zero());
|
||||||
value_ /= rhs.number();
|
number_ /= rhs.number();
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -254,7 +254,7 @@ public:
|
|||||||
requires(rep a, const Rep2 b) { { a %= b } -> std::same_as<rep&>; }
|
requires(rep a, const Rep2 b) { { a %= b } -> std::same_as<rep&>; }
|
||||||
{
|
{
|
||||||
gsl_ExpectsAudit(rhs != quantity_values<Rep2>::zero());
|
gsl_ExpectsAudit(rhs != quantity_values<Rep2>::zero());
|
||||||
value_ %= rhs;
|
number_ %= rhs;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -264,7 +264,7 @@ public:
|
|||||||
requires(rep a, const Rep2 b) { { a %= b } -> std::same_as<rep&>; }
|
requires(rep a, const Rep2 b) { { a %= b } -> std::same_as<rep&>; }
|
||||||
{
|
{
|
||||||
gsl_ExpectsAudit(rhs.number() != quantity_values<Rep2>::zero());
|
gsl_ExpectsAudit(rhs.number() != quantity_values<Rep2>::zero());
|
||||||
value_ %= rhs.number();
|
number_ %= rhs.number();
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -273,7 +273,7 @@ public:
|
|||||||
requires(rep a, rep b) { { a %= b } -> std::same_as<rep&>; }
|
requires(rep a, rep b) { { a %= b } -> std::same_as<rep&>; }
|
||||||
{
|
{
|
||||||
gsl_ExpectsAudit(q.number() != quantity_values<rep>::zero());
|
gsl_ExpectsAudit(q.number() != quantity_values<rep>::zero());
|
||||||
value_ %= q.number();
|
number_ %= q.number();
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user