summaryrefslogtreecommitdiff
path: root/basegfx
diff options
context:
space:
mode:
authorStephan Bergmann <stephan.bergmann@allotropia.de>2024-10-25 08:20:19 +0200
committerStephan Bergmann <stephan.bergmann@allotropia.de>2024-12-09 15:13:46 +0100
commit41ab6a5dfa0bbc67c726ba872e9ef85fde67a394 (patch)
tree1d4fc74b14309e344c076466c18214ded5d37278 /basegfx
parent2b8d794e448a7d3c573ff79cffe9decc8d960262 (diff)
struct SN needs a strict weak ordering operator <
...so it can be used with std::sort in impSolve() (further down in basegfx/source/polygon/b2dpolypolygoncutter.cxx). At least on macOS with a LLVM 20 trunk libc++ in hardened mode, JunitTest_sfx2_complex failed with > ~/llvm/inst/bin/../include/c++/v1/__debug_utils/strict_weak_ordering_check.h:59: assertion __comp(*(__first + __a), *(__first + __b)) failed: Your comparator is not a valid strict-weak ordering To simplify the new implementation of struct SN operator <, add a B2DPoint operator <=> (but whose implementation would cause > In file included from /home/tdf/lode/jenkins/workspace/android_arm/basegfx/source/curve/b2dbeziertools.cxx:21: > In file included from /home/tdf/lode/jenkins/workspace/android_arm/include/basegfx/curve/b2dcubicbezier.hxx:22: > /home/tdf/lode/jenkins/workspace/android_arm/include/basegfx/point/b2dpoint.hxx:129:41: error: invalid operands to binary expression ('tuple<const double &, const double &>' and 'tuple<const double &, const double &>') > { return std::tie(a.mnX, a.mnY) <=> std::tie(b.mnX, b.mnY); } > ~~~~~~~~~~~~~~~~~~~~~~ ^ ~~~~~~~~~~~~~~~~~~~~~~ etc. on Android with NDK 23.2, see <https://ci.libreoffice.org/job/gerrit_android_arm/43174/>, so work around that in the implementation for now). Change-Id: I9f46d39dc9e9024fe9ac59413c44e49642282c8b Reviewed-on: https://gerrit.libreoffice.org/c/core/+/175622 Tested-by: Jenkins Reviewed-by: Stephan Bergmann <stephan.bergmann@allotropia.de>
Diffstat (limited to 'basegfx')
-rw-r--r--basegfx/source/polygon/b2dpolypolygoncutter.cxx21
1 files changed, 5 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);
}
};