From 9ef33ea68a3a507bba74eefa5fa603bd13ba9899 Mon Sep 17 00:00:00 2001 From: "Dmitry Yu. Naumov" <github@naumov.de> Date: Sun, 19 Jul 2015 16:50:18 +0000 Subject: [PATCH] [MaL] Replace Point3d op<() with TemplatePoint.op< The lexicographic comparison is now working for arbitrary TemplatePoint dimensions and underlying floating types. --- MathLib/Point3d.cpp | 30 ------------------------------ MathLib/Point3d.h | 2 -- MathLib/TemplatePoint.h | 19 +++++++++++++++++++ 3 files changed, 19 insertions(+), 32 deletions(-) diff --git a/MathLib/Point3d.cpp b/MathLib/Point3d.cpp index 71277056070..ad1b56ea7e0 100644 --- a/MathLib/Point3d.cpp +++ b/MathLib/Point3d.cpp @@ -18,36 +18,6 @@ namespace MathLib { -bool operator< (const MathLib::Point3d& p0, const MathLib::Point3d& p1) -{ - if (p0[0] > p1[0]) { - return false; - } else { - if (p0[0] < p1[0]) { - return true; - } - } - // => p0[0] == p1[0] - - if (p0[1] > p1[1]) { - return false; - } else { - if (p0[1] < p1[1]) { - return true; - } - } - // => p0[1] == p1[1] - - if (p0[2] > p1[2]) { - return false; - } else { - if (p0[2] < p1[2]) { - return true; - } - return false; // p0 == p1 - } -} - bool lessEq(const MathLib::Point3d& p0, const MathLib::Point3d& p1, double tol) { // test a relative and an absolute criterion diff --git a/MathLib/Point3d.h b/MathLib/Point3d.h index 0c8c985e58b..85ed4b4ca4c 100644 --- a/MathLib/Point3d.h +++ b/MathLib/Point3d.h @@ -23,8 +23,6 @@ namespace MathLib { typedef MathLib::TemplatePoint<double,3> Point3d; -bool operator< (MathLib::Point3d const & p0, MathLib::Point3d const & p1); - /** * lexicographical comparison of points taking an epsilon into account * @param p0 first input Point3d diff --git a/MathLib/TemplatePoint.h b/MathLib/TemplatePoint.h index b8be4e918af..d6429bf2fe9 100644 --- a/MathLib/TemplatePoint.h +++ b/MathLib/TemplatePoint.h @@ -111,6 +111,25 @@ bool operator==(TemplatePoint<T,DIM> const& a, TemplatePoint<T,DIM> const& b) return (sqr_dist < eps*eps); } +template <typename T, std::size_t DIM> +bool operator< (TemplatePoint<T,DIM> const& a, TemplatePoint<T,DIM> const& b) +{ + for (std::size_t i = 0; i < DIM; ++i) + { + if (a[i] > b[i]) { + return false; + } else { + if (a[i] < b[i]) { + return true; + } + } + // continue with next dimension, because a[0] == b[0] + } + + // The values in all dimenisions are equal. + return false; +} + /** Distance between points p0 and p1 in the maximum norm. */ template <typename T> T maxNormDist(const MathLib::TemplatePoint<T>* p0, const MathLib::TemplatePoint<T>* p1) -- GitLab