From 1b1afc10f4d90e37c5e81961b8b8902133e65b00 Mon Sep 17 00:00:00 2001 From: Noel Grandin Date: Wed, 13 Sep 2017 10:20:59 +0200 Subject: Fraction: make conversion operators and constructor explicit and simplify some of the calculations that needed to be changed. Which resulted in one unit test needing to change by one pixel, let's hope not an indication of a real problem. Change-Id: Ie56434f35f4e58d21ee6f671392e93dc7542fca3 Reviewed-on: https://gerrit.libreoffice.org/42240 Tested-by: Jenkins Reviewed-by: Noel Grandin --- include/tools/fract.hxx | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) (limited to 'include/tools') diff --git a/include/tools/fract.hxx b/include/tools/fract.hxx index 64e694fb12df..4cde7db061db 100644 --- a/include/tools/fract.hxx +++ b/include/tools/fract.hxx @@ -27,7 +27,7 @@ class SvStream; // This class uses the platform defined type 'long' as valid values but do all // calculations using sal_Int64 with checks for 'long' overflows. -class SAL_WARN_UNUSED TOOLS_DLLPUBLIC Fraction +class SAL_WARN_UNUSED TOOLS_DLLPUBLIC Fraction final { struct Impl; @@ -40,7 +40,7 @@ public: Fraction( const Fraction & rFrac ); Fraction( Fraction && rFrac ); Fraction( long nNum, long nDen ); - Fraction( double dVal ); + explicit Fraction( double dVal ); ~Fraction(); bool IsValid() const; @@ -48,16 +48,21 @@ public: long GetNumerator() const; long GetDenominator() const; - operator long() const; - operator double() const; + explicit operator long() const; + explicit operator double() const; Fraction& operator=( const Fraction& rfrFrac ); Fraction& operator=( Fraction&& rfrFrac ); + Fraction& operator=( double v ) { return operator=(Fraction(v)); } Fraction& operator+=( const Fraction& rfrFrac ); Fraction& operator-=( const Fraction& rfrFrac ); Fraction& operator*=( const Fraction& rfrFrac ); Fraction& operator/=( const Fraction& rfrFrac ); + Fraction& operator+=( double v ) { return operator+=(Fraction(v)); } + Fraction& operator-=( double v ) { return operator-=(Fraction(v)); } + Fraction& operator*=( double v ) { return operator*=(Fraction(v)); } + Fraction& operator/=( double v ) { return operator/=(Fraction(v)); } void ReduceInaccurate( unsigned nSignificantBits ); @@ -85,6 +90,16 @@ TOOLS_DLLPUBLIC bool operator !=( const Fraction& rVal1, const Fraction& rVal2 ) TOOLS_DLLPUBLIC bool operator <=( const Fraction& rVal1, const Fraction& rVal2 ); TOOLS_DLLPUBLIC bool operator >=( const Fraction& rVal1, const Fraction& rVal2 ); +inline Fraction operator+( double v1, const Fraction& rVal2 ) { return Fraction(v1) + rVal2; } +inline Fraction operator-( double v1, const Fraction& rVal2 ) { return Fraction(v1) - rVal2; } +inline Fraction operator*( double v1, const Fraction& rVal2 ) { return Fraction(v1) * rVal2; } +inline Fraction operator/( double v1, const Fraction& rVal2 ) { return Fraction(v1) / rVal2; } + +inline Fraction operator+( const Fraction& rVal1, double v2 ) { return rVal1 + Fraction(v2); } +inline Fraction operator-( const Fraction& rVal1, double v2 ) { return rVal1 - Fraction(v2); } +inline Fraction operator*( const Fraction& rVal1, double v2 ) { return rVal1 * Fraction(v2); } +inline Fraction operator/( const Fraction& rVal1, double v2 ) { return rVal1 / Fraction(v2); } + #endif /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -- cgit