From 2dcaad50b63d03f34545429da1525cc46843cd18 Mon Sep 17 00:00:00 2001
From: Sandro Santilli <strk@keybit.net>
Date: Thu, 25 Feb 2010 13:30:09 +0000
Subject: [PATCH] Drop unused code, avoid putting empty geometry in a
 collection.. [RT-SIGTA]

git-svn-id: http://svn.osgeo.org/postgis/trunk@5337 b70326c6-7e19-0410-871a-916f4a2858ee
---
 postgis/lwgeom_geos_clean.c | 124 +-----------------------------------
 1 file changed, 2 insertions(+), 122 deletions(-)

diff --git a/postgis/lwgeom_geos_clean.c b/postgis/lwgeom_geos_clean.c
index b23617b02..84e899eea 100644
--- a/postgis/lwgeom_geos_clean.c
+++ b/postgis/lwgeom_geos_clean.c
@@ -416,7 +416,6 @@ LWGEOM_GEOS_makeValidPolygon(const GEOSGeometry* gin)
 	GEOSGeom geos_bound, geos_bound_noded;
 	GEOSGeom geos_cut_edges, geos_area;
 	GEOSGeometry *vgeoms[2]; /* One for area, one for cut-edges */
-	int num_cut_edges;
 
 	assert (GEOSGeomTypeId(gin) == GEOS_POLYGON ||
 	        GEOSGeomTypeId(gin) == GEOS_MULTIPOLYGON);
@@ -506,25 +505,6 @@ LWGEOM_GEOS_makeValidPolygon(const GEOSGeometry* gin)
 	               lwgeom_to_ewkt(GEOS2LWGEOM(geos_cut_edges, 0),
 	                              PARSER_CHECK_NONE));
 
-	num_cut_edges = GEOSGetNumGeometries(geos_cut_edges);
-	if ( -1 == num_cut_edges )
-	{
-		lwnotice("GEOSGetNumGeometries() threw an error: %s",
-		         loggederror);
-		GEOSGeom_destroy(geos_cut_edges);
-		GEOSGeom_destroy(geos_bound_noded);
-		return geos_area;
-	}
-
-	/* If we have no cut edges the result is the area */
-	/* NOTE: this is a short-cut we may want to drop */
-	if ( 0 == num_cut_edges )
-	{
-		GEOSGeom_destroy(geos_cut_edges);
-		GEOSGeom_destroy(geos_bound_noded);
-		return geos_area;
-	}
-
 	/*
 	 * See if an area can be build with the remaining edges
 	 * and if it can, symdifference with the original area.
@@ -621,111 +601,10 @@ LWGEOM_GEOS_makeValidPolygon(const GEOSGeometry* gin)
 		geos_cut_edges = new_cut_edges;
 	}
 
-	/*
-	 * Drop cut-edge segments for which all
-	 * vertices are already vertices of geos_bound_noded
-	 * which fall completely in the area
-	 */
-	if ( 0 ) {
-
-		GEOSGeometry** cutlines;
-		GEOSGeometry* geos_bound_noded_points;
-		int kept_edges = 0;
-		int i;
-
-		geos_bound_noded_points = GEOSGeom_extractUniquePoints(geos_area);
-		if ( ! geos_bound_noded_points )
-		{
-			/* Exception I guess ? */
-			lwnotice("GEOSGeom_extractUniquePoints: %s", loggederror);
-			return 0;
-		}
-
-		/* Allocate enough space for keeping all cut edges */
-		cutlines = (GEOSGeometry**)lwalloc(sizeof(GEOSGeometry*)*num_cut_edges);
-		for (i=0; i<num_cut_edges; ++i)
-		{
-			char ret;
-			GEOSGeometry* xset;
-			const GEOSGeometry* cutline = GEOSGetGeometryN(geos_cut_edges, i);
-			GEOSGeometry* cutline_points = GEOSGeom_extractUniquePoints(cutline);
-			if ( ! cutline_points )
-			{
-				/* Exception I guess ? */
-				lwnotice("GEOSGeom_extractUniquePoints: %s", loggederror);
-				GEOSGeom_destroy(geos_cut_edges);
-				GEOSGeom_destroy(geos_bound_noded_points);
-				lwfree(cutlines);
-				return 0;
-			}
-
-			xset = GEOSDifference(cutline_points, geos_bound_noded_points);
-			GEOSGeom_destroy(cutline_points);
-			if ( ! xset )
-			{
-				/* exception */
-				lwnotice("GEOSDifference: %s", loggederror);
-				GEOSGeom_destroy(geos_cut_edges);
-				GEOSGeom_destroy(geos_bound_noded_points);
-				lwfree(cutlines);
-				return 0;
-			}
-			ret = GEOSisEmpty(xset);
-			GEOSGeom_destroy(xset);
-			if ( 2 == ret )   /* exception */
-			{
-				lwnotice("GEOSisEmpty: %s", loggederror);
-				GEOSGeom_destroy(geos_cut_edges);
-				GEOSGeom_destroy(geos_bound_noded_points);
-				lwfree(cutlines);
-				return 0;
-			}
-			if ( 1 == ret )
-			{
-				/* all points already represented */
-				POSTGIS_DEBUGF(3,
-				               "Cut-edge: %s - vertices all found, drop",
-				               lwgeom_to_ewkt(GEOS2LWGEOM(cutline, 0),
-				                              PARSER_CHECK_NONE));
-				continue;
-			}
-
-			POSTGIS_DEBUGF(3,
-			               "Cut-edge: %s - missing vertices, keep",
-			               lwgeom_to_ewkt(GEOS2LWGEOM(cutline, 0),
-			                              PARSER_CHECK_NONE));
-
-			cutlines[kept_edges++] = GEOSGeom_clone(cutline);
-		}
-
-		GEOSGeom_destroy(geos_bound_noded_points);
-		GEOSGeom_destroy(geos_cut_edges);
-
-		if ( kept_edges )
-		{
-			geos_cut_edges = GEOSGeom_createCollection(GEOS_MULTILINESTRING, cutlines, kept_edges);
-			if ( ! geos_cut_edges )
-			{
-				lwnotice("GEOSGeom_createCollection: %s", loggederror);
-				return 0;
-			}
-
-			POSTGIS_DEBUGF(3,
-			               "Trimmed cut-edges: %s",
-			               lwgeom_to_ewkt(GEOS2LWGEOM(geos_cut_edges, 0),
-			                              PARSER_CHECK_NONE));
-		}
-		else
-		{
-			geos_cut_edges = 0;
-		}
-
-	}
-
 	GEOSGeom_destroy(geos_bound_noded); /* TODO: move up */
 
 	/* Collect areas and lines (if any line) */
-	if ( geos_cut_edges )
+	if ( ! GEOSisEmpty(geos_cut_edges) )
 	{
 		vgeoms[1] = geos_area;
 		vgeoms[0] = geos_cut_edges;
@@ -741,6 +620,7 @@ LWGEOM_GEOS_makeValidPolygon(const GEOSGeometry* gin)
 	}
 	else
 	{
+		GEOSGeom_destroy(geos_cut_edges);
 		gout = geos_area;
 	}
 
-- 
2.40.0