From 6fe580bd7571cd5b48939f918618dd23dc6a854f Mon Sep 17 00:00:00 2001 From: DennisOSRM Date: Wed, 25 Apr 2012 18:56:42 +0200 Subject: [PATCH] Undoing wrong merge. Flushing some memory before generation of edge-expanded graph --- Contractor/EdgeBasedGraphFactory.cpp | 58 ++-------------------------- Contractor/EdgeBasedGraphFactory.h | 1 - createHierarchy.cpp | 2 +- 3 files changed, 4 insertions(+), 57 deletions(-) diff --git a/Contractor/EdgeBasedGraphFactory.cpp b/Contractor/EdgeBasedGraphFactory.cpp index a207816ba..b49f4a498 100644 --- a/Contractor/EdgeBasedGraphFactory.cpp +++ b/Contractor/EdgeBasedGraphFactory.cpp @@ -122,11 +122,11 @@ EdgeBasedGraphFactory::EdgeBasedGraphFactory(int nodes, std::vector().swap(inputEdges); std::sort( edges.begin(), edges.end() ); _nodeBasedGraph.reset(new _NodeBasedDynamicGraph( nodes, edges )); - INFO("Converted " << inputEdges.size() << " node-based edges into " << _nodeBasedGraph->GetNumberOfEdges() << " edge-based nodes."); } void EdgeBasedGraphFactory::GetEdgeBasedEdges(std::vector< EdgeBasedEdge >& outputEdgeList ) { @@ -200,63 +200,12 @@ void EdgeBasedGraphFactory::Run() { Percent p(_nodeBasedGraph->GetNumberOfNodes()); int numberOfSkippedTurns(0); int nodeBasedEdgeCounter(0); - int triviallySkippedEdges(0); - - std::vector > edgesToRemove; - std::vector<_NodeBasedEdge > edgesToInsert; - - //loop over graph and remove all trivially contractable edges. - for(_NodeBasedDynamicGraph::NodeIterator u = 0; u < _nodeBasedGraph->GetNumberOfNodes(); ++u ) { - for(_NodeBasedDynamicGraph::EdgeIterator e1 = _nodeBasedGraph->BeginEdges(u); e1 < _nodeBasedGraph->EndEdges(u); ++e1) { - _NodeBasedDynamicGraph::NodeIterator v = _nodeBasedGraph->GetTarget(e1); - const _NodeBasedDynamicGraph::EdgeData edgeData1 = _nodeBasedGraph->GetEdgeData(e1); - for(_NodeBasedDynamicGraph::EdgeIterator e2 = _nodeBasedGraph->BeginEdges(v); e2 < _nodeBasedGraph->EndEdges(v); ++e2) { - //TODO: Nur vorwärts-kanten und bei ungerichteten kanten nur eine richtung einfügen. Vorsicht! - const _NodeBasedDynamicGraph::EdgeData edgeData2 = _nodeBasedGraph->GetEdgeData(e2); - _NodeBasedDynamicGraph::NodeIterator w = _nodeBasedGraph->GetTarget(e2); - double testAngle = GetAngleBetweenTwoEdges(inputNodeInfoList[u], inputNodeInfoList[v], inputNodeInfoList[w]); - if((testAngle > 179 && testAngle < 181) && _nodeBasedGraph->GetOutDegree(v) <= 2 && edgeData1.nameID == edgeData2.nameID && - edgeData1.backward == edgeData2.backward && edgeData1.isAccessRestricted == edgeData2.isAccessRestricted) { - - //remove edges (u,v), (v,w) - edgesToRemove.push_back(std::make_pair(u,v)); - edgesToRemove.push_back(std::make_pair(v,w)); - - //add edge (v,w) with combined distance - _NodeBasedEdge newEdge; - newEdge.source = u; newEdge.target = w; - newEdge.data = edgeData1; newEdge.data.distance += edgeData2.distance; - ++triviallySkippedEdges; - edgesToInsert.push_back(newEdge); - } - } - } - } - - INFO("Inserting " << edgesToInsert.size() << " contracted edges"); - - Percent percent(edgesToInsert.size()); - for(unsigned i = 0; i < 10; ++i) { - _nodeBasedGraph->DeleteEdge(edgesToRemove[2*i].first, edgesToRemove[2*i].second); - _nodeBasedGraph->DeleteEdge(edgesToRemove[2*i+1].first, edgesToRemove[2*i+1].second); - - INFO("->delete edge (" << edgesToRemove[2*i].first << "," << edgesToRemove[2*i].second << ")"); - INFO("->delete edge (" << edgesToRemove[2*i+1].first << "," << edgesToRemove[2*i+1].second << ")"); - - _NodeBasedEdge edge = edgesToInsert[i]; - INFO(" inserted edge (" << edge.source << "," << edge.target << ") " << i << "/" << edgesToInsert.size()); - assert(edge.source < _nodeBasedGraph->GetNumberOfNodes()); - assert(edge.target < _nodeBasedGraph->GetNumberOfNodes()); - _nodeBasedGraph->InsertEdge(edge.source, edge.target, edge.data); - percent.printIncrement(); - } - - INFO("Generating Edge-based Nodes"); //loop over all edges and generate new set of nodes. for(_NodeBasedDynamicGraph::NodeIterator u = 0; u < _nodeBasedGraph->GetNumberOfNodes(); ++u ) { for(_NodeBasedDynamicGraph::EdgeIterator e1 = _nodeBasedGraph->BeginEdges(u); e1 < _nodeBasedGraph->EndEdges(u); ++e1) { _NodeBasedDynamicGraph::NodeIterator v = _nodeBasedGraph->GetTarget(e1); + if(_nodeBasedGraph->GetEdgeData(e1).type != SHRT_MAX) { assert(e1 != UINT_MAX); assert(u != UINT_MAX); @@ -330,7 +279,6 @@ void EdgeBasedGraphFactory::Run() { INFO("Edge-based graph contains " << edgeBasedEdges.size() << " edges, blowup is " << (double)edgeBasedEdges.size()/(double)nodeBasedEdgeCounter); INFO("Edge-based graph skipped " << numberOfSkippedTurns << " turns, defined by " << numberOfTurnRestrictions << " restrictions."); INFO("Generated " << edgeBasedNodes.size() << " edge based nodes"); - INFO("Trivially contracted edges: " << triviallySkippedEdges); } short EdgeBasedGraphFactory::AnalyzeTurn(const NodeID u, const NodeID v, const NodeID w) const { diff --git a/Contractor/EdgeBasedGraphFactory.h b/Contractor/EdgeBasedGraphFactory.h index 517fafa6f..ac9dd3d54 100644 --- a/Contractor/EdgeBasedGraphFactory.h +++ b/Contractor/EdgeBasedGraphFactory.h @@ -29,7 +29,6 @@ #include #include -#include #include #include diff --git a/createHierarchy.cpp b/createHierarchy.cpp index 3f24926ff..04b34d17d 100644 --- a/createHierarchy.cpp +++ b/createHierarchy.cpp @@ -138,7 +138,7 @@ int main (int argc, char *argv[]) { BOOST_FOREACH(EdgeBasedEdge & edge, edgeBasedEdgeList) { externalEdgeBasedEdgeList.push_back(edge); } - edgeBasedEdgeList.clear(); + std::vector().swap(edgeBasedEdgeList); /*** * Writing info on original (node-based) nodes