From d7a8166720e4e299ef06771c58669a223090cd1d Mon Sep 17 00:00:00 2001 From: Marc Rollins Date: Mon, 18 Aug 2014 11:42:10 -0700 Subject: [PATCH 1/5] Implementing *= operator. Implementing * in terms of it. --- modules/core/include/opencv2/core/types.hpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/modules/core/include/opencv2/core/types.hpp b/modules/core/include/opencv2/core/types.hpp index 0b09c6fb04..43b2d2e140 100644 --- a/modules/core/include/opencv2/core/types.hpp +++ b/modules/core/include/opencv2/core/types.hpp @@ -1311,11 +1311,19 @@ _Tp Size_<_Tp>::area() const return width * height; } +template static inline +Size_<_Tp>& operator *= (Size_<_Tp>& a, _Tp b) +{ + a.width *= b; + a.height *= b; + return a; +} template static inline -Size_<_Tp> operator * (const Size_<_Tp>& a, _Tp b) +Size_<_Tp> operator * (Size_<_Tp> a, _Tp b) { - return Size_<_Tp>(a.width * b, a.height * b); + a *= b; + return a; } template static inline From d3d9b538c7ec02c9b4fac09e5829d78305fccbea Mon Sep 17 00:00:00 2001 From: Marc Rollins Date: Mon, 18 Aug 2014 11:48:38 -0700 Subject: [PATCH 2/5] Implementing division operators. --- modules/core/include/opencv2/core/types.hpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/modules/core/include/opencv2/core/types.hpp b/modules/core/include/opencv2/core/types.hpp index 43b2d2e140..b8f943453a 100644 --- a/modules/core/include/opencv2/core/types.hpp +++ b/modules/core/include/opencv2/core/types.hpp @@ -1326,6 +1326,21 @@ Size_<_Tp> operator * (Size_<_Tp> a, _Tp b) return a; } +template static inline +Size_<_Tp>& operator /= (Size_<_Tp>& a, _Tp b) +{ + a.width /= b; + a.height /= b; + return a; +} + +template static inline +Size_<_Tp> operator / (Size_<_Tp> a, _Tp b) +{ + a /= b; + return a; +} + template static inline Size_<_Tp> operator + (const Size_<_Tp>& a, const Size_<_Tp>& b) { From 8fc1848918bf3714e47dca3c054a95122baf7b7b Mon Sep 17 00:00:00 2001 From: Marc Rollins Date: Mon, 18 Aug 2014 12:25:48 -0700 Subject: [PATCH 3/5] Simplifying arithmetic and comparison operator implementation. Implementing + and - in terms of += and -=. Implementing != in terms of ==. --- modules/core/include/opencv2/core/types.hpp | 28 +++++++++++---------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/modules/core/include/opencv2/core/types.hpp b/modules/core/include/opencv2/core/types.hpp index b8f943453a..ea7b4dcbaa 100644 --- a/modules/core/include/opencv2/core/types.hpp +++ b/modules/core/include/opencv2/core/types.hpp @@ -1341,18 +1341,6 @@ Size_<_Tp> operator / (Size_<_Tp> a, _Tp b) return a; } -template static inline -Size_<_Tp> operator + (const Size_<_Tp>& a, const Size_<_Tp>& b) -{ - return Size_<_Tp>(a.width + b.width, a.height + b.height); -} - -template static inline -Size_<_Tp> operator - (const Size_<_Tp>& a, const Size_<_Tp>& b) -{ - return Size_<_Tp>(a.width - b.width, a.height - b.height); -} - template static inline Size_<_Tp>& operator += (Size_<_Tp>& a, const Size_<_Tp>& b) { @@ -1361,6 +1349,13 @@ Size_<_Tp>& operator += (Size_<_Tp>& a, const Size_<_Tp>& b) return a; } +template static inline +Size_<_Tp> operator + (Size_<_Tp> a, const Size_<_Tp>& b) +{ + a += b; + return a; +} + template static inline Size_<_Tp>& operator -= (Size_<_Tp>& a, const Size_<_Tp>& b) { @@ -1369,6 +1364,13 @@ Size_<_Tp>& operator -= (Size_<_Tp>& a, const Size_<_Tp>& b) return a; } +template static inline +Size_<_Tp> operator - (Size_<_Tp> a, const Size_<_Tp>& b) +{ + a -= b; + return a; +} + template static inline bool operator == (const Size_<_Tp>& a, const Size_<_Tp>& b) { @@ -1378,7 +1380,7 @@ bool operator == (const Size_<_Tp>& a, const Size_<_Tp>& b) template static inline bool operator != (const Size_<_Tp>& a, const Size_<_Tp>& b) { - return a.width != b.width || a.height != b.height; + return !(a == b); } From 703921e2fd0ecaf5e87478ba1316d5560932ae4b Mon Sep 17 00:00:00 2001 From: Marc Rollins Date: Thu, 21 Aug 2014 10:37:36 -0700 Subject: [PATCH 4/5] Reverting pass-by-value changes to arithmetic operators. --- modules/core/include/opencv2/core/types.hpp | 28 ++++++++++++--------- 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/modules/core/include/opencv2/core/types.hpp b/modules/core/include/opencv2/core/types.hpp index ea7b4dcbaa..cf1cbe1496 100644 --- a/modules/core/include/opencv2/core/types.hpp +++ b/modules/core/include/opencv2/core/types.hpp @@ -1320,10 +1320,11 @@ Size_<_Tp>& operator *= (Size_<_Tp>& a, _Tp b) } template static inline -Size_<_Tp> operator * (Size_<_Tp> a, _Tp b) +Size_<_Tp> operator * (const Size_<_Tp>& a, _Tp b) { - a *= b; - return a; + Size_<_Tp> tmp; + tmp *= b; + return tmp; } template static inline @@ -1335,10 +1336,11 @@ Size_<_Tp>& operator /= (Size_<_Tp>& a, _Tp b) } template static inline -Size_<_Tp> operator / (Size_<_Tp> a, _Tp b) +Size_<_Tp> operator / (const Size_<_Tp>& a, _Tp b) { - a /= b; - return a; + Size_<_Tp> tmp; + tmp /= b; + return tmp; } template static inline @@ -1350,10 +1352,11 @@ Size_<_Tp>& operator += (Size_<_Tp>& a, const Size_<_Tp>& b) } template static inline -Size_<_Tp> operator + (Size_<_Tp> a, const Size_<_Tp>& b) +Size_<_Tp> operator + (const Size_<_Tp>& a, const Size_<_Tp>& b) { - a += b; - return a; + Size_<_Tp> tmp; + tmp += b; + return tmp; } template static inline @@ -1365,10 +1368,11 @@ Size_<_Tp>& operator -= (Size_<_Tp>& a, const Size_<_Tp>& b) } template static inline -Size_<_Tp> operator - (Size_<_Tp> a, const Size_<_Tp>& b) +Size_<_Tp> operator - (const Size_<_Tp>& a, const Size_<_Tp>& b) { - a -= b; - return a; + Size_<_Tp> tmp; + tmp -= b; + return tmp; } template static inline From 17e8d511240196276c5d10ca6b28863053723f6a Mon Sep 17 00:00:00 2001 From: Marc Rollins Date: Thu, 21 Aug 2014 11:41:12 -0700 Subject: [PATCH 5/5] Fixing uninitialized temporary. --- modules/core/include/opencv2/core/types.hpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/core/include/opencv2/core/types.hpp b/modules/core/include/opencv2/core/types.hpp index cf1cbe1496..69c838ae22 100644 --- a/modules/core/include/opencv2/core/types.hpp +++ b/modules/core/include/opencv2/core/types.hpp @@ -1322,7 +1322,7 @@ Size_<_Tp>& operator *= (Size_<_Tp>& a, _Tp b) template static inline Size_<_Tp> operator * (const Size_<_Tp>& a, _Tp b) { - Size_<_Tp> tmp; + Size_<_Tp> tmp(a); tmp *= b; return tmp; } @@ -1338,7 +1338,7 @@ Size_<_Tp>& operator /= (Size_<_Tp>& a, _Tp b) template static inline Size_<_Tp> operator / (const Size_<_Tp>& a, _Tp b) { - Size_<_Tp> tmp; + Size_<_Tp> tmp(a); tmp /= b; return tmp; } @@ -1354,7 +1354,7 @@ Size_<_Tp>& operator += (Size_<_Tp>& a, const Size_<_Tp>& b) template static inline Size_<_Tp> operator + (const Size_<_Tp>& a, const Size_<_Tp>& b) { - Size_<_Tp> tmp; + Size_<_Tp> tmp(a); tmp += b; return tmp; } @@ -1370,7 +1370,7 @@ Size_<_Tp>& operator -= (Size_<_Tp>& a, const Size_<_Tp>& b) template static inline Size_<_Tp> operator - (const Size_<_Tp>& a, const Size_<_Tp>& b) { - Size_<_Tp> tmp; + Size_<_Tp> tmp(a); tmp -= b; return tmp; }