From 70f4c31d617f55fcd78a8e6401229f41d6e5884c Mon Sep 17 00:00:00 2001 From: Even Rouault Date: Sat, 8 Dec 2018 22:55:51 +0100 Subject: Speed up hasPerfectAccuracyResult() --- src/coordinateoperation.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'src/coordinateoperation.cpp') diff --git a/src/coordinateoperation.cpp b/src/coordinateoperation.cpp index 8f75864e..4ada57fb 100644 --- a/src/coordinateoperation.cpp +++ b/src/coordinateoperation.cpp @@ -9206,9 +9206,9 @@ static size_t getStepCount(const CoordinateOperationNNPtr &op) { // --------------------------------------------------------------------------- -struct FilterAndSort { +struct FilterResults { - FilterAndSort(const std::vector &sourceListIn, + FilterResults(const std::vector &sourceListIn, const CoordinateOperationContextNNPtr &contextIn, const crs::CRSNNPtr &sourceCRSIn, const crs::CRSNNPtr &targetCRSIn, @@ -9223,6 +9223,9 @@ struct FilterAndSort { computeAreaOfIntest(); filterOut(forceStrictContainmentTest); + } + + FilterResults &andSort() { sort(); // And now that we have a sorted list, we can remove uninteresting @@ -9232,6 +9235,7 @@ struct FilterAndSort { removeUninterestingOps(); removeDuplicateOps(); removeSyntheticNullTransforms(); + return *this; } // ---------------------------------------------------------------------- @@ -9646,7 +9650,8 @@ static std::vector filterAndSort(const std::vector &sourceList, const CoordinateOperationContextNNPtr &context, const crs::CRSNNPtr &sourceCRS, const crs::CRSNNPtr &targetCRS) { - return FilterAndSort(sourceList, context, sourceCRS, targetCRS, false) + return FilterResults(sourceList, context, sourceCRS, targetCRS, false) + .andSort() .getRes(); } //! @endcond @@ -10449,7 +10454,7 @@ createNullGeocentricTranslation(const crs::CRSNNPtr &sourceCRS, bool CoordinateOperationFactory::Private::hasPerfectAccuracyResult( const std::vector &res, const Context &context) { - auto resTmp = FilterAndSort(res, context.context, context.sourceCRS, + auto resTmp = FilterResults(res, context.context, context.sourceCRS, context.targetCRS, true) .getRes(); for (const auto &op : resTmp) { -- cgit v1.2.3