[geos-commits] r2726 - in trunk/source: headers/geos/operation/polygonize operation/polygonize

svn_geos at osgeo.org svn_geos at osgeo.org
Thu Nov 19 14:19:42 EST 2009


Author: strk
Date: 2009-11-19 14:19:39 -0500 (Thu, 19 Nov 2009)
New Revision: 2726

Modified:
   trunk/source/headers/geos/operation/polygonize/PolygonizeGraph.h
   trunk/source/headers/geos/operation/polygonize/Polygonizer.h
   trunk/source/operation/polygonize/PolygonizeGraph.cpp
   trunk/source/operation/polygonize/Polygonizer.cpp
Log:
Change PolygonizeGraph::getEdgeRings signature so not to force heap allocation of std::vector, update Polygonizer accordingly


Modified: trunk/source/headers/geos/operation/polygonize/PolygonizeGraph.h
===================================================================
--- trunk/source/headers/geos/operation/polygonize/PolygonizeGraph.h	2009-11-19 19:06:53 UTC (rev 2725)
+++ trunk/source/headers/geos/operation/polygonize/PolygonizeGraph.h	2009-11-19 19:19:39 UTC (rev 2726)
@@ -96,10 +96,11 @@
 	 * \brief
 	 * Computes the EdgeRings formed by the edges in this graph.
 	 *
-	 * @return a list of the EdgeRing found by the
-	 * 	polygonization process.
+	 * @param edgeRingList : the EdgeRing found by the
+	 * 	polygonization process will be pushed here.
+	 *
 	 */
-	std::vector<EdgeRing*>* getEdgeRings();
+	void getEdgeRings(std::vector<EdgeRing*>& edgeRingList);
 
 	/**
 	 * \brief

Modified: trunk/source/headers/geos/operation/polygonize/Polygonizer.h
===================================================================
--- trunk/source/headers/geos/operation/polygonize/Polygonizer.h	2009-11-19 19:06:53 UTC (rev 2725)
+++ trunk/source/headers/geos/operation/polygonize/Polygonizer.h	2009-11-19 19:19:39 UTC (rev 2726)
@@ -95,7 +95,8 @@
 	 */
 	void polygonize();
 
-	void findValidRings(std::vector<EdgeRing*> *edgeRingList,
+	/// @todo : take all args by ref
+	void findValidRings(std::vector<EdgeRing*>& edgeRingList,
 			std::vector<EdgeRing*> *validEdgeRingList,
 			std::vector<geom::LineString*> *invalidRingList);
 

Modified: trunk/source/operation/polygonize/PolygonizeGraph.cpp
===================================================================
--- trunk/source/operation/polygonize/PolygonizeGraph.cpp	2009-11-19 19:06:53 UTC (rev 2725)
+++ trunk/source/operation/polygonize/PolygonizeGraph.cpp	2009-11-19 19:19:39 UTC (rev 2726)
@@ -213,12 +213,9 @@
 	} while (de!=startDE);
 }
 
-/**
- * Computes the EdgeRings formed by the edges in this graph.
- * @return a list of the EdgeRing found by the polygonization process.
- */
-std::vector<EdgeRing*>*
-PolygonizeGraph::getEdgeRings()
+/* public */
+void
+PolygonizeGraph::getEdgeRings(std::vector<EdgeRing*>& edgeRingList)
 {
 	// maybe could optimize this, since most of these pointers should
 	// be set correctly already
@@ -232,16 +229,14 @@
 	delete maximalRings;
 
 	// find all edgerings
-	std::vector<EdgeRing*> *edgeRingList=new std::vector<EdgeRing*>();
 	for(unsigned int i=0; i<dirEdges.size(); ++i)
 	{
 		PolygonizeDirectedEdge *de=(PolygonizeDirectedEdge*)dirEdges[i];
 		if (de->isMarked()) continue;
 		if (de->isInRing()) continue;
 		EdgeRing *er=findEdgeRing(de);
-		edgeRingList->push_back(er);
+		edgeRingList.push_back(er);
 	}
-	return edgeRingList;
 }
 
 /**

Modified: trunk/source/operation/polygonize/Polygonizer.cpp
===================================================================
--- trunk/source/operation/polygonize/Polygonizer.cpp	2009-11-19 19:06:53 UTC (rev 2725)
+++ trunk/source/operation/polygonize/Polygonizer.cpp	2009-11-19 19:19:39 UTC (rev 2726)
@@ -236,9 +236,10 @@
 
 	dangles=graph->deleteDangles();
 	cutEdges=graph->deleteCutEdges();
-	vector<EdgeRing*> *edgeRingList=graph->getEdgeRings();
+	vector<EdgeRing*> edgeRingList;
+	graph->getEdgeRings(edgeRingList);
 #if GEOS_DEBUG
-	cerr<<"Polygonizer::polygonize(): "<<edgeRingList->size()<<" edgeRings in graph"<<endl;
+	cerr<<"Polygonizer::polygonize(): "<<edgeRingList.size()<<" edgeRings in graph"<<endl;
 #endif
 	vector<EdgeRing*> *validEdgeRingList=new vector<EdgeRing*>();
 	invalidRingLines=new vector<LineString*>();
@@ -247,7 +248,6 @@
 	cerr<<"                           "<<validEdgeRingList->size()<<" valid"<<endl;
 	cerr<<"                           "<<invalidRingLines->size()<<" invalid"<<endl;
 #endif
-	delete edgeRingList;
 
 	findShellsAndHoles(validEdgeRingList);
 #if GEOS_DEBUG
@@ -265,12 +265,17 @@
 	delete validEdgeRingList;
 }
 
+/* private */
 void
-Polygonizer::findValidRings(vector<EdgeRing*> *edgeRingList, vector<EdgeRing*> *validEdgeRingList, vector<LineString*> *invalidRingList)
+Polygonizer::findValidRings(vector<EdgeRing*>& edgeRingList,
+	vector<EdgeRing*> *validEdgeRingList,
+	vector<LineString*> *invalidRingList)
 {
-	for (unsigned int i=0, n=edgeRingList->size(); i<n; ++i)
+	typedef vector<EdgeRing*> EdgeRingList;
+	
+	for (EdgeRingList::size_type i=0, n=edgeRingList.size(); i<n; ++i)
 	{
-		EdgeRing *er=(*edgeRingList)[i];
+		EdgeRing *er = edgeRingList[i];
 		if (er->isValid())
 			validEdgeRingList->push_back(er);
 		else



More information about the geos-commits mailing list