Changeset 2726


Ignore:
Timestamp:
Nov 19, 2009, 11:19:39 AM (15 years ago)
Author:
strk
Message:

Change PolygonizeGraph::getEdgeRings signature so not to force heap allocation of std::vector, update Polygonizer accordingly

Location:
trunk/source
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/source/headers/geos/operation/polygonize/PolygonizeGraph.h

    r2725 r2726  
    9797         * Computes the EdgeRings formed by the edges in this graph.
    9898         *
    99          * @return a list of the EdgeRing found by the
    100          *      polygonization process.
    101          */
    102         std::vector<EdgeRing*>* getEdgeRings();
     99         * @param edgeRingList : the EdgeRing found by the
     100         *      polygonization process will be pushed here.
     101         *
     102         */
     103        void getEdgeRings(std::vector<EdgeRing*>& edgeRingList);
    103104
    104105        /**
  • trunk/source/headers/geos/operation/polygonize/Polygonizer.h

    r2567 r2726  
    9696        void polygonize();
    9797
    98         void findValidRings(std::vector<EdgeRing*> *edgeRingList,
     98        /// @todo : take all args by ref
     99        void findValidRings(std::vector<EdgeRing*>& edgeRingList,
    99100                        std::vector<EdgeRing*> *validEdgeRingList,
    100101                        std::vector<geom::LineString*> *invalidRingList);
  • trunk/source/operation/polygonize/PolygonizeGraph.cpp

    r2725 r2726  
    214214}
    215215
    216 /**
    217  * Computes the EdgeRings formed by the edges in this graph.
    218  * @return a list of the EdgeRing found by the polygonization process.
    219  */
    220 std::vector<EdgeRing*>*
    221 PolygonizeGraph::getEdgeRings()
     216/* public */
     217void
     218PolygonizeGraph::getEdgeRings(std::vector<EdgeRing*>& edgeRingList)
    222219{
    223220        // maybe could optimize this, since most of these pointers should
     
    233230
    234231        // find all edgerings
    235         std::vector<EdgeRing*> *edgeRingList=new std::vector<EdgeRing*>();
    236232        for(unsigned int i=0; i<dirEdges.size(); ++i)
    237233        {
     
    240236                if (de->isInRing()) continue;
    241237                EdgeRing *er=findEdgeRing(de);
    242                 edgeRingList->push_back(er);
    243         }
    244         return edgeRingList;
     238                edgeRingList.push_back(er);
     239        }
    245240}
    246241
  • trunk/source/operation/polygonize/Polygonizer.cpp

    r2567 r2726  
    237237        dangles=graph->deleteDangles();
    238238        cutEdges=graph->deleteCutEdges();
    239         vector<EdgeRing*> *edgeRingList=graph->getEdgeRings();
     239        vector<EdgeRing*> edgeRingList;
     240        graph->getEdgeRings(edgeRingList);
    240241#if GEOS_DEBUG
    241         cerr<<"Polygonizer::polygonize(): "<<edgeRingList->size()<<" edgeRings in graph"<<endl;
     242        cerr<<"Polygonizer::polygonize(): "<<edgeRingList.size()<<" edgeRings in graph"<<endl;
    242243#endif
    243244        vector<EdgeRing*> *validEdgeRingList=new vector<EdgeRing*>();
     
    248249        cerr<<"                           "<<invalidRingLines->size()<<" invalid"<<endl;
    249250#endif
    250         delete edgeRingList;
    251251
    252252        findShellsAndHoles(validEdgeRingList);
     
    266266}
    267267
    268 void
    269 Polygonizer::findValidRings(vector<EdgeRing*> *edgeRingList, vector<EdgeRing*> *validEdgeRingList, vector<LineString*> *invalidRingList)
    270 {
    271         for (unsigned int i=0, n=edgeRingList->size(); i<n; ++i)
    272         {
    273                 EdgeRing *er=(*edgeRingList)[i];
     268/* private */
     269void
     270Polygonizer::findValidRings(vector<EdgeRing*>& edgeRingList,
     271        vector<EdgeRing*> *validEdgeRingList,
     272        vector<LineString*> *invalidRingList)
     273{
     274        typedef vector<EdgeRing*> EdgeRingList;
     275       
     276        for (EdgeRingList::size_type i=0, n=edgeRingList.size(); i<n; ++i)
     277        {
     278                EdgeRing *er = edgeRingList[i];
    274279                if (er->isValid())
    275280                        validEdgeRingList->push_back(er);
Note: See TracChangeset for help on using the changeset viewer.