summaryrefslogtreecommitdiff
path: root/include/tools
diff options
context:
space:
mode:
authorNoel Grandin <noel.grandin@collabora.co.uk>2017-09-13 10:20:59 +0200
committerNoel Grandin <noel.grandin@collabora.co.uk>2017-09-13 15:46:47 +0200
commit1b1afc10f4d90e37c5e81961b8b8902133e65b00 (patch)
treefb6f68d743b334b8df4fc374afe68dc49fd6cbb8 /include/tools
parentcc233992dfe0fa9732c24774852d037d161546ce (diff)
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 <ci@libreoffice.org> Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Diffstat (limited to 'include/tools')
-rw-r--r--include/tools/fract.hxx23
1 files changed, 19 insertions, 4 deletions
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: */