[geos-commits] [SCM] GEOS branch master updated. f7315189af5400fb6e4e2cfd2595ac2584e647be

git at osgeo.org git at osgeo.org
Thu Jun 6 06:04:36 PDT 2019


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GEOS".

The branch, master has been updated
       via  f7315189af5400fb6e4e2cfd2595ac2584e647be (commit)
       via  0dde4c4991fdd918b25ba1630e3eb7e7da79404d (commit)
      from  5de2e8b66796c847050cf8ec4bd5c94234df0a86 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit f7315189af5400fb6e4e2cfd2595ac2584e647be
Author: Daniel Baston <dbaston at gmail.com>
Date:   Wed Jun 5 14:29:25 2019 -0400

    Remove additional unnecessary Coordinate copies
    
    Located by checking usages of CoordinateSequence::getAt(size_t,
    Coordinate&);

diff --git a/include/geos/operation/predicate/SegmentIntersectionTester.h b/include/geos/operation/predicate/SegmentIntersectionTester.h
index 3a4d49c..877419c 100644
--- a/include/geos/operation/predicate/SegmentIntersectionTester.h
+++ b/include/geos/operation/predicate/SegmentIntersectionTester.h
@@ -57,12 +57,6 @@ private:
 
     bool hasIntersectionVar;
 
-    geom::Coordinate pt10;
-    geom::Coordinate pt11;
-    geom::Coordinate pt00;
-    geom::Coordinate pt01;
-
-
 public:
 
     SegmentIntersectionTester(): hasIntersectionVar(false) {}
diff --git a/src/operation/distance/FacetSequence.cpp b/src/operation/distance/FacetSequence.cpp
index 0d2e9ab..6633e81 100644
--- a/src/operation/distance/FacetSequence.cpp
+++ b/src/operation/distance/FacetSequence.cpp
@@ -87,22 +87,21 @@ FacetSequence::distance(const FacetSequence& facetSeq) const
 std::vector<GeometryLocation>
 FacetSequence::nearestLocations(const FacetSequence& facetSeq)  const
 {
-    Coordinate pt, seqPt;
     bool isPointThis = isPoint();
     bool isPointOther = facetSeq.isPoint();
     std::vector<GeometryLocation> locs;
     if (isPointThis && isPointOther) {
-        pts->getAt(start, pt);
-        facetSeq.pts->getAt(facetSeq.start, seqPt);
+        const Coordinate& pt = pts->getAt(start);
+        const Coordinate& seqPt = facetSeq.pts->getAt(facetSeq.start);
         GeometryLocation gl1(geom, start, pt);
         GeometryLocation gl2(facetSeq.geom, facetSeq.start, seqPt);
     }
     else if (isPointThis) {
-        pts->getAt(start, pt);
+        const Coordinate& pt = pts->getAt(start);
         computeDistancePointLine(pt, facetSeq, &locs);
     }
     else if (isPointOther) {
-        facetSeq.pts->getAt(facetSeq.start, seqPt);
+        const Coordinate& seqPt = facetSeq.pts->getAt(facetSeq.start);
         computeDistancePointLine(seqPt, *this, &locs);
         // unflip the locations
         GeometryLocation tmp = locs[0];
@@ -122,12 +121,10 @@ FacetSequence::computeDistancePointLine(const Coordinate& pt,
 {
     double minDistance = std::numeric_limits<double>::infinity();
     double dist;
-    Coordinate q0;
-    Coordinate q1;
 
     for(size_t i = facetSeq.start; i < facetSeq.end - 1; i++) {
-        facetSeq.pts->getAt(i, q0);
-        facetSeq.pts->getAt(i + 1, q1);
+        const Coordinate& q0 = facetSeq.pts->getAt(i);
+        const Coordinate& q1 = facetSeq.pts->getAt(i + 1);
         dist = Distance::pointToSegment(pt, q0, q1);
         if(dist == 0.0) {
             return dist;
@@ -168,15 +165,14 @@ FacetSequence::computeDistanceLineLine(const FacetSequence& facetSeq, std::vecto
 {
     double minDistance = std::numeric_limits<double>::infinity();
     double dist;
-    Coordinate p0, p1, q0, q1;
 
     for(size_t i = start; i < end - 1; i++) {
-        pts->getAt(i, p0);
-        pts->getAt(i + 1, p1);
+        const Coordinate& p0 = pts->getAt(i);
+        const Coordinate& p1 = pts->getAt(i + 1);
 
         for(size_t j = facetSeq.start; j < facetSeq.end - 1; j++) {
-            facetSeq.pts->getAt(j, q0);
-            facetSeq.pts->getAt(j + 1, q1);
+            const Coordinate& q0 = facetSeq.pts->getAt(j);
+            const Coordinate& q1 = facetSeq.pts->getAt(j + 1);
 
             dist = Distance::segmentToSegment(p0, p1, q0, q1);
             if(dist <= minDistance) {
diff --git a/src/operation/intersection/RectangleIntersectionBuilder.cpp b/src/operation/intersection/RectangleIntersectionBuilder.cpp
index 0d0c105..daf8b6c 100644
--- a/src/operation/intersection/RectangleIntersectionBuilder.cpp
+++ b/src/operation/intersection/RectangleIntersectionBuilder.cpp
@@ -487,8 +487,7 @@ RectangleIntersectionBuilder::reconnectPolygons(const Rectangle& rect)
         }
         else {
             using geos::algorithm::PointLocation;
-            geom::Coordinate c;
-            hole->getCoordinatesRO()->getAt(0, c);
+            const geom::Coordinate& c = hole->getCoordinatesRO()->getAt(0);
             for(ShellAndHolesList::iterator p_i = exterior.begin(), p_e = exterior.end(); p_i != p_e; ++p_i) {
                 ShellAndHoles& p = *p_i;
                 const CoordinateSequence* shell_cs = p.first->getCoordinatesRO();
diff --git a/src/operation/predicate/SegmentIntersectionTester.cpp b/src/operation/predicate/SegmentIntersectionTester.cpp
index 1b503d3..e2250c7 100644
--- a/src/operation/predicate/SegmentIntersectionTester.cpp
+++ b/src/operation/predicate/SegmentIntersectionTester.cpp
@@ -57,12 +57,12 @@ SegmentIntersectionTester::hasIntersection(
     size_type seq1size = seq1.getSize();
 
     for(size_type i = 1; i < seq0size && !hasIntersectionVar; ++i) {
-        seq0.getAt(i - 1, pt00);
-        seq0.getAt(i, pt01);
+        const Coordinate& pt00 = seq0.getAt(i - 1);
+        const Coordinate& pt01 = seq0.getAt(i);
 
         for(size_type j = 1; j < seq1size && !hasIntersectionVar; ++j) {
-            seq1.getAt(j - 1, pt10);
-            seq1.getAt(j, pt11);
+            const Coordinate& pt10 = seq1.getAt(j - 1);
+            const Coordinate& pt11 = seq1.getAt(j);
 
             li.computeIntersection(pt00, pt01, pt10, pt11);
             if(li.hasIntersection()) {
@@ -91,8 +91,8 @@ SegmentIntersectionTester::hasIntersectionWithEnvelopeFilter(
     typedef std::size_t size_type;
 
     for(size_type i = 1; i < seq1size && !hasIntersectionVar; ++i) {
-        seq1.getAt(i - 1, pt10);
-        seq1.getAt(i, pt11);
+        const Coordinate& pt10 = seq1.getAt(i - 1);
+        const Coordinate& pt11 = seq1.getAt(i);
 
         // skip test if segment does not intersect query envelope
         if(! lineEnv->intersects(Envelope(pt10, pt11))) {
@@ -100,8 +100,8 @@ SegmentIntersectionTester::hasIntersectionWithEnvelopeFilter(
         }
 
         for(size_type j = 1; j < seq0size && !hasIntersectionVar; ++j) {
-            seq0.getAt(j - 1, pt00);
-            seq0.getAt(j, pt01);
+            const Coordinate& pt00 = seq0.getAt(j - 1);
+            const Coordinate& pt01 = seq0.getAt(j);
 
             li.computeIntersection(pt00, pt01, pt10, pt11);
             if(li.hasIntersection()) {

commit 0dde4c4991fdd918b25ba1630e3eb7e7da79404d
Author: Daniel Baston <dbaston at gmail.com>
Date:   Wed Jun 5 14:16:03 2019 -0400

    Remove some unnecessary Coordinate copies
    
    Located using a quick check of egrep -Rn "Coordinate .*="

diff --git a/src/algorithm/LineIntersector.cpp b/src/algorithm/LineIntersector.cpp
index 2be486f..e928e5b 100644
--- a/src/algorithm/LineIntersector.cpp
+++ b/src/algorithm/LineIntersector.cpp
@@ -77,25 +77,25 @@ Coordinate
 nearestEndpoint(const Coordinate& p1, const Coordinate& p2,
                 const Coordinate& q1, const Coordinate& q2)
 {
-    Coordinate nearestPt = p1;
+    const Coordinate* nearestPt = &p1;
     double minDist = Distance::pointToSegment(p1, q1, q2);
 
     double dist = Distance::pointToSegment(p2, q1, q2);
     if(dist < minDist) {
         minDist = dist;
-        nearestPt = p2;
+        nearestPt = &p2;
     }
     dist = Distance::pointToSegment(q1, p1, p2);
     if(dist < minDist) {
         minDist = dist;
-        nearestPt = q1;
+        nearestPt = &q1;
     }
     dist = Distance::pointToSegment(q2, p1, p2);
     if(dist < minDist) {
         minDist = dist;
-        nearestPt = q2;
+        nearestPt = &q2;
     }
-    return nearestPt;
+    return *nearestPt;
 }
 
 
diff --git a/src/geom/CoordinateSequence.cpp b/src/geom/CoordinateSequence.cpp
index ba942ad..00985cb 100644
--- a/src/geom/CoordinateSequence.cpp
+++ b/src/geom/CoordinateSequence.cpp
@@ -145,7 +145,6 @@ CoordinateSequence::increasingDirection(const CoordinateSequence& pts)
 void
 CoordinateSequence::reverse(CoordinateSequence* cl)
 {
-
     // FIXME: use a standard algorithm
     auto last = cl->size() - 1;
     auto mid = last / 2;
diff --git a/src/geom/prep/PreparedLineStringIntersects.cpp b/src/geom/prep/PreparedLineStringIntersects.cpp
index 0e9189a..4d128ba 100644
--- a/src/geom/prep/PreparedLineStringIntersects.cpp
+++ b/src/geom/prep/PreparedLineStringIntersects.cpp
@@ -45,7 +45,7 @@ PreparedLineStringIntersects::isAnyTestPointInTarget(const geom::Geometry* testG
     ComponentCoordinateExtracter::getCoordinates(*testGeom, coords);
 
     for(size_t i = 0, n = coords.size(); i < n; i++) {
-        geom::Coordinate c = *(coords[i]);
+        const geom::Coordinate& c = *(coords[i]);
         if(locator.intersects(c, &(prepLine.getGeometry()))) {
             return true;
         }
diff --git a/src/operation/distance/FacetSequence.cpp b/src/operation/distance/FacetSequence.cpp
index 5729ca4..0d2e9ab 100644
--- a/src/operation/distance/FacetSequence.cpp
+++ b/src/operation/distance/FacetSequence.cpp
@@ -62,16 +62,16 @@ FacetSequence::distance(const FacetSequence& facetSeq) const
     bool isPointOther = facetSeq.isPoint();
 
     if(isPointThis && isPointOther) {
-        Coordinate pt = pts->getAt(start);
-        Coordinate seqPt = facetSeq.pts->getAt(facetSeq.start);
+        const Coordinate& pt = pts->getAt(start);
+        const Coordinate& seqPt = facetSeq.pts->getAt(facetSeq.start);
         return pt.distance(seqPt);
     }
     else if(isPointThis) {
-        Coordinate pt = pts->getAt(start);
+        const Coordinate& pt = pts->getAt(start);
         return computeDistancePointLine(pt, facetSeq, nullptr);
     }
     else if(isPointOther) {
-        Coordinate seqPt = facetSeq.pts->getAt(facetSeq.start);
+        const Coordinate& seqPt = facetSeq.pts->getAt(facetSeq.start);
         return computeDistancePointLine(seqPt, *this, nullptr);
     }
     else {
diff --git a/src/operation/overlay/PolygonBuilder.cpp b/src/operation/overlay/PolygonBuilder.cpp
index 38a12d8..551c7e1 100644
--- a/src/operation/overlay/PolygonBuilder.cpp
+++ b/src/operation/overlay/PolygonBuilder.cpp
@@ -339,7 +339,7 @@ PolygonBuilder::findEdgeRingContaining(EdgeRing* testEr,
         }
 
         const CoordinateSequence* tsrcs = tryShellRing->getCoordinatesRO();
-        Coordinate testPt = operation::polygonize::EdgeRing::ptNotInList(testRing->getCoordinatesRO(), tsrcs);
+        const Coordinate& testPt = operation::polygonize::EdgeRing::ptNotInList(testRing->getCoordinatesRO(), tsrcs);
 
         bool isContained = false;
         if(tryShell.pipLocator->locate(&testPt) != Location::EXTERIOR) {
diff --git a/src/operation/polygonize/EdgeRing.cpp b/src/operation/polygonize/EdgeRing.cpp
index dc223ec..f6d998e 100644
--- a/src/operation/polygonize/EdgeRing.cpp
+++ b/src/operation/polygonize/EdgeRing.cpp
@@ -75,7 +75,7 @@ EdgeRing::findEdgeRingContaining(const std::vector<EdgeRing*> & erList)
         }
 
         auto tryCoords = tryRing->getCoordinatesRO();
-        Coordinate testPt = ptNotInList(testRing->getCoordinatesRO(), tryCoords); // TODO: don't copy testPt !
+        const Coordinate& testPt = ptNotInList(testRing->getCoordinatesRO(), tryCoords);
 
         // check if this new containing ring is smaller than the current minimum ring
         if(tryEdgeRing->isInRing(testPt)) {
diff --git a/src/precision/PrecisionReducerCoordinateOperation.cpp b/src/precision/PrecisionReducerCoordinateOperation.cpp
index 2c710ff..b907f6f 100644
--- a/src/precision/PrecisionReducerCoordinateOperation.cpp
+++ b/src/precision/PrecisionReducerCoordinateOperation.cpp
@@ -48,9 +48,8 @@ PrecisionReducerCoordinateOperation::edit(const CoordinateSequence* cs,
 
     // copy coordinates and reduce
     for(size_t i = 0; i < csSize; ++i) {
-        Coordinate coord = cs->getAt(i);
-        targetPM.makePrecise(&coord);
-        (*vc)[i] = coord;
+        (*vc)[i] = cs->getAt(i);
+        targetPM.makePrecise((*vc)[i]);
     }
 
     // reducedCoords take ownership of 'vc'
diff --git a/src/precision/SimpleGeometryPrecisionReducer.cpp b/src/precision/SimpleGeometryPrecisionReducer.cpp
index 3be653b..9ab876a 100644
--- a/src/precision/SimpleGeometryPrecisionReducer.cpp
+++ b/src/precision/SimpleGeometryPrecisionReducer.cpp
@@ -78,10 +78,8 @@ PrecisionReducerCoordinateOperation::edit(const CoordinateSequence* cs,
 
     // copy coordinates and reduce
     for(unsigned int i = 0; i < csSize; ++i) {
-        Coordinate coord = cs->getAt(i);
-        sgpr->getPrecisionModel()->makePrecise(&coord);
-        //reducedCoords->setAt(*coord,i);
-        (*vc)[i] = coord;
+        (*vc)[i] = cs->getAt(i);
+        sgpr->getPrecisionModel()->makePrecise((*vc)[i]);
     }
 
     // reducedCoords take ownership of 'vc'

-----------------------------------------------------------------------

Summary of changes:
 .../predicate/SegmentIntersectionTester.h          |  6 ----
 src/algorithm/LineIntersector.cpp                  | 10 +++----
 src/geom/CoordinateSequence.cpp                    |  1 -
 src/geom/prep/PreparedLineStringIntersects.cpp     |  2 +-
 src/operation/distance/FacetSequence.cpp           | 32 ++++++++++------------
 .../intersection/RectangleIntersectionBuilder.cpp  |  3 +-
 src/operation/overlay/PolygonBuilder.cpp           |  2 +-
 src/operation/polygonize/EdgeRing.cpp              |  2 +-
 .../predicate/SegmentIntersectionTester.cpp        | 16 +++++------
 .../PrecisionReducerCoordinateOperation.cpp        |  5 ++--
 src/precision/SimpleGeometryPrecisionReducer.cpp   |  6 ++--
 11 files changed, 35 insertions(+), 50 deletions(-)


hooks/post-receive
-- 
GEOS


More information about the geos-commits mailing list