[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