From 5537a7ed35a597f68701fd97d3bc4670b92a9bf5 Mon Sep 17 00:00:00 2001 From: John Ralls Date: Fri, 23 Oct 2015 14:14:20 -0700 Subject: [PATCH] Implement gnc_numeric_invert via GncRational::invert. --- src/libqof/qof/gnc-numeric.cpp | 15 +-------------- src/libqof/qof/gnc-rational.cpp | 4 +--- src/libqof/qof/gnc-rational.hpp | 1 + 3 files changed, 3 insertions(+), 17 deletions(-) diff --git a/src/libqof/qof/gnc-numeric.cpp b/src/libqof/qof/gnc-numeric.cpp index 547b6198ce..f9adbdfb1d 100644 --- a/src/libqof/qof/gnc-numeric.cpp +++ b/src/libqof/qof/gnc-numeric.cpp @@ -487,20 +487,7 @@ gnc_numeric_invert(gnc_numeric num) { if (num.num == 0) return gnc_numeric_zero(); - if (num.denom > 0) - { - if (num.num < 0) - return gnc_numeric_create (-num.denom, -num.num); - return gnc_numeric_create (num.denom, num.num); - } - else /* Negative denominator means multiply instead of divide. */ - { - int64_t mult = (num.num < 0 ? INT64_C(-1) : INT64_C(1)); - qofint128 denom = mult128(-num.denom, mult * num.num); - if (denom.hi) - return gnc_numeric_error(GNC_ERROR_OVERFLOW); - return gnc_numeric_create (mult, denom.lo); - } + return static_cast(GncNumeric(num).inv()); } /* ******************************************************************* * double_to_gnc_numeric diff --git a/src/libqof/qof/gnc-rational.cpp b/src/libqof/qof/gnc-rational.cpp index 35e7e6fef4..a3db422057 100644 --- a/src/libqof/qof/gnc-rational.cpp +++ b/src/libqof/qof/gnc-rational.cpp @@ -80,9 +80,7 @@ GncRational::operator-() const noexcept GncRational& GncRational::inv () noexcept { - auto tmp = m_num; - m_num = m_den; - m_den = tmp; + std::swap(m_num, m_den); GncRational b {1, 1}; GncDenom d {*this, b, INT64_C(0), GNC_HOW_RND_NEVER }; diff --git a/src/libqof/qof/gnc-rational.hpp b/src/libqof/qof/gnc-rational.hpp index dd2578961a..1c4edc640f 100644 --- a/src/libqof/qof/gnc-rational.hpp +++ b/src/libqof/qof/gnc-rational.hpp @@ -44,6 +44,7 @@ public: GncRational& div(GncRational b, GncDenom& d) noexcept; GncRational& add(const GncRational& b, GncDenom& d) noexcept; GncRational& sub(const GncRational& b, GncDenom& d) noexcept; + /** Inverts the number, equivalent of /= {1, 1} */ GncRational& inv() noexcept;