[geos-commits] [SCM] GEOS branch master updated. 6b153d67e24c36477faee2eb47e6f486b768cdc2

git at osgeo.org git at osgeo.org
Thu Oct 10 12:35:59 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  6b153d67e24c36477faee2eb47e6f486b768cdc2 (commit)
       via  efd7c85ae88b6a4c93ea063dbe022cd2f62d0eb7 (commit)
       via  0c0033ff83a43d5489cd954cac83d144cb251b1b (commit)
       via  225efc6eb532ec0990acb0a2e8675e52dd2af2ef (commit)
       via  8c3e0135de53b73a864309af9ff029fe6e997db8 (commit)
      from  570929a5a0509e9ff51cca0d60d131bf7d4006b8 (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 6b153d67e24c36477faee2eb47e6f486b768cdc2
Author: Paul Ramsey <pramsey at cleverelephant.ca>
Date:   Thu Oct 10 12:35:52 2019 -0700

    News entry

diff --git a/NEWS b/NEWS
index 336e723..c60ee6b 100644
--- a/NEWS
+++ b/NEWS
@@ -5,7 +5,7 @@ Changes in 3.9.0
   - 
 
 - Improvements:
-  - 
+  - Stack allocate segments in OverlapUnion (Paul Ramsey)
 
 
 Changes in 3.8.0

commit efd7c85ae88b6a4c93ea063dbe022cd2f62d0eb7
Merge: 0c0033f 570929a
Author: Paul Ramsey <pramsey at cleverelephant.ca>
Date:   Thu Oct 10 12:34:18 2019 -0700

    Merge branch 'master' of https://git.osgeo.org/gogs/geos/geos into union-stack-lineseg


commit 0c0033ff83a43d5489cd954cac83d144cb251b1b
Author: Paul Ramsey <pramsey at cleverelephant.ca>
Date:   Wed Oct 9 08:04:26 2019 -0700

    Try to learn C++ more better

diff --git a/src/operation/union/OverlapUnion.cpp b/src/operation/union/OverlapUnion.cpp
index b204926..49f43c4 100644
--- a/src/operation/union/OverlapUnion.cpp
+++ b/src/operation/union/OverlapUnion.cpp
@@ -243,7 +243,7 @@ OverlapUnion::extractBorderSegments(const Geometry* geom, const Envelope& penv,
             const Coordinate& p1 = seq.getAt(i  );
             bool isBorder = intersects(env, p0, p1) && ! containsProperly(env, p0, p1);
             if (isBorder) {
-                segs->emplace_back(LineSegment(p0, p1));
+                segs->emplace_back(p0, p1);
             }
         };
 

commit 225efc6eb532ec0990acb0a2e8675e52dd2af2ef
Author: Paul Ramsey <pramsey at cleverelephant.ca>
Date:   Wed Oct 9 08:00:55 2019 -0700

    Suggestions from PR

diff --git a/src/operation/union/OverlapUnion.cpp b/src/operation/union/OverlapUnion.cpp
index bd5138d..b204926 100644
--- a/src/operation/union/OverlapUnion.cpp
+++ b/src/operation/union/OverlapUnion.cpp
@@ -25,7 +25,7 @@
 
 namespace geos {
 namespace operation {
-namespace  geounion {
+namespace geounion {
 
 // https://github.com/locationtech/jts/blob/master/modules/core/src/main/java/org/locationtech/jts/operation/union/OverlapUnion.java
 
@@ -141,13 +141,8 @@ OverlapUnion::isBorderSegmentsSame(const Geometry* result, const Envelope& env)
     std::vector<LineSegment> segsBefore = extractBorderSegments(g0, g1, env);
     std::vector<LineSegment> segsAfter;
     extractBorderSegments(result, env, segsAfter);
-    //std::cout << ("# seg before: " << segsBefore.size() << " - # seg after: " << segsAfter.size() << std::endl;
     bool eq = isEqual(segsBefore, segsAfter);
 
-    // Clean up temporary segment arrays
-    // for (auto seg : segsBefore) delete seg;
-    // for (auto seg : segsAfter) delete seg;
-
     return eq;
 }
 
@@ -248,8 +243,7 @@ OverlapUnion::extractBorderSegments(const Geometry* geom, const Envelope& penv,
             const Coordinate& p1 = seq.getAt(i  );
             bool isBorder = intersects(env, p0, p1) && ! containsProperly(env, p0, p1);
             if (isBorder) {
-                LineSegment ls(p0, p1);
-                segs->push_back(ls);
+                segs->emplace_back(LineSegment(p0, p1));
             }
         };
 

commit 8c3e0135de53b73a864309af9ff029fe6e997db8
Author: Paul Ramsey <pramsey at cleverelephant.ca>
Date:   Tue Oct 8 11:49:04 2019 -0700

    Allocate linesegments on stack for union check

diff --git a/include/geos/operation/union/OverlapUnion.h b/include/geos/operation/union/OverlapUnion.h
index c3f35b1..1c72bcd 100644
--- a/include/geos/operation/union/OverlapUnion.h
+++ b/include/geos/operation/union/OverlapUnion.h
@@ -113,9 +113,9 @@ private:
     std::unique_ptr<geom::Geometry> unionFull(const geom::Geometry* geom0, const geom::Geometry* geom1);
     std::unique_ptr<geom::Geometry> unionBuffer(const geom::Geometry* geom0, const geom::Geometry* geom1);
     bool isBorderSegmentsSame(const geom::Geometry* result, const geom::Envelope& env);
-    bool isEqual(std::vector<geom::LineSegment*>& segs0, std::vector<geom::LineSegment*>& segs1);
-    std::vector<geom::LineSegment*> extractBorderSegments(const geom::Geometry* geom0, const geom::Geometry* geom1, const geom::Envelope& env);
-    void extractBorderSegments(const geom::Geometry* geom, const geom::Envelope& penv, std::vector<geom::LineSegment*>& psegs);
+    bool isEqual(std::vector<geom::LineSegment>& segs0, std::vector<geom::LineSegment>& segs1);
+    std::vector<geom::LineSegment> extractBorderSegments(const geom::Geometry* geom0, const geom::Geometry* geom1, const geom::Envelope& env);
+    void extractBorderSegments(const geom::Geometry* geom, const geom::Envelope& penv, std::vector<geom::LineSegment>& psegs);
 
 };
 
diff --git a/src/operation/union/OverlapUnion.cpp b/src/operation/union/OverlapUnion.cpp
index 8f21660..bd5138d 100644
--- a/src/operation/union/OverlapUnion.cpp
+++ b/src/operation/union/OverlapUnion.cpp
@@ -25,7 +25,7 @@
 
 namespace geos {
 namespace operation {
-namespace geounion {
+namespace  geounion {
 
 // https://github.com/locationtech/jts/blob/master/modules/core/src/main/java/org/locationtech/jts/operation/union/OverlapUnion.java
 
@@ -138,27 +138,27 @@ OverlapUnion::unionBuffer(const Geometry* geom0, const Geometry* geom1)
 bool
 OverlapUnion::isBorderSegmentsSame(const Geometry* result, const Envelope& env)
 {
-    std::vector<LineSegment*> segsBefore = extractBorderSegments(g0, g1, env);
-    std::vector<LineSegment*> segsAfter;
+    std::vector<LineSegment> segsBefore = extractBorderSegments(g0, g1, env);
+    std::vector<LineSegment> segsAfter;
     extractBorderSegments(result, env, segsAfter);
     //std::cout << ("# seg before: " << segsBefore.size() << " - # seg after: " << segsAfter.size() << std::endl;
     bool eq = isEqual(segsBefore, segsAfter);
 
     // Clean up temporary segment arrays
-    for (auto seg : segsBefore) delete seg;
-    for (auto seg : segsAfter) delete seg;
+    // for (auto seg : segsBefore) delete seg;
+    // for (auto seg : segsAfter) delete seg;
 
     return eq;
 }
 
-static bool lineSegmentPtrCmp(const LineSegment* a, const LineSegment* b)
+static bool lineSegmentPtrCmp(const LineSegment& a, const LineSegment& b)
 {
-    return a->compareTo(*b) < 0;
+    return a.compareTo(b) < 0;
 }
 
 /* private */
 bool
-OverlapUnion::isEqual(std::vector<LineSegment*>& segs0, std::vector<LineSegment*>& segs1)
+OverlapUnion::isEqual(std::vector<LineSegment>& segs0, std::vector<LineSegment>& segs1)
 {
     if (segs0.size() != segs1.size())
         return false;
@@ -168,10 +168,10 @@ OverlapUnion::isEqual(std::vector<LineSegment*>& segs0, std::vector<LineSegment*
 
     size_t sz = segs0.size();
     for (std::size_t i = 0; i < sz; i++) {
-        if (segs0[i]->p0.x != segs1[i]->p0.x ||
-            segs0[i]->p0.y != segs1[i]->p0.y ||
-            segs0[i]->p1.x != segs1[i]->p1.x ||
-            segs0[i]->p1.y != segs1[i]->p1.y)
+        if (segs0[i].p0.x != segs1[i].p0.x ||
+            segs0[i].p0.y != segs1[i].p0.y ||
+            segs0[i].p1.x != segs1[i].p1.x ||
+            segs0[i].p1.y != segs1[i].p1.y)
         {
             return false;
         }
@@ -181,10 +181,10 @@ OverlapUnion::isEqual(std::vector<LineSegment*>& segs0, std::vector<LineSegment*
 }
 
 /* private */
-std::vector<LineSegment*>
+std::vector<LineSegment>
 OverlapUnion::extractBorderSegments(const Geometry* geom0, const Geometry* geom1, const Envelope& env)
 {
-    std::vector<LineSegment*> segs;
+    std::vector<LineSegment> segs;
     extractBorderSegments(geom0, env, segs);
     if (geom1 != nullptr)
         extractBorderSegments(geom1, env, segs);
@@ -218,17 +218,17 @@ containsProperly(const Envelope& env, const Coordinate& p0, const Coordinate& p1
 
 /* privatef */
 void
-OverlapUnion::extractBorderSegments(const Geometry* geom, const Envelope& penv, std::vector<LineSegment*>& psegs)
+OverlapUnion::extractBorderSegments(const Geometry* geom, const Envelope& penv, std::vector<LineSegment>& psegs)
 {
     class BorderSegmentFilter : public CoordinateSequenceFilter {
 
     private:
         const Envelope env;
-        std::vector<LineSegment*>* segs;
+        std::vector<LineSegment>* segs;
 
     public:
 
-        BorderSegmentFilter(const Envelope& penv, std::vector<LineSegment*>* psegs)
+        BorderSegmentFilter(const Envelope& penv, std::vector<LineSegment>* psegs)
             : env(penv),
               segs(psegs) {};
 
@@ -248,7 +248,8 @@ OverlapUnion::extractBorderSegments(const Geometry* geom, const Envelope& penv,
             const Coordinate& p1 = seq.getAt(i  );
             bool isBorder = intersects(env, p0, p1) && ! containsProperly(env, p0, p1);
             if (isBorder) {
-                segs->push_back(new LineSegment(p0, p1));
+                LineSegment ls(p0, p1);
+                segs->push_back(ls);
             }
         };
 

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

Summary of changes:
 NEWS                                        |  2 +-
 include/geos/operation/union/OverlapUnion.h |  6 ++---
 src/operation/union/OverlapUnion.cpp        | 35 +++++++++++++----------------
 3 files changed, 19 insertions(+), 24 deletions(-)


hooks/post-receive
-- 
GEOS


More information about the geos-commits mailing list