[geos-commits] [SCM] GEOS branch master updated. 8bc0ff9dc0a1036989238d1e01d1fa4c9f5df3c4

git at osgeo.org git at osgeo.org
Thu Oct 10 12:44:55 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  8bc0ff9dc0a1036989238d1e01d1fa4c9f5df3c4 (commit)
       via  cba1002b9f585d86cd56ecd8578ee830df0fc291 (commit)
      from  6b153d67e24c36477faee2eb47e6f486b768cdc2 (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 8bc0ff9dc0a1036989238d1e01d1fa4c9f5df3c4
Merge: 6b153d6 cba1002
Author: Daniel Baston <dbaston at gmail.com>
Date:   Thu Oct 10 15:44:35 2019 -0400

    Merge branch 'covariant-return'


commit cba1002b9f585d86cd56ecd8578ee830df0fc291
Author: Daniel Baston <dbaston at gmail.com>
Date:   Mon Sep 23 09:45:15 2019 -0400

    Return specific type from getGeometryN methods

diff --git a/include/geos/geom/MultiLineString.h b/include/geos/geom/MultiLineString.h
index 67c4238..510f96c 100644
--- a/include/geos/geom/MultiLineString.h
+++ b/include/geos/geom/MultiLineString.h
@@ -73,6 +73,8 @@ public:
     /// Returns a (possibly empty) [MultiPoint](@ref geom::MultiPoint)
     std::unique_ptr<Geometry> getBoundary() const override;
 
+    const LineString* getGeometryN(std::size_t n) const override;
+
     std::string getGeometryType() const override;
 
     GeometryTypeId getGeometryTypeId() const override;
diff --git a/include/geos/geom/MultiPoint.h b/include/geos/geom/MultiPoint.h
index 2695907..a3e745c 100644
--- a/include/geos/geom/MultiPoint.h
+++ b/include/geos/geom/MultiPoint.h
@@ -24,6 +24,7 @@
 #include <geos/export.h>
 #include <geos/geom/GeometryCollection.h> // for inheritance
 #include <geos/geom/Dimension.h> // for Dimension::DimensionType
+#include <geos/geom/Point.h> // for covariant return type
 
 #include <geos/inline.h>
 
@@ -79,6 +80,8 @@ public:
      */
     std::unique_ptr<Geometry> getBoundary() const override;
 
+    const Point* getGeometryN(std::size_t n) const override;
+
     std::string getGeometryType() const override;
 
     GeometryTypeId getGeometryTypeId() const override;
diff --git a/include/geos/geom/MultiPolygon.h b/include/geos/geom/MultiPolygon.h
index dbcedd6..e8f482b 100644
--- a/include/geos/geom/MultiPolygon.h
+++ b/include/geos/geom/MultiPolygon.h
@@ -81,6 +81,8 @@ public:
      */
     std::unique_ptr<Geometry> getBoundary() const override;
 
+    const Polygon* getGeometryN(std::size_t n) const override;
+
     std::string getGeometryType() const override;
 
     GeometryTypeId getGeometryTypeId() const override;
diff --git a/src/algorithm/PointLocator.cpp b/src/algorithm/PointLocator.cpp
index 889e000..6ba90e5 100644
--- a/src/algorithm/PointLocator.cpp
+++ b/src/algorithm/PointLocator.cpp
@@ -83,13 +83,13 @@ PointLocator::computeLocation(const Coordinate& p, const Geometry* geom)
     }
     else if(const MultiLineString* mls = dynamic_cast<const MultiLineString*>(geom)) {
         for(std::size_t i = 0, n = mls->getNumGeometries(); i < n; ++i) {
-            const LineString* l = dynamic_cast<const LineString*>(mls->getGeometryN(i));
+            const LineString* l = mls->getGeometryN(i);
             updateLocationInfo(locate(p, l));
         }
     }
     else if(const MultiPolygon* mpo = dynamic_cast<const MultiPolygon*>(geom)) {
         for(std::size_t i = 0, n = mpo->getNumGeometries(); i < n; ++i) {
-            const Polygon* p_po = dynamic_cast<const Polygon*>(mpo->getGeometryN(i));
+            const Polygon* p_po = mpo->getGeometryN(i);
             updateLocationInfo(locate(p, p_po));
         }
     }
diff --git a/src/geom/MultiLineString.cpp b/src/geom/MultiLineString.cpp
index 592f38a..29b158d 100644
--- a/src/geom/MultiLineString.cpp
+++ b/src/geom/MultiLineString.cpp
@@ -31,7 +31,6 @@
 # include "geos/geom/MultiLineString.inl"
 #endif
 
-using namespace std;
 using namespace geos::algorithm;
 //using namespace geos::operation;
 using namespace geos::geomgraph;
@@ -40,7 +39,7 @@ namespace geos {
 namespace geom { // geos::geom
 
 /*protected*/
-MultiLineString::MultiLineString(vector<Geometry*>* newLines,
+MultiLineString::MultiLineString(std::vector<Geometry*>* newLines,
                                  const GeometryFactory* factory)
     :
     GeometryCollection(newLines, factory)
@@ -72,7 +71,7 @@ MultiLineString::getBoundaryDimension() const
     return 0;
 }
 
-string
+std::string
 MultiLineString::getGeometryType() const
 {
     return "MultiLineString";
@@ -136,5 +135,11 @@ MultiLineString::reverse() const
     return getFactory()->createMultiLineString(std::move(revLines));
 }
 
+const LineString*
+MultiLineString::getGeometryN(size_t i) const
+{
+    return static_cast<const LineString*>(geometries[i].get());
+}
+
 } // namespace geos::geom
 } // namespace geos
diff --git a/src/geom/MultiPoint.cpp b/src/geom/MultiPoint.cpp
index 3a2b0e7..be96e42 100644
--- a/src/geom/MultiPoint.cpp
+++ b/src/geom/MultiPoint.cpp
@@ -93,5 +93,11 @@ MultiPoint::getGeometryTypeId() const
     return GEOS_MULTIPOINT;
 }
 
+const Point*
+MultiPoint::getGeometryN(size_t i) const
+{
+    return static_cast<const Point*>(geometries[i].get());
+}
+
 } // namespace geos::geom
 } // namespace geos
diff --git a/src/geom/MultiPolygon.cpp b/src/geom/MultiPolygon.cpp
index 0c16059..aebeab6 100644
--- a/src/geom/MultiPolygon.cpp
+++ b/src/geom/MultiPolygon.cpp
@@ -34,13 +34,11 @@
 # include "geos/geom/MultiPolygon.inl"
 #endif
 
-using namespace std;
-
 namespace geos {
 namespace geom { // geos::geom
 
 /*protected*/
-MultiPolygon::MultiPolygon(vector<Geometry*>* newPolys, const GeometryFactory* factory)
+MultiPolygon::MultiPolygon(std::vector<Geometry*>* newPolys, const GeometryFactory* factory)
       : GeometryCollection(newPolys, factory)
 {}
 
@@ -66,7 +64,7 @@ MultiPolygon::getBoundaryDimension() const
     return 1;
 }
 
-string
+std::string
 MultiPolygon::getGeometryType() const
 {
     return "MultiPolygon";
@@ -79,7 +77,7 @@ MultiPolygon::getBoundary() const
         return std::unique_ptr<Geometry>(getFactory()->createMultiLineString());
     }
 
-    vector<std::unique_ptr<Geometry>> allRings;
+    std::vector<std::unique_ptr<Geometry>> allRings;
     for(const auto& pg : geometries) {
         auto g = pg->getBoundary();
 
@@ -129,5 +127,11 @@ MultiPolygon::reverse() const
     return getFactory()->createMultiPolygon(std::move(reversed));
 }
 
+const Polygon*
+MultiPolygon::getGeometryN(size_t i) const
+{
+    return static_cast<const Polygon*>(geometries[i].get());
+}
+
 } // namespace geos::geom
 } // namespace geos
diff --git a/src/geom/util/GeometryTransformer.cpp b/src/geom/util/GeometryTransformer.cpp
index 53c05b5..38efefd 100644
--- a/src/geom/util/GeometryTransformer.cpp
+++ b/src/geom/util/GeometryTransformer.cpp
@@ -165,7 +165,7 @@ GeometryTransformer::transformMultiPoint(
     std::vector<std::unique_ptr<Geometry>> transGeomList;
 
     for(size_t i = 0, n = geom->getNumGeometries(); i < n; i++) {
-        const Point* p = dynamic_cast<const Point*>(geom->getGeometryN(i));
+        const Point* p = geom->getGeometryN(i);
         assert(p);
 
         Geometry::Ptr transformGeom = transformPoint(p, geom);
@@ -241,8 +241,7 @@ GeometryTransformer::transformMultiLineString(
     std::vector<std::unique_ptr<Geometry>> transGeomList;
 
     for(size_t i = 0, n = geom->getNumGeometries(); i < n; i++) {
-        const LineString* l = dynamic_cast<const LineString*>(
-                                  geom->getGeometryN(i));
+        const LineString* l = geom->getGeometryN(i);
         assert(l);
 
         Geometry::Ptr transformGeom = transformLineString(l, geom);
@@ -340,8 +339,7 @@ GeometryTransformer::transformMultiPolygon(
     std::vector<std::unique_ptr<Geometry>> transGeomList;
 
     for(std::size_t i = 0, n = geom->getNumGeometries(); i < n; i++) {
-        const Polygon* p = dynamic_cast<const Polygon*>(
-                               geom->getGeometryN(i));
+        const Polygon* p = geom->getGeometryN(i);
         assert(p);
 
         Geometry::Ptr transformGeom = transformPolygon(p, geom);
diff --git a/src/io/WKTWriter.cpp b/src/io/WKTWriter.cpp
index 7c842a1..3458d70 100644
--- a/src/io/WKTWriter.cpp
+++ b/src/io/WKTWriter.cpp
@@ -430,9 +430,7 @@ WKTWriter::appendMultiPointText(const MultiPoint* multiPoint,
                 writer->write(", ");
             }
 
-            appendCoordinate(
-                dynamic_cast<const Point*>(multiPoint->getGeometryN(i))->getCoordinate(),
-                writer);
+            appendCoordinate(multiPoint->getGeometryN(i)->getCoordinate(), writer);
         }
         writer->write(")");
     }
@@ -456,9 +454,7 @@ WKTWriter::appendMultiLineStringText(const MultiLineString* multiLineString, int
                 level2 = p_level + 1;
                 doIndent = true;
             }
-            const LineString* ls = dynamic_cast<const LineString*>(
-                                       multiLineString->getGeometryN(i)
-                                   );
+            const LineString* ls = multiLineString->getGeometryN(i);
             appendLineStringText(ls, level2, doIndent, writer);
         }
         writer->write(")");
@@ -482,9 +478,7 @@ WKTWriter::appendMultiPolygonText(const MultiPolygon* multiPolygon, int p_level,
                 level2 = p_level + 1;
                 doIndent = true;
             }
-            const Polygon* p = dynamic_cast<const Polygon*>(
-                                   multiPolygon->getGeometryN(i)
-                               );
+            const Polygon* p = multiPolygon->getGeometryN(i);
             appendPolygonText(p, level2, doIndent, writer);
         }
         writer->write(")");
diff --git a/src/operation/IsSimpleOp.cpp b/src/operation/IsSimpleOp.cpp
index 6526f97..5f32254 100644
--- a/src/operation/IsSimpleOp.cpp
+++ b/src/operation/IsSimpleOp.cpp
@@ -151,7 +151,7 @@ IsSimpleOp::isSimpleMultiPoint(const MultiPoint& mp)
     set<const Coordinate*, CoordinateLessThen> points;
 
     for(std::size_t i = 0, n = mp.getNumGeometries(); i < n; ++i) {
-        const Point* pt = dynamic_cast<const Point*>(mp.getGeometryN(i));
+        const Point* pt = mp.getGeometryN(i);
         assert(pt);
         const Coordinate* p = pt->getCoordinate();
         if(points.find(p) != points.end()) {
diff --git a/src/operation/intersection/RectangleIntersection.cpp b/src/operation/intersection/RectangleIntersection.cpp
index 23febb6..6518deb 100644
--- a/src/operation/intersection/RectangleIntersection.cpp
+++ b/src/operation/intersection/RectangleIntersection.cpp
@@ -573,8 +573,7 @@ RectangleIntersection::clip_multipoint(const geom::MultiPoint* g,
         return;
     }
     for(size_t i = 0, n = g->getNumGeometries(); i < n; ++i) {
-        clip_point(dynamic_cast<const geom::Point*>(g->getGeometryN(i)),
-                   parts, rect);
+        clip_point(g->getGeometryN(i), parts, rect);
     }
 }
 
@@ -588,8 +587,7 @@ RectangleIntersection::clip_multilinestring(const geom::MultiLineString* g,
     }
 
     for(size_t i = 0, n = g->getNumGeometries(); i < n; ++i) {
-        clip_linestring(dynamic_cast<const geom::LineString*>(g->getGeometryN(i)),
-                        parts, rect);
+        clip_linestring(g->getGeometryN(i), parts, rect);
     }
 }
 
@@ -604,8 +602,7 @@ RectangleIntersection::clip_multipolygon(const geom::MultiPolygon* g,
     }
 
     for(size_t i = 0, n = g->getNumGeometries(); i < n; ++i) {
-        clip_polygon(dynamic_cast<const geom::Polygon*>(g->getGeometryN(i)),
-                     parts, rect, keep_polygons);
+        clip_polygon(g->getGeometryN(i), parts, rect, keep_polygons);
     }
 }
 
diff --git a/src/operation/linemerge/LineSequencer.cpp b/src/operation/linemerge/LineSequencer.cpp
index e5099a7..7eb82e6 100644
--- a/src/operation/linemerge/LineSequencer.cpp
+++ b/src/operation/linemerge/LineSequencer.cpp
@@ -65,8 +65,7 @@ LineSequencer::isSequenced(const Geometry* geom)
     const Coordinate* lastNode = nullptr;
 
     for(std::size_t i = 0, n = mls->getNumGeometries(); i < n; ++i) {
-        const LineString* lineptr = \
-                                    dynamic_cast<const LineString*>(mls->getGeometryN(i));
+        const LineString* lineptr = mls->getGeometryN(i);
         assert(lineptr);
         const LineString& line = *lineptr;
 
diff --git a/src/operation/valid/ConnectedInteriorTester.cpp b/src/operation/valid/ConnectedInteriorTester.cpp
index 527622e..be73d9a 100644
--- a/src/operation/valid/ConnectedInteriorTester.cpp
+++ b/src/operation/valid/ConnectedInteriorTester.cpp
@@ -236,7 +236,7 @@ ConnectedInteriorTester::visitShellInteriors(const Geometry* g, PlanarGraph& gra
 
     if(const MultiPolygon* mp = dynamic_cast<const MultiPolygon*>(g)) {
         for(size_t i = 0, n = mp->getNumGeometries(); i < n; i++) {
-            const Polygon* p = dynamic_cast<const Polygon*>(mp->getGeometryN(i));
+            const Polygon* p = mp->getGeometryN(i);
             visitInteriorRing(p->getExteriorRing(), graph);
         }
     }
diff --git a/src/operation/valid/IsValidOp.cpp b/src/operation/valid/IsValidOp.cpp
index 92b8504..dd9a1a3 100644
--- a/src/operation/valid/IsValidOp.cpp
+++ b/src/operation/valid/IsValidOp.cpp
@@ -275,7 +275,7 @@ IsValidOp::checkValid(const MultiPolygon* g)
     vector<const Polygon*>polys(ngeoms);
 
     for(size_t i = 0; i < ngeoms; ++i) {
-        const Polygon* p = dynamic_cast<const Polygon*>(g->getGeometryN(i));
+        const Polygon* p = g->getGeometryN(i);
 
         checkInvalidCoordinates(p);
         if(validErr != nullptr) {
@@ -489,8 +489,7 @@ void
 IsValidOp::checkShellsNotNested(const MultiPolygon* mp, GeometryGraph* graph)
 {
     for (size_t i = 0, ngeoms = mp->getNumGeometries(); i < ngeoms; ++i) {
-        const Polygon* p = dynamic_cast<const Polygon*>(
-                               mp->getGeometryN(i));
+        const Polygon* p = mp->getGeometryN(i);
 
         const LinearRing* shell = p->getExteriorRing();
 
@@ -501,8 +500,7 @@ IsValidOp::checkShellsNotNested(const MultiPolygon* mp, GeometryGraph* graph)
                 continue;
             }
 
-            const Polygon* p2 = dynamic_cast<const Polygon*>(
-                                    mp->getGeometryN(j));
+            const Polygon* p2 = mp->getGeometryN(j);
 
             if (p2->isEmpty()) {
                 continue;
diff --git a/src/operation/valid/MakeValid.cpp b/src/operation/valid/MakeValid.cpp
index 8a36315..3e4d4f0 100644
--- a/src/operation/valid/MakeValid.cpp
+++ b/src/operation/valid/MakeValid.cpp
@@ -76,7 +76,7 @@ nodeLineWithFirstCoordinate(const geom::Geometry* geom)
   } else {
       auto mls = dynamic_cast<const geom::MultiLineString*>(geom);
       assert(mls);
-      auto line = dynamic_cast<const geom::LineString*>(mls->getGeometryN(0));
+      auto line = mls->getGeometryN(0);
       assert(line);
       point = line->getPointN(0);
   }
diff --git a/src/operation/valid/RepeatedPointTester.cpp b/src/operation/valid/RepeatedPointTester.cpp
index fcb047d..d9205f1 100644
--- a/src/operation/valid/RepeatedPointTester.cpp
+++ b/src/operation/valid/RepeatedPointTester.cpp
@@ -125,7 +125,7 @@ bool
 RepeatedPointTester::hasRepeatedPoint(const MultiPolygon* gc)
 {
     for(size_t i = 0, n = gc->getNumGeometries(); i < n; ++i) {
-        const Geometry* g = gc->getGeometryN(i);
+        const Polygon* g = gc->getGeometryN(i);
         if(hasRepeatedPoint(g)) {
             return true;
         }
@@ -137,7 +137,7 @@ bool
 RepeatedPointTester::hasRepeatedPoint(const MultiLineString* gc)
 {
     for(size_t i = 0, n = gc->getNumGeometries(); i < n; ++i) {
-        const Geometry* g = gc->getGeometryN(i);
+        const LineString* g = gc->getGeometryN(i);
         if(hasRepeatedPoint(g)) {
             return true;
         }

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

Summary of changes:
 include/geos/geom/MultiLineString.h                  |  2 ++
 include/geos/geom/MultiPoint.h                       |  3 +++
 include/geos/geom/MultiPolygon.h                     |  2 ++
 src/algorithm/PointLocator.cpp                       |  4 ++--
 src/geom/MultiLineString.cpp                         | 11 ++++++++---
 src/geom/MultiPoint.cpp                              |  6 ++++++
 src/geom/MultiPolygon.cpp                            | 14 +++++++++-----
 src/geom/util/GeometryTransformer.cpp                |  8 +++-----
 src/io/WKTWriter.cpp                                 | 12 +++---------
 src/operation/IsSimpleOp.cpp                         |  2 +-
 src/operation/intersection/RectangleIntersection.cpp |  9 +++------
 src/operation/linemerge/LineSequencer.cpp            |  3 +--
 src/operation/valid/ConnectedInteriorTester.cpp      |  2 +-
 src/operation/valid/IsValidOp.cpp                    |  8 +++-----
 src/operation/valid/MakeValid.cpp                    |  2 +-
 src/operation/valid/RepeatedPointTester.cpp          |  4 ++--
 16 files changed, 50 insertions(+), 42 deletions(-)


hooks/post-receive
-- 
GEOS


More information about the geos-commits mailing list