From 26662b7190f167b543a7d5ac8e20f65721b33b82 Mon Sep 17 00:00:00 2001 From: DennisOSRM Date: Fri, 27 Apr 2012 16:50:34 +0200 Subject: [PATCH] Original Edge Data gets written to output stream with buffering --- Contractor/EdgeBasedGraphFactory.cpp | 19 +++++++++++++++++-- Contractor/EdgeBasedGraphFactory.h | 2 +- createHierarchy.cpp | 14 +++++++------- 3 files changed, 25 insertions(+), 10 deletions(-) diff --git a/Contractor/EdgeBasedGraphFactory.cpp b/Contractor/EdgeBasedGraphFactory.cpp index 89f57c4a3..0fc0470dd 100644 --- a/Contractor/EdgeBasedGraphFactory.cpp +++ b/Contractor/EdgeBasedGraphFactory.cpp @@ -194,11 +194,14 @@ void EdgeBasedGraphFactory::InsertEdgeBasedNode( edgeBasedNodes.push_back(currentNode); } -void EdgeBasedGraphFactory::Run() { -// edgeBasedNodes.reserve(_nodeBasedGraph->GetNumberOfEdges()); +void EdgeBasedGraphFactory::Run(const char * originalEdgeDataFilename) { Percent p(_nodeBasedGraph->GetNumberOfNodes()); int numberOfSkippedTurns(0); int nodeBasedEdgeCounter(0); + unsigned numberOfOriginalEdges(0); + std::ofstream originalEdgeDataOutFile(originalEdgeDataFilename, std::ios::binary); + originalEdgeDataOutFile.write((char*)&numberOfOriginalEdges, sizeof(unsigned)); + //loop over all edges and generate new set of nodes. for(_NodeBasedDynamicGraph::NodeIterator u = 0; u < _nodeBasedGraph->GetNumberOfNodes(); ++u ) { @@ -265,6 +268,12 @@ void EdgeBasedGraphFactory::Run() { OriginalEdgeData oed(v,edgeData2.nameID, turnInstruction); EdgeBasedEdge newEdge(edgeData1.edgeBasedNodeID, edgeData2.edgeBasedNodeID, edgeBasedEdges.size(), distance, true, false ); originalEdgeData.push_back(oed); + if(originalEdgeData.size() > 100000) { + originalEdgeDataOutFile.write((char*)&(originalEdgeData[0]), originalEdgeData.size()*sizeof(OriginalEdgeData)); + originalEdgeData.clear(); + } + ++numberOfOriginalEdges; + ++nodeBasedEdgeCounter; edgeBasedEdges.push_back(newEdge); } else { ++numberOfSkippedTurns; @@ -274,6 +283,12 @@ void EdgeBasedGraphFactory::Run() { } p.printIncrement(); } + numberOfOriginalEdges += originalEdgeData.size(); + originalEdgeDataOutFile.write((char*)&(originalEdgeData[0]), originalEdgeData.size()*sizeof(OriginalEdgeData)); + originalEdgeDataOutFile.seekp(std::ios::beg); + originalEdgeDataOutFile.write((char*)&numberOfOriginalEdges, sizeof(unsigned)); + originalEdgeDataOutFile.close(); + INFO("Sorting edge-based Nodes"); std::sort(edgeBasedNodes.begin(), edgeBasedNodes.end()); INFO("Removing duplicate nodes (if any)"); diff --git a/Contractor/EdgeBasedGraphFactory.h b/Contractor/EdgeBasedGraphFactory.h index 32520d655..317fc038d 100644 --- a/Contractor/EdgeBasedGraphFactory.h +++ b/Contractor/EdgeBasedGraphFactory.h @@ -126,7 +126,7 @@ public: template< class InputEdgeT > explicit EdgeBasedGraphFactory(int nodes, std::vector & inputEdges, std::vector & _bollardNodes, std::vector & trafficLights, std::vector<_Restriction> & inputRestrictions, std::vector & nI, boost::property_tree::ptree speedProfile, std::string & srtm); - void Run(); + void Run(const char * originalEdgeDataFilename); void GetEdgeBasedEdges( std::vector< EdgeBasedEdge >& edges ); void GetEdgeBasedNodes( std::vector< EdgeBasedNode> & nodes); void GetOriginalEdgeData( std::vector< OriginalEdgeData> & originalEdgeData); diff --git a/createHierarchy.cpp b/createHierarchy.cpp index 93161334b..8f268b38d 100644 --- a/createHierarchy.cpp +++ b/createHierarchy.cpp @@ -126,7 +126,7 @@ int main (int argc, char *argv[]) { EdgeBasedGraphFactory * edgeBasedGraphFactory = new EdgeBasedGraphFactory (nodeBasedNodeNumber, edgeList, bollardNodes, trafficLightNodes, inputRestrictions, internalToExternalNodeMapping, speedProfile, SRTM_ROOT); std::vector().swap(edgeList); - edgeBasedGraphFactory->Run(); + edgeBasedGraphFactory->Run(edgeOut); std::vector<_Restriction>().swap(inputRestrictions); std::vector().swap(bollardNodes); std::vector().swap(trafficLightNodes); @@ -157,12 +157,12 @@ int main (int argc, char *argv[]) { std::vector originalEdgeData; edgeBasedGraphFactory->GetOriginalEdgeData(originalEdgeData); - std::ofstream oedOutFile(edgeOut, std::ios::binary); - unsigned numberOfOrigEdges = originalEdgeData.size(); - oedOutFile.write((char*)&numberOfOrigEdges, sizeof(unsigned)); - oedOutFile.write((char*)&(originalEdgeData[0]), originalEdgeData.size()*sizeof(OriginalEdgeData)); - oedOutFile.close(); - std::vector().swap(originalEdgeData); +// std::ofstream oedOutFile(edgeOut, std::ios::binary); +// unsigned numberOfOrigEdges = originalEdgeData.size(); +// oedOutFile.write((char*)&numberOfOrigEdges, sizeof(unsigned)); +// oedOutFile.write((char*)&(originalEdgeData[0]), originalEdgeData.size()*sizeof(OriginalEdgeData)); +// oedOutFile.close(); +// std::vector().swap(originalEdgeData); std::vector nodeBasedEdgeList; edgeBasedGraphFactory->GetEdgeBasedNodes(nodeBasedEdgeList);