summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--basegfx/source/polygon/b2dpolypolygoncutter.cxx21
-rw-r--r--include/basegfx/point/b2dpoint.hxx15
2 files changed, 20 insertions, 16 deletions
diff --git a/basegfx/source/polygon/b2dpolypolygoncutter.cxx b/basegfx/source/polygon/b2dpolypolygoncutter.cxx
index 1cf414c1cc56..6feeb1685bfc 100644
--- a/basegfx/source/polygon/b2dpolypolygoncutter.cxx
+++ b/basegfx/source/polygon/b2dpolypolygoncutter.cxx
@@ -17,7 +17,6 @@
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
-#include <basegfx/numeric/ftools.hxx>
#include <basegfx/polygon/b2dpolypolygoncutter.hxx>
#include <basegfx/point/b2dpoint.hxx>
#include <basegfx/vector/b2dvector.hxx>
@@ -32,6 +31,7 @@
#include <vector>
#include <algorithm>
#include <numeric>
+#include <tuple>
namespace basegfx
{
@@ -72,23 +72,12 @@ namespace basegfx
public:
PN* mpPN;
+ // For this to be a strict weak ordering, the assumption is that none of the involved
+ // maPoint coordinates are NaN:
bool operator<(const SN& rComp) const
{
- if(fTools::equal(mpPN->maPoint.getX(), rComp.mpPN->maPoint.getX()))
- {
- if(fTools::equal(mpPN->maPoint.getY(), rComp.mpPN->maPoint.getY()))
- {
- return (mpPN->mnI < rComp.mpPN->mnI);
- }
- else
- {
- return fTools::less(mpPN->maPoint.getY(), rComp.mpPN->maPoint.getY());
- }
- }
- else
- {
- return fTools::less(mpPN->maPoint.getX(), rComp.mpPN->maPoint.getX());
- }
+ return std::tie(mpPN->maPoint, mpPN->mnI)
+ < std::tie(rComp.mpPN->maPoint, rComp.mpPN->mnI);
}
};
diff --git a/include/basegfx/point/b2dpoint.hxx b/include/basegfx/point/b2dpoint.hxx
index ce16965de042..94140aa6f5e1 100644
--- a/include/basegfx/point/b2dpoint.hxx
+++ b/include/basegfx/point/b2dpoint.hxx
@@ -19,7 +19,9 @@
#pragma once
+#include <compare>
#include <ostream>
+#include <tuple>
#include <basegfx/tuple/b2dtuple.hxx>
#include <basegfx/point/b2ipoint.hxx>
@@ -122,6 +124,19 @@ namespace basegfx
{
return static_cast<const B2DPoint&>( ::basegfx::B2DTuple::getEmptyTuple() );
}
+
+ friend auto operator <=>(B2DPoint const & a, B2DPoint const & b)
+ {
+ // Avoid compilation failure with Android NDK 23.2, where std::tuple operator <=> isn't
+ // yet implemented (and where __cpp_lib_three_way_comparison happens to not be defined
+ // in <compare>, so discriminate on that):
+#if defined __cpp_lib_three_way_comparison
+ return std::tie(a.mnX, a.mnY) <=> std::tie(b.mnX, b.mnY);
+#else
+ auto const comp = a.mnX <=> b.mnX;
+ return comp == 0 ? a.mnY <=> b.mnY : comp;
+#endif
+ }
};
// external operators