Changeset 2731
- Timestamp:
- Nov 19, 2009, 1:06:16 PM (15 years ago)
- Location:
- trunk/source
- Files:
-
- 4 edited
-
headers/geos/operation/overlay/MaximalEdgeRing.h (modified) (2 diffs)
-
headers/geos/operation/valid/ConnectedInteriorTester.h (modified) (1 diff)
-
operation/overlay/MaximalEdgeRing.cpp (modified) (1 diff)
-
operation/valid/ConnectedInteriorTester.cpp (modified) (8 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/source/headers/geos/operation/overlay/MaximalEdgeRing.h
r2557 r2731 83 83 /// pointers to newly allocated MinimalEdgeRing objects. 84 84 /// 85 /// @deprecated pass the vector yourself instead 86 /// 85 87 std::vector<MinimalEdgeRing*>* buildMinimalRings(); 86 88 … … 90 92 /// 91 93 void buildMinimalRings(std::vector<MinimalEdgeRing*>& minEdgeRings); 94 void buildMinimalRings(std::vector<EdgeRing*>& minEdgeRings); 92 95 93 96 /// \brief -
trunk/source/headers/geos/operation/valid/ConnectedInteriorTester.h
r2572 r2731 92 92 93 93 /** 94 * \brief 94 95 * Form DirectedEdges in graph into Minimal EdgeRings. 95 * (Minimal Edgerings must be used, because only they are guaranteed to provide96 * a correct isHole computation)97 96 * 98 * The returned vector and its contents are allocated on the 99 * heap; deletion responsibility is left to caller. 97 * Minimal Edgerings must be used, because only they are 98 * guaranteed to provide a correct isHole computation. 99 * 100 * @param minEdgeRings : newly allocated minimal edge rings will 101 * be push_back'ed here. 102 * deletion responsibility is left to caller. 100 103 */ 101 std::vector<geomgraph::EdgeRing*>* buildEdgeRings(102 std::vector<geomgraph::EdgeEnd*> *dirEdges);104 void buildEdgeRings(std::vector<geomgraph::EdgeEnd*> *dirEdges, 105 std::vector<geomgraph::EdgeRing*>& minEdgeRings); 103 106 104 107 /** -
trunk/source/operation/overlay/MaximalEdgeRing.cpp
r2550 r2731 125 125 } 126 126 127 /*public*/ 128 void 129 MaximalEdgeRing::buildMinimalRings(vector<EdgeRing*>& minEdgeRings) 130 { 131 DirectedEdge *de=startDe; 132 do { 133 if(de->getMinEdgeRing()==NULL) { 134 MinimalEdgeRing *minEr=new MinimalEdgeRing(de, geometryFactory); 135 minEdgeRings.push_back(minEr); 136 } 137 de=de->getNext(); 138 } while(de!=startDe); 139 } 140 127 141 } // namespace geos.operation.overlay 128 142 } // namespace geos.operation -
trunk/source/operation/valid/ConnectedInteriorTester.cpp
r2572 r2731 54 54 #endif 55 55 56 //#define GEOS_CAST_PARANOIA 1 57 56 58 #if GEOS_DEBUG 57 59 #include <iostream> … … 115 117 graph.linkResultDirectedEdges(); 116 118 117 // Someone has to delete the returned vector and its contents 118 std::vector<EdgeRing*>* edgeRings=buildEdgeRings(graph.getEdgeEnds()); 119 assert(edgeRings); 120 121 #if GEOS_DEBUG 122 cerr << "buildEdgeRings constructed " << edgeRings->size() << " edgeRings." << endl; 119 std::vector<EdgeRing*> edgeRings; 120 buildEdgeRings(graph.getEdgeEnds(), edgeRings); 121 122 #if GEOS_DEBUG 123 cerr << "buildEdgeRings constructed " << edgeRings.size() << " edgeRings." << endl; 123 124 #endif 124 125 … … 133 134 134 135 #if GEOS_DEBUG 135 cerr << "after visitShellInteriors edgeRings are " << edgeRings ->size() << " edgeRings." << endl;136 cerr << "after visitShellInteriors edgeRings are " << edgeRings.size() << " edgeRings." << endl; 136 137 #endif 137 138 … … 143 144 * polygon into at least two pieces. The polygon is thus invalid. 144 145 */ 145 bool res=!hasUnvisitedShellEdge(edgeRings); 146 147 assert(edgeRings); 148 #if GEOS_DEBUG 149 cerr << "releasing " << edgeRings->size() << " edgeRings." << endl; 146 bool res=!hasUnvisitedShellEdge(&edgeRings); 147 148 #if GEOS_DEBUG 149 cerr << "releasing " << edgeRings.size() << " edgeRings." << endl; 150 150 #endif 151 151 // Release memory allocated by buildEdgeRings 152 for(size_t i=0, n=edgeRings ->size(); i<n; ++i)153 { 154 EdgeRing* er = (*edgeRings)[i];152 for(size_t i=0, n=edgeRings.size(); i<n; ++i) 153 { 154 EdgeRing* er = edgeRings[i]; 155 155 #if GEOS_DEBUG 156 156 cerr<<*er<<endl; … … 162 162 #endif 163 163 } 164 delete edgeRings;164 edgeRings.clear(); 165 165 166 166 // Release memory allocated by MaximalEdgeRings … … 194 194 195 195 /*private*/ 196 std::vector<EdgeRing*>* 197 ConnectedInteriorTester::buildEdgeRings(std::vector<EdgeEnd*> *dirEdges) 196 void 197 ConnectedInteriorTester::buildEdgeRings(std::vector<EdgeEnd*> *dirEdges, 198 std::vector<EdgeRing*>& minEdgeRings) 198 199 { 199 200 #if GEOS_DEBUG 200 201 cerr << __FUNCTION__ << " got " << dirEdges->size() << " EdgeEnd vector" << endl; 201 202 #endif 202 std::vector<MinimalEdgeRing*> minEdgeRings; 203 for(size_t i=0, n=dirEdges->size(); i<n; ++i) 204 { 203 204 typedef std::vector<EdgeEnd*> EdgeEnds; 205 206 //std::vector<MinimalEdgeRing*> minEdgeRings; 207 for(EdgeEnds::size_type i=0, n=dirEdges->size(); i<n; ++i) 208 { 209 #ifdef GEOS_CAST_PARANOIA 205 210 assert(dynamic_cast<DirectedEdge*>((*dirEdges)[i])); 211 #endif 206 212 DirectedEdge *de=static_cast<DirectedEdge*>((*dirEdges)[i]); 207 213 … … 213 219 if(de->isInResult() && de->getEdgeRing()==NULL) 214 220 { 215 //EdgeRing *er=new MaximalEdgeRing(de,geometryFactory); 216 //edgeRings->push_back(er); 217 218 MaximalEdgeRing* er=new MaximalEdgeRing(de, geometryFactory); 221 MaximalEdgeRing* er = new MaximalEdgeRing(de, 222 geometryFactory); 219 223 // We track MaximalEdgeRings allocations 220 224 // using the private maximalEdgeRings vector … … 225 229 } 226 230 } 231 /* 227 232 std::vector<EdgeRing*> *edgeRings=new std::vector<EdgeRing*>(); 228 233 edgeRings->assign(minEdgeRings.begin(), minEdgeRings.end()); 229 234 return edgeRings; 235 */ 230 236 } 231 237
Note:
See TracChangeset
for help on using the changeset viewer.
