diff --git a/Contractor/EdgeBasedGraphFactory.cpp b/Contractor/EdgeBasedGraphFactory.cpp index 77b377e8d..4367bb94e 100644 --- a/Contractor/EdgeBasedGraphFactory.cpp +++ b/Contractor/EdgeBasedGraphFactory.cpp @@ -128,7 +128,7 @@ EdgeBasedGraphFactory::EdgeBasedGraphFactory(int nodes, std::vectorGetNumberOfEdges() << " edge-based nodes."); } -void EdgeBasedGraphFactory::GetEdgeBasedEdges( std::vector< EdgeBasedEdge >& outputEdgeList ) { +void EdgeBasedGraphFactory::GetEdgeBasedEdges( std::deque< EdgeBasedEdge >& outputEdgeList ) { GUARANTEE(0 == outputEdgeList.size(), "Vector passed to EdgeBasedGraphFactory::GetEdgeBasedEdges(..) is not empty"); GUARANTEE(0 != edgeBasedEdges.size(), "No edges in edge based graph"); @@ -195,7 +195,6 @@ void EdgeBasedGraphFactory::InsertEdgeBasedNode( } void EdgeBasedGraphFactory::Run() { - INFO("Generating edge based representation of input data"); // edgeBasedNodes.reserve(_nodeBasedGraph->GetNumberOfEdges()); Percent p(_nodeBasedGraph->GetNumberOfNodes()); int numberOfSkippedTurns(0); @@ -253,8 +252,8 @@ void EdgeBasedGraphFactory::Run() { //distance += heightPenalty; //distance += ComputeTurnPenalty(u, v, w); assert(edgeData1.edgeBasedNodeID != edgeData2.edgeBasedNodeID); - if(edgeBasedEdges.size() == edgeBasedEdges.capacity()-3) - edgeBasedEdges.reserve(edgeBasedEdges.size()*1.1); +// if(edgeBasedEdges.size() == edgeBasedEdges.capacity()-3) +// edgeBasedEdges.reserve(edgeBasedEdges.size()*1.1); if(originalEdgeData.size() == originalEdgeData.capacity()-3) originalEdgeData.reserve(originalEdgeData.size()*1.1); OriginalEdgeData oed(v,edgeData2.nameID, turnInstruction); diff --git a/Contractor/EdgeBasedGraphFactory.h b/Contractor/EdgeBasedGraphFactory.h index 74d4929a0..4d8506038 100644 --- a/Contractor/EdgeBasedGraphFactory.h +++ b/Contractor/EdgeBasedGraphFactory.h @@ -29,6 +29,7 @@ #include #include +#include #include #include @@ -103,7 +104,7 @@ private: RestrictionMap _restrictionMap; - std::vector edgeBasedEdges; + std::deque edgeBasedEdges; std::vector edgeBasedNodes; std::vector originalEdgeData; std::vector inputNodeInfoList; @@ -127,7 +128,7 @@ public: 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 GetEdgeBasedEdges( std::vector< EdgeBasedEdge >& edges ); + void GetEdgeBasedEdges( std::deque< EdgeBasedEdge >& edges ); void GetEdgeBasedNodes( std::vector< EdgeBasedNode> & nodes); void GetOriginalEdgeData( std::vector< OriginalEdgeData> & originalEdgeData); short AnalyzeTurn(const NodeID u, const NodeID v, const NodeID w) const; diff --git a/Util/GraphLoader.h b/Util/GraphLoader.h index 606d603e3..c8c955d61 100644 --- a/Util/GraphLoader.h +++ b/Util/GraphLoader.h @@ -64,6 +64,10 @@ NodeID readBinaryOSRMGraphFromStream(std::istream &in, std::vector& edgeL trafficLightNodes.push_back(i); } + //tighten vector sizes + std::vector(bollardNodes).swap(bollardNodes); + std::vector(trafficLightNodes).swap(trafficLightNodes); + in.read((char*)&m, sizeof(unsigned)); DEBUG(" and " << m << " edges "); for(unsigned i = 0; i < inputRestrictions.size(); ++i) { diff --git a/createHierarchy.cpp b/createHierarchy.cpp index 99c27de8f..505434b53 100644 --- a/createHierarchy.cpp +++ b/createHierarchy.cpp @@ -93,7 +93,6 @@ int main (int argc, char *argv[]) { inputRestrictions.resize(usableRestrictionsCounter); restrictionsInstream.read((char *)&(inputRestrictions[0]), usableRestrictionsCounter*sizeof(_Restriction)); restrictionsInstream.close(); - INFO("restrictions size: " << inputRestrictions.size() << ", capacity: " << inputRestrictions.capacity()); std::ifstream in; in.open (argv[1], std::ifstream::in | std::ifstream::binary); @@ -110,9 +109,8 @@ int main (int argc, char *argv[]) { std::vector edgeList; NodeID nodeBasedNodeNumber = readBinaryOSRMGraphFromStream(in, edgeList, bollardNodes, trafficLightNodes, &internalToExternalNodeMapping, inputRestrictions); - INFO("bollardNodes size: " << bollardNodes.size() << ", bollardNodes.capacity: " << bollardNodes.capacity()); in.close(); - INFO("Loaded " << inputRestrictions.size() << " restrictions, " << bollardNodes.size() << " bollard nodes, " << trafficLightNodes.size() << " traffic lights"); + INFO(inputRestrictions.size() << " restrictions, " << bollardNodes.size() << " bollard nodes, " << trafficLightNodes.size() << " traffic lights"); if(!testDataFile("speedprofile.ini")) { ERR("Need speedprofile.ini to apply traffic signal penalty"); @@ -124,6 +122,7 @@ int main (int argc, char *argv[]) { * Building an edge-expanded graph from node-based input an turn restrictions */ + INFO("Generating edge-expanded graph representation"); EdgeBasedGraphFactory * edgeBasedGraphFactory = new EdgeBasedGraphFactory (nodeBasedNodeNumber, edgeList, bollardNodes, trafficLightNodes, inputRestrictions, internalToExternalNodeMapping, speedProfile, SRTM_ROOT); std::vector().swap(edgeList); @@ -132,14 +131,14 @@ int main (int argc, char *argv[]) { std::vector().swap(bollardNodes); std::vector().swap(trafficLightNodes); NodeID edgeBasedNodeNumber = edgeBasedGraphFactory->GetNumberOfNodes(); - std::vector edgeBasedEdgeList; + std::deque edgeBasedEdgeList; edgeBasedGraphFactory->GetEdgeBasedEdges(edgeBasedEdgeList); stxxl::vector externalEdgeBasedEdgeList; BOOST_FOREACH(EdgeBasedEdge & edge, edgeBasedEdgeList) { externalEdgeBasedEdgeList.push_back(edge); } - std::vector().swap(edgeBasedEdgeList); + edgeBasedEdgeList.clear(); /*** * Writing info on original (node-based) nodes