Catching any left-over exception that may occur during preprocessing (stxxl)
This commit is contained in:
		
							parent
							
								
									25b8b37f00
								
							
						
					
					
						commit
						03e3673dbb
					
				| @ -56,212 +56,216 @@ std::vector<NodeID> trafficLightNodes; | ||||
| std::vector<ImportEdge> edgeList; | ||||
| 
 | ||||
| int main (int argc, char *argv[]) { | ||||
|     if(argc < 3) { | ||||
|         ERR("usage: " << std::endl << argv[0] << " <osrm-data> <osrm-restrictions> [<profile>]"); | ||||
|     } | ||||
| 
 | ||||
|     double startupTime = get_timestamp(); | ||||
|     unsigned numberOfThreads = omp_get_num_procs(); | ||||
|     if(testDataFile("contractor.ini")) { | ||||
|         ContractorConfiguration contractorConfig("contractor.ini"); | ||||
|         unsigned rawNumber = stringToInt(contractorConfig.GetParameter("Threads")); | ||||
|         if(rawNumber != 0 && rawNumber <= numberOfThreads) | ||||
|             numberOfThreads = rawNumber; | ||||
|     } | ||||
|     omp_set_num_threads(numberOfThreads); | ||||
| 
 | ||||
|     INFO("Using restrictions from file: " << argv[2]); | ||||
|     std::ifstream restrictionsInstream(argv[2], std::ios::binary); | ||||
|     if(!restrictionsInstream.good()) { | ||||
|         ERR("Could not access <osrm-restrictions> files"); | ||||
|     } | ||||
|     _Restriction restriction; | ||||
|     unsigned usableRestrictionsCounter(0); | ||||
|     restrictionsInstream.read((char*)&usableRestrictionsCounter, sizeof(unsigned)); | ||||
|     inputRestrictions.resize(usableRestrictionsCounter); | ||||
|     restrictionsInstream.read((char *)&(inputRestrictions[0]), usableRestrictionsCounter*sizeof(_Restriction)); | ||||
|     restrictionsInstream.close(); | ||||
| 
 | ||||
|     std::ifstream in; | ||||
|     in.open (argv[1], std::ifstream::in | std::ifstream::binary); | ||||
|     if (!in.is_open()) { | ||||
|         ERR("Cannot open " << argv[1]); | ||||
|     } | ||||
| 
 | ||||
|     std::string nodeOut(argv[1]);		nodeOut += ".nodes"; | ||||
|     std::string edgeOut(argv[1]);		edgeOut += ".edges"; | ||||
|     std::string graphOut(argv[1]);		graphOut += ".hsgr"; | ||||
|     std::string ramIndexOut(argv[1]);	ramIndexOut += ".ramIndex"; | ||||
|     std::string fileIndexOut(argv[1]);	fileIndexOut += ".fileIndex"; | ||||
| 
 | ||||
|     /*** Setup Scripting Environment ***/ | ||||
|     if(!testDataFile( (argc > 3 ? argv[3] : "profile.lua") )) { | ||||
|         ERR("Need profile.lua to apply traffic signal penalty"); | ||||
|     } | ||||
| 
 | ||||
|     // Create a new lua state
 | ||||
|     lua_State *myLuaState = luaL_newstate(); | ||||
| 
 | ||||
|     // Connect LuaBind to this lua state
 | ||||
|     luabind::open(myLuaState); | ||||
| 
 | ||||
|     //open utility libraries string library;
 | ||||
|     luaL_openlibs(myLuaState); | ||||
| 
 | ||||
|     //adjust lua load path
 | ||||
|     luaAddScriptFolderToLoadPath( myLuaState, (argc > 3 ? argv[3] : "profile.lua") ); | ||||
| 
 | ||||
|     // Now call our function in a lua script
 | ||||
|     INFO("Parsing speedprofile from " << (argc > 3 ? argv[3] : "profile.lua") ); | ||||
|     if(0 != luaL_dofile(myLuaState, (argc > 3 ? argv[3] : "profile.lua") )) { | ||||
|         ERR(lua_tostring(myLuaState,-1)<< " occured in scripting block"); | ||||
|     } | ||||
| 
 | ||||
|     EdgeBasedGraphFactory::SpeedProfileProperties speedProfile; | ||||
| 
 | ||||
|     if(0 != luaL_dostring( myLuaState, "return traffic_signal_penalty\n")) { | ||||
|         ERR(lua_tostring(myLuaState,-1)<< " occured in scripting block"); | ||||
|     } | ||||
|     speedProfile.trafficSignalPenalty = 10*lua_tointeger(myLuaState, -1); | ||||
| 
 | ||||
|     if(0 != luaL_dostring( myLuaState, "return u_turn_penalty\n")) { | ||||
|         ERR(lua_tostring(myLuaState,-1)<< " occured in scripting block"); | ||||
|     } | ||||
|     speedProfile.uTurnPenalty = 10*lua_tointeger(myLuaState, -1); | ||||
| 
 | ||||
|     speedProfile.has_turn_penalty_function = lua_function_exists( myLuaState, "turn_function" ); | ||||
| 
 | ||||
|     std::vector<ImportEdge> edgeList; | ||||
|     NodeID nodeBasedNodeNumber = readBinaryOSRMGraphFromStream(in, edgeList, bollardNodes, trafficLightNodes, &internalToExternalNodeMapping, inputRestrictions); | ||||
|     in.close(); | ||||
|     INFO(inputRestrictions.size() << " restrictions, " << bollardNodes.size() << " bollard nodes, " << trafficLightNodes.size() << " traffic lights"); | ||||
|     if(0 == edgeList.size()) | ||||
|         ERR("The input data is broken. It is impossible to do any turns in this graph"); | ||||
| 
 | ||||
| 
 | ||||
|     /***
 | ||||
|      * 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); | ||||
|     std::vector<ImportEdge>().swap(edgeList); | ||||
|     edgeBasedGraphFactory->Run(edgeOut.c_str(), myLuaState); | ||||
|     std::vector<_Restriction>().swap(inputRestrictions); | ||||
|     std::vector<NodeID>().swap(bollardNodes); | ||||
|     std::vector<NodeID>().swap(trafficLightNodes); | ||||
|     NodeID edgeBasedNodeNumber = edgeBasedGraphFactory->GetNumberOfNodes(); | ||||
|     DeallocatingVector<EdgeBasedEdge> edgeBasedEdgeList; | ||||
|     edgeBasedGraphFactory->GetEdgeBasedEdges(edgeBasedEdgeList); | ||||
|     DeallocatingVector<EdgeBasedGraphFactory::EdgeBasedNode> nodeBasedEdgeList; | ||||
|     edgeBasedGraphFactory->GetEdgeBasedNodes(nodeBasedEdgeList); | ||||
|     delete edgeBasedGraphFactory; | ||||
| 
 | ||||
|     /***
 | ||||
|      * Writing info on original (node-based) nodes | ||||
|      */ | ||||
| 
 | ||||
|     INFO("writing node map ..."); | ||||
|     std::ofstream mapOutFile(nodeOut.c_str(), std::ios::binary); | ||||
|     mapOutFile.write((char *)&(internalToExternalNodeMapping[0]), internalToExternalNodeMapping.size()*sizeof(NodeInfo)); | ||||
|     mapOutFile.close(); | ||||
|     std::vector<NodeInfo>().swap(internalToExternalNodeMapping); | ||||
| 
 | ||||
|     double expansionHasFinishedTime = get_timestamp() - startupTime; | ||||
| 
 | ||||
|     /***
 | ||||
|      * Building grid-like nearest-neighbor data structure | ||||
|      */ | ||||
| 
 | ||||
|     INFO("building grid ..."); | ||||
|     WritableGrid * writeableGrid = new WritableGrid(); | ||||
|     writeableGrid->ConstructGrid(nodeBasedEdgeList, ramIndexOut.c_str(), fileIndexOut.c_str()); | ||||
|     delete writeableGrid; | ||||
|     IteratorbasedCRC32<DeallocatingVector<EdgeBasedGraphFactory::EdgeBasedNode> > crc32; | ||||
|     unsigned crc32OfNodeBasedEdgeList = crc32(nodeBasedEdgeList.begin(), nodeBasedEdgeList.end() ); | ||||
|     nodeBasedEdgeList.clear(); | ||||
|     INFO("CRC32 based checksum is " << crc32OfNodeBasedEdgeList); | ||||
| 
 | ||||
|     /***
 | ||||
|      * Contracting the edge-expanded graph | ||||
|      */ | ||||
| 
 | ||||
|     INFO("initializing contractor"); | ||||
|     Contractor* contractor = new Contractor( edgeBasedNodeNumber, edgeBasedEdgeList ); | ||||
|     double contractionStartedTimestamp(get_timestamp()); | ||||
|     contractor->Run(); | ||||
|     INFO("Contraction took " << get_timestamp() - contractionStartedTimestamp << " sec"); | ||||
| 
 | ||||
|     DeallocatingVector< QueryEdge > contractedEdgeList; | ||||
|     contractor->GetEdges( contractedEdgeList ); | ||||
|     delete contractor; | ||||
| 
 | ||||
|     /***
 | ||||
|      * Sorting contracted edges in a way that the static query graph can read some in in-place. | ||||
|      */ | ||||
| 
 | ||||
|     INFO("Building Node Array"); | ||||
|     std::sort(contractedEdgeList.begin(), contractedEdgeList.end()); | ||||
|     unsigned numberOfNodes = 0; | ||||
|     unsigned numberOfEdges = contractedEdgeList.size(); | ||||
|     INFO("Serializing compacted graph"); | ||||
|     std::ofstream edgeOutFile(graphOut.c_str(), std::ios::binary); | ||||
| 
 | ||||
|     BOOST_FOREACH(const QueryEdge & edge, contractedEdgeList) { | ||||
|         if(edge.source > numberOfNodes) { | ||||
|             numberOfNodes = edge.source; | ||||
|     try { | ||||
|         if(argc < 3) { | ||||
|             ERR("usage: " << std::endl << argv[0] << " <osrm-data> <osrm-restrictions> [<profile>]"); | ||||
|         } | ||||
|         if(edge.target > numberOfNodes) { | ||||
|             numberOfNodes = edge.target; | ||||
| 
 | ||||
|         double startupTime = get_timestamp(); | ||||
|         unsigned numberOfThreads = omp_get_num_procs(); | ||||
|         if(testDataFile("contractor.ini")) { | ||||
|             ContractorConfiguration contractorConfig("contractor.ini"); | ||||
|             unsigned rawNumber = stringToInt(contractorConfig.GetParameter("Threads")); | ||||
|             if(rawNumber != 0 && rawNumber <= numberOfThreads) | ||||
|                 numberOfThreads = rawNumber; | ||||
|         } | ||||
|     } | ||||
|     numberOfNodes+=1; | ||||
|         omp_set_num_threads(numberOfThreads); | ||||
| 
 | ||||
|     std::vector< StaticGraph<EdgeData>::_StrNode > _nodes; | ||||
|     _nodes.resize( numberOfNodes + 1 ); | ||||
|         INFO("Using restrictions from file: " << argv[2]); | ||||
|         std::ifstream restrictionsInstream(argv[2], std::ios::binary); | ||||
|         if(!restrictionsInstream.good()) { | ||||
|             ERR("Could not access <osrm-restrictions> files"); | ||||
|         } | ||||
|         _Restriction restriction; | ||||
|         unsigned usableRestrictionsCounter(0); | ||||
|         restrictionsInstream.read((char*)&usableRestrictionsCounter, sizeof(unsigned)); | ||||
|         inputRestrictions.resize(usableRestrictionsCounter); | ||||
|         restrictionsInstream.read((char *)&(inputRestrictions[0]), usableRestrictionsCounter*sizeof(_Restriction)); | ||||
|         restrictionsInstream.close(); | ||||
| 
 | ||||
|     StaticGraph<EdgeData>::EdgeIterator edge = 0; | ||||
|     StaticGraph<EdgeData>::EdgeIterator position = 0; | ||||
|     for ( StaticGraph<EdgeData>::NodeIterator node = 0; node <= numberOfNodes; ++node ) { | ||||
|         StaticGraph<EdgeData>::EdgeIterator lastEdge = edge; | ||||
|         while ( edge < numberOfEdges && contractedEdgeList[edge].source == node ) | ||||
|             ++edge; | ||||
|         _nodes[node].firstEdge = position; //=edge
 | ||||
|         position += edge - lastEdge; //remove
 | ||||
|     } | ||||
|     ++numberOfNodes; | ||||
|     //Serialize numberOfNodes, nodes
 | ||||
|     edgeOutFile.write((char*) &crc32OfNodeBasedEdgeList, sizeof(unsigned)); | ||||
|     edgeOutFile.write((char*) &numberOfNodes, sizeof(unsigned)); | ||||
|     edgeOutFile.write((char*) &_nodes[0], sizeof(StaticGraph<EdgeData>::_StrNode)*(numberOfNodes)); | ||||
|     //Serialize number of Edges
 | ||||
|     edgeOutFile.write((char*) &position, sizeof(unsigned)); | ||||
|     --numberOfNodes; | ||||
|     edge = 0; | ||||
|     int usedEdgeCounter = 0; | ||||
|     StaticGraph<EdgeData>::_StrEdge currentEdge; | ||||
|     for ( StaticGraph<EdgeData>::NodeIterator node = 0; node < numberOfNodes; ++node ) { | ||||
|         for ( StaticGraph<EdgeData>::EdgeIterator i = _nodes[node].firstEdge, e = _nodes[node+1].firstEdge; i != e; ++i ) { | ||||
|             assert(node != contractedEdgeList[edge].target); | ||||
|             currentEdge.target = contractedEdgeList[edge].target; | ||||
|             currentEdge.data = contractedEdgeList[edge].data; | ||||
|             if(currentEdge.data.distance <= 0) { | ||||
|                 INFO("Edge: " << i << ",source: " << contractedEdgeList[edge].source << ", target: " << contractedEdgeList[edge].target << ", dist: " << currentEdge.data.distance); | ||||
|                 ERR("Failed at edges of node " << node << " of " << numberOfNodes); | ||||
|         std::ifstream in; | ||||
|         in.open (argv[1], std::ifstream::in | std::ifstream::binary); | ||||
|         if (!in.is_open()) { | ||||
|             ERR("Cannot open " << argv[1]); | ||||
|         } | ||||
| 
 | ||||
|         std::string nodeOut(argv[1]);		nodeOut += ".nodes"; | ||||
|         std::string edgeOut(argv[1]);		edgeOut += ".edges"; | ||||
|         std::string graphOut(argv[1]);		graphOut += ".hsgr"; | ||||
|         std::string ramIndexOut(argv[1]);	ramIndexOut += ".ramIndex"; | ||||
|         std::string fileIndexOut(argv[1]);	fileIndexOut += ".fileIndex"; | ||||
| 
 | ||||
|         /*** Setup Scripting Environment ***/ | ||||
|         if(!testDataFile( (argc > 3 ? argv[3] : "profile.lua") )) { | ||||
|             ERR("Need profile.lua to apply traffic signal penalty"); | ||||
|         } | ||||
| 
 | ||||
|         // Create a new lua state
 | ||||
|         lua_State *myLuaState = luaL_newstate(); | ||||
| 
 | ||||
|         // Connect LuaBind to this lua state
 | ||||
|         luabind::open(myLuaState); | ||||
| 
 | ||||
|         //open utility libraries string library;
 | ||||
|         luaL_openlibs(myLuaState); | ||||
| 
 | ||||
|         //adjust lua load path
 | ||||
|         luaAddScriptFolderToLoadPath( myLuaState, (argc > 3 ? argv[3] : "profile.lua") ); | ||||
| 
 | ||||
|         // Now call our function in a lua script
 | ||||
|         INFO("Parsing speedprofile from " << (argc > 3 ? argv[3] : "profile.lua") ); | ||||
|         if(0 != luaL_dofile(myLuaState, (argc > 3 ? argv[3] : "profile.lua") )) { | ||||
|             ERR(lua_tostring(myLuaState,-1)<< " occured in scripting block"); | ||||
|         } | ||||
| 
 | ||||
|         EdgeBasedGraphFactory::SpeedProfileProperties speedProfile; | ||||
| 
 | ||||
|         if(0 != luaL_dostring( myLuaState, "return traffic_signal_penalty\n")) { | ||||
|             ERR(lua_tostring(myLuaState,-1)<< " occured in scripting block"); | ||||
|         } | ||||
|         speedProfile.trafficSignalPenalty = 10*lua_tointeger(myLuaState, -1); | ||||
| 
 | ||||
|         if(0 != luaL_dostring( myLuaState, "return u_turn_penalty\n")) { | ||||
|             ERR(lua_tostring(myLuaState,-1)<< " occured in scripting block"); | ||||
|         } | ||||
|         speedProfile.uTurnPenalty = 10*lua_tointeger(myLuaState, -1); | ||||
| 
 | ||||
|         speedProfile.has_turn_penalty_function = lua_function_exists( myLuaState, "turn_function" ); | ||||
| 
 | ||||
|         std::vector<ImportEdge> edgeList; | ||||
|         NodeID nodeBasedNodeNumber = readBinaryOSRMGraphFromStream(in, edgeList, bollardNodes, trafficLightNodes, &internalToExternalNodeMapping, inputRestrictions); | ||||
|         in.close(); | ||||
|         INFO(inputRestrictions.size() << " restrictions, " << bollardNodes.size() << " bollard nodes, " << trafficLightNodes.size() << " traffic lights"); | ||||
|         if(0 == edgeList.size()) | ||||
|             ERR("The input data is broken. It is impossible to do any turns in this graph"); | ||||
| 
 | ||||
| 
 | ||||
|         /***
 | ||||
|          * 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); | ||||
|         std::vector<ImportEdge>().swap(edgeList); | ||||
|         edgeBasedGraphFactory->Run(edgeOut.c_str(), myLuaState); | ||||
|         std::vector<_Restriction>().swap(inputRestrictions); | ||||
|         std::vector<NodeID>().swap(bollardNodes); | ||||
|         std::vector<NodeID>().swap(trafficLightNodes); | ||||
|         NodeID edgeBasedNodeNumber = edgeBasedGraphFactory->GetNumberOfNodes(); | ||||
|         DeallocatingVector<EdgeBasedEdge> edgeBasedEdgeList; | ||||
|         edgeBasedGraphFactory->GetEdgeBasedEdges(edgeBasedEdgeList); | ||||
|         DeallocatingVector<EdgeBasedGraphFactory::EdgeBasedNode> nodeBasedEdgeList; | ||||
|         edgeBasedGraphFactory->GetEdgeBasedNodes(nodeBasedEdgeList); | ||||
|         delete edgeBasedGraphFactory; | ||||
| 
 | ||||
|         /***
 | ||||
|          * Writing info on original (node-based) nodes | ||||
|          */ | ||||
| 
 | ||||
|         INFO("writing node map ..."); | ||||
|         std::ofstream mapOutFile(nodeOut.c_str(), std::ios::binary); | ||||
|         mapOutFile.write((char *)&(internalToExternalNodeMapping[0]), internalToExternalNodeMapping.size()*sizeof(NodeInfo)); | ||||
|         mapOutFile.close(); | ||||
|         std::vector<NodeInfo>().swap(internalToExternalNodeMapping); | ||||
| 
 | ||||
|         double expansionHasFinishedTime = get_timestamp() - startupTime; | ||||
| 
 | ||||
|         /***
 | ||||
|          * Building grid-like nearest-neighbor data structure | ||||
|          */ | ||||
| 
 | ||||
|         INFO("building grid ..."); | ||||
|         WritableGrid * writeableGrid = new WritableGrid(); | ||||
|         writeableGrid->ConstructGrid(nodeBasedEdgeList, ramIndexOut.c_str(), fileIndexOut.c_str()); | ||||
|         delete writeableGrid; | ||||
|         IteratorbasedCRC32<DeallocatingVector<EdgeBasedGraphFactory::EdgeBasedNode> > crc32; | ||||
|         unsigned crc32OfNodeBasedEdgeList = crc32(nodeBasedEdgeList.begin(), nodeBasedEdgeList.end() ); | ||||
|         nodeBasedEdgeList.clear(); | ||||
|         INFO("CRC32 based checksum is " << crc32OfNodeBasedEdgeList); | ||||
| 
 | ||||
|         /***
 | ||||
|          * Contracting the edge-expanded graph | ||||
|          */ | ||||
| 
 | ||||
|         INFO("initializing contractor"); | ||||
|         Contractor* contractor = new Contractor( edgeBasedNodeNumber, edgeBasedEdgeList ); | ||||
|         double contractionStartedTimestamp(get_timestamp()); | ||||
|         contractor->Run(); | ||||
|         INFO("Contraction took " << get_timestamp() - contractionStartedTimestamp << " sec"); | ||||
| 
 | ||||
|         DeallocatingVector< QueryEdge > contractedEdgeList; | ||||
|         contractor->GetEdges( contractedEdgeList ); | ||||
|         delete contractor; | ||||
| 
 | ||||
|         /***
 | ||||
|          * Sorting contracted edges in a way that the static query graph can read some in in-place. | ||||
|          */ | ||||
| 
 | ||||
|         INFO("Building Node Array"); | ||||
|         std::sort(contractedEdgeList.begin(), contractedEdgeList.end()); | ||||
|         unsigned numberOfNodes = 0; | ||||
|         unsigned numberOfEdges = contractedEdgeList.size(); | ||||
|         INFO("Serializing compacted graph"); | ||||
|         std::ofstream edgeOutFile(graphOut.c_str(), std::ios::binary); | ||||
| 
 | ||||
|         BOOST_FOREACH(const QueryEdge & edge, contractedEdgeList) { | ||||
|             if(edge.source > numberOfNodes) { | ||||
|                 numberOfNodes = edge.source; | ||||
|             } | ||||
|             if(edge.target > numberOfNodes) { | ||||
|                 numberOfNodes = edge.target; | ||||
|             } | ||||
|             //Serialize edges
 | ||||
|             edgeOutFile.write((char*) ¤tEdge, sizeof(StaticGraph<EdgeData>::_StrEdge)); | ||||
|             ++edge; | ||||
|             ++usedEdgeCounter; | ||||
|         } | ||||
|     } | ||||
|     double endTime = (get_timestamp() - startupTime); | ||||
|     INFO("Expansion  : " << (nodeBasedNodeNumber/expansionHasFinishedTime) << " nodes/sec and "<< (edgeBasedNodeNumber/expansionHasFinishedTime) << " edges/sec"); | ||||
|     INFO("Contraction: " << (edgeBasedNodeNumber/expansionHasFinishedTime) << " nodes/sec and "<< usedEdgeCounter/endTime << " edges/sec"); | ||||
|         numberOfNodes+=1; | ||||
| 
 | ||||
|     edgeOutFile.close(); | ||||
|     //cleanedEdgeList.clear();
 | ||||
|     _nodes.clear(); | ||||
|     INFO("finished preprocessing"); | ||||
|         std::vector< StaticGraph<EdgeData>::_StrNode > _nodes; | ||||
|         _nodes.resize( numberOfNodes + 1 ); | ||||
| 
 | ||||
|         StaticGraph<EdgeData>::EdgeIterator edge = 0; | ||||
|         StaticGraph<EdgeData>::EdgeIterator position = 0; | ||||
|         for ( StaticGraph<EdgeData>::NodeIterator node = 0; node <= numberOfNodes; ++node ) { | ||||
|             StaticGraph<EdgeData>::EdgeIterator lastEdge = edge; | ||||
|             while ( edge < numberOfEdges && contractedEdgeList[edge].source == node ) | ||||
|                 ++edge; | ||||
|             _nodes[node].firstEdge = position; //=edge
 | ||||
|             position += edge - lastEdge; //remove
 | ||||
|         } | ||||
|         ++numberOfNodes; | ||||
|         //Serialize numberOfNodes, nodes
 | ||||
|         edgeOutFile.write((char*) &crc32OfNodeBasedEdgeList, sizeof(unsigned)); | ||||
|         edgeOutFile.write((char*) &numberOfNodes, sizeof(unsigned)); | ||||
|         edgeOutFile.write((char*) &_nodes[0], sizeof(StaticGraph<EdgeData>::_StrNode)*(numberOfNodes)); | ||||
|         //Serialize number of Edges
 | ||||
|         edgeOutFile.write((char*) &position, sizeof(unsigned)); | ||||
|         --numberOfNodes; | ||||
|         edge = 0; | ||||
|         int usedEdgeCounter = 0; | ||||
|         StaticGraph<EdgeData>::_StrEdge currentEdge; | ||||
|         for ( StaticGraph<EdgeData>::NodeIterator node = 0; node < numberOfNodes; ++node ) { | ||||
|             for ( StaticGraph<EdgeData>::EdgeIterator i = _nodes[node].firstEdge, e = _nodes[node+1].firstEdge; i != e; ++i ) { | ||||
|                 assert(node != contractedEdgeList[edge].target); | ||||
|                 currentEdge.target = contractedEdgeList[edge].target; | ||||
|                 currentEdge.data = contractedEdgeList[edge].data; | ||||
|                 if(currentEdge.data.distance <= 0) { | ||||
|                     INFO("Edge: " << i << ",source: " << contractedEdgeList[edge].source << ", target: " << contractedEdgeList[edge].target << ", dist: " << currentEdge.data.distance); | ||||
|                     ERR("Failed at edges of node " << node << " of " << numberOfNodes); | ||||
|                 } | ||||
|                 //Serialize edges
 | ||||
|                 edgeOutFile.write((char*) ¤tEdge, sizeof(StaticGraph<EdgeData>::_StrEdge)); | ||||
|                 ++edge; | ||||
|                 ++usedEdgeCounter; | ||||
|             } | ||||
|         } | ||||
|         double endTime = (get_timestamp() - startupTime); | ||||
|         INFO("Expansion  : " << (nodeBasedNodeNumber/expansionHasFinishedTime) << " nodes/sec and "<< (edgeBasedNodeNumber/expansionHasFinishedTime) << " edges/sec"); | ||||
|         INFO("Contraction: " << (edgeBasedNodeNumber/expansionHasFinishedTime) << " nodes/sec and "<< usedEdgeCounter/endTime << " edges/sec"); | ||||
| 
 | ||||
|         edgeOutFile.close(); | ||||
|         //cleanedEdgeList.clear();
 | ||||
|         _nodes.clear(); | ||||
|         INFO("finished preprocessing"); | ||||
|     } catch (std::exception &e) { | ||||
|         ERR("Exception occured: " << e.what()); | ||||
|     } | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user