include/tools/UnitConversion.hxx |    7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

New commits:
commit 70a1d5258648a442525bd0b365ce92763f2a79fb
Author:     Mike Kaganski <mike.kagan...@collabora.com>
AuthorDate: Sun Feb 7 22:16:41 2021 +0100
Commit:     Mike Kaganski <mike.kagan...@collabora.com>
CommitDate: Mon Feb 8 05:08:21 2021 +0100

    Small refactor
    
    Change-Id: I0493c505be1eb06b121535128ae819b294c643a3
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/110554
    Tested-by: Jenkins
    Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com>

diff --git a/include/tools/UnitConversion.hxx b/include/tools/UnitConversion.hxx
index 7aac3f36ebd0..802a372a546d 100644
--- a/include/tools/UnitConversion.hxx
+++ b/include/tools/UnitConversion.hxx
@@ -23,15 +23,14 @@ template <typename I> constexpr bool isBetween(I n, 
sal_Int64 min, sal_Int64 max
         return n <= sal_uInt64(max);
 }
 
-constexpr int actualMul(int m, int d) { return (m % d == 0) ? m / d : (d % m 
== 0) ? 1 : m; }
-constexpr int actualDiv(int m, int d) { return (m % d == 0) ? 1 : (d % m == 0) 
? d / m : d; }
+constexpr int gcd(int a, int b) { return b == 0 ? a : gcd(b, a % b); }
 
 // Ensure correct rounding for both positive and negative integers
 template <int mul, int div, typename I, 
std::enable_if_t<std::is_integral_v<I>, int> = 0>
 constexpr sal_Int64 MulDiv(I n)
 {
     static_assert(mul > 0 && div > 0);
-    constexpr int m = actualMul(mul, div), d = actualDiv(mul, div);
+    constexpr int m = mul / gcd(mul, div), d = div / gcd(mul, div);
     assert(isBetween(n, (SAL_MIN_INT64 + d / 2) / m, (SAL_MAX_INT64 - d / 2) / 
m));
     return (n >= 0 ? (sal_Int64(n) * m + d / 2) : (sal_Int64(n) * m - d / 2)) 
/ d;
 }
@@ -45,7 +44,7 @@ constexpr double MulDiv(F f)
 template <int mul, int div, typename I, 
std::enable_if_t<std::is_integral_v<I>, int> = 0>
 constexpr sal_Int64 sanitizeMulDiv(I n)
 {
-    constexpr int m = actualMul(mul, div), d = actualDiv(mul, div);
+    constexpr int m = mul / gcd(mul, div), d = div / gcd(mul, div);
     if constexpr (m > d)
         if (!isBetween(n, SAL_MIN_INT64 / m * d + d / 2, SAL_MAX_INT64 / m * d 
- d / 2))
             return n > 0 ? SAL_MAX_INT64 : SAL_MIN_INT64; // saturate
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to