[geos-commits] r2924 - in trunk: include/geos/operation/polygonize src/operation/polygonize

svn_geos at osgeo.org svn_geos at osgeo.org
Mon Feb 22 17:06:33 EST 2010


Author: strk
Date: 2010-02-22 17:06:33 -0500 (Mon, 22 Feb 2010)
New Revision: 2924

Modified:
   trunk/include/geos/operation/polygonize/Polygonizer.h
   trunk/src/operation/polygonize/Polygonizer.cpp
Log:
More heap allocations bite the dust...


Modified: trunk/include/geos/operation/polygonize/Polygonizer.h
===================================================================
--- trunk/include/geos/operation/polygonize/Polygonizer.h	2010-02-22 21:51:22 UTC (rev 2923)
+++ trunk/include/geos/operation/polygonize/Polygonizer.h	2010-02-22 22:06:33 UTC (rev 2924)
@@ -100,13 +100,13 @@
 			std::vector<EdgeRing*> *validEdgeRingList,
 			std::vector<geom::LineString*> *invalidRingList);
 
-	void findShellsAndHoles(std::vector<EdgeRing*> *edgeRingList);
+	void findShellsAndHoles(const std::vector<EdgeRing*>& edgeRingList);
 
-	static void assignHolesToShells(std::vector<EdgeRing*> *holeList,
-			std::vector<EdgeRing*> *shellList);
+	static void assignHolesToShells(const std::vector<EdgeRing*>& holeList,
+			std::vector<EdgeRing*>& shellList);
 
 	static void assignHoleToShell(EdgeRing *holeER,
-			std::vector<EdgeRing*> *shellList);
+			std::vector<EdgeRing*>& shellList);
 
 protected:
 
@@ -117,8 +117,8 @@
 	std::vector<const geom::LineString*> cutEdges;
 	std::vector<geom::LineString*> *invalidRingLines;
 
-	std::vector<EdgeRing*> *holeList;
-	std::vector<EdgeRing*> *shellList;
+	std::vector<EdgeRing*> holeList;
+	std::vector<EdgeRing*> shellList;
 	std::vector<geom::Polygon*> *polyList;
 
 public:

Modified: trunk/src/operation/polygonize/Polygonizer.cpp
===================================================================
--- trunk/src/operation/polygonize/Polygonizer.cpp	2010-02-22 21:51:22 UTC (rev 2923)
+++ trunk/src/operation/polygonize/Polygonizer.cpp	2010-02-22 22:06:33 UTC (rev 2924)
@@ -65,8 +65,8 @@
 	dangles(),
 	cutEdges(),
 	invalidRingLines(NULL),
-	holeList(NULL),
-	shellList(NULL),
+	holeList(),
+	shellList(),
 	polyList(NULL)
 {
 }
@@ -76,8 +76,6 @@
 	delete lineStringAdder;
 	delete graph;
 
-	delete holeList;
-	delete shellList;
 	if ( invalidRingLines )
 	{
 		for (unsigned int i=0, n=invalidRingLines->size(); i<n; ++i)
@@ -233,28 +231,27 @@
 #if GEOS_DEBUG
 	cerr<<"Polygonizer::polygonize(): "<<edgeRingList.size()<<" edgeRings in graph"<<endl;
 #endif
-	vector<EdgeRing*> *validEdgeRingList=new vector<EdgeRing*>();
+	vector<EdgeRing*> validEdgeRingList;
 	invalidRingLines=new vector<LineString*>();
-	findValidRings(edgeRingList, validEdgeRingList, invalidRingLines);
+	findValidRings(edgeRingList, &validEdgeRingList, invalidRingLines);
 #if GEOS_DEBUG
-	cerr<<"                           "<<validEdgeRingList->size()<<" valid"<<endl;
-	cerr<<"                           "<<invalidRingLines->size()<<" invalid"<<endl;
+	cerr<<"                           "<<validEdgeRingList.size()<<" valid"<<endl;
+	cerr<<"                           "<<invalidRingLines.size()<<" invalid"<<endl;
 #endif
 
 	findShellsAndHoles(validEdgeRingList);
 #if GEOS_DEBUG
-	cerr<<"                           "<<holeList->size()<<" holes"<<endl;
-	cerr<<"                           "<<shellList->size()<<" shells"<<endl;
+	cerr<<"                           "<<holeList.size()<<" holes"<<endl;
+	cerr<<"                           "<<shellList.size()<<" shells"<<endl;
 #endif
 
 	assignHolesToShells(holeList, shellList);
 
-	for (unsigned int i=0, n=shellList->size(); i<n; ++i)
+	for (unsigned int i=0, n=shellList.size(); i<n; ++i)
 	{
-		EdgeRing *er=(*shellList)[i];
+		EdgeRing *er=shellList[i];
 		polyList->push_back(er->getPolygon());
 	}
-	delete validEdgeRingList;
 }
 
 /* private */
@@ -277,36 +274,39 @@
 	}
 }
 
+/* private */
 void
-Polygonizer::findShellsAndHoles(vector<EdgeRing*> *edgeRingList)
+Polygonizer::findShellsAndHoles(const vector<EdgeRing*>& edgeRingList)
 {
-	holeList=new vector<EdgeRing*>();
-	shellList=new vector<EdgeRing*>();
-	for (unsigned int i=0, n=edgeRingList->size(); i<n; ++i)
+	holeList.clear(); 
+	shellList.clear();
+	for (unsigned int i=0, n=edgeRingList.size(); i<n; ++i)
 	{
-		EdgeRing *er=(*edgeRingList)[i];
+		EdgeRing *er=edgeRingList[i];
 		if (er->isHole())
-			holeList->push_back(er);
+			holeList.push_back(er);
 		else
-			shellList->push_back(er);
+			shellList.push_back(er);
 	}
 }
 
+/* private */
 void
-Polygonizer::assignHolesToShells(vector<EdgeRing*> *holeList,vector<EdgeRing*> *shellList)
+Polygonizer::assignHolesToShells(const vector<EdgeRing*>& holeList, vector<EdgeRing*>& shellList)
 {
-	for (unsigned int i=0, n=holeList->size(); i<n; ++i)
+	for (unsigned int i=0, n=holeList.size(); i<n; ++i)
 	{
-		EdgeRing *holeER=(*holeList)[i];
-		assignHoleToShell(holeER,shellList);
+		EdgeRing *holeER=holeList[i];
+		assignHoleToShell(holeER, shellList);
 	}
 }
 
+/* private */
 void
 Polygonizer::assignHoleToShell(EdgeRing *holeER,
-		vector<EdgeRing*> *shellList)
+		vector<EdgeRing*>& shellList)
 {
-	EdgeRing *shell=EdgeRing::findEdgeRingContaining(holeER, shellList);
+	EdgeRing *shell = EdgeRing::findEdgeRingContaining(holeER, &shellList);
 
 	if (shell!=NULL)
 		shell->addHole(holeER->getRingOwnership());



More information about the geos-commits mailing list