Split EBGF::Run into smaller sub-functions
I'm not too happy with this yet. It is not really clear cut. Also, I would like to move the logging in ::Run, seems messy in the sub-functions.
This commit is contained in:
		
							parent
							
								
									5a13c6cc3f
								
							
						
					
					
						commit
						3ef054bbac
					
				| @ -279,6 +279,21 @@ void EdgeBasedGraphFactory::Run( | |||||||
|     const std::string & geometry_filename, |     const std::string & geometry_filename, | ||||||
|     lua_State *lua_state |     lua_State *lua_state | ||||||
| ) { | ) { | ||||||
|  | 
 | ||||||
|  |     CompressGeometry(); | ||||||
|  | 
 | ||||||
|  |     RenumberEdges(); | ||||||
|  | 
 | ||||||
|  |     GenerateEdgeExpandedNodes(); | ||||||
|  | 
 | ||||||
|  |     GenerateEdgeExpandedEdges(original_edge_data_filename, lua_state); | ||||||
|  | 
 | ||||||
|  |     m_geometry_compressor.SerializeInternalVector( geometry_filename ); | ||||||
|  | 
 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void EdgeBasedGraphFactory::CompressGeometry() | ||||||
|  | { | ||||||
|     SimpleLogger().Write() << "Removing graph geometry while preserving topology"; |     SimpleLogger().Write() << "Removing graph geometry while preserving topology"; | ||||||
| 
 | 
 | ||||||
|     const unsigned original_number_of_nodes = m_node_based_graph->GetNumberOfNodes(); |     const unsigned original_number_of_nodes = m_node_based_graph->GetNumberOfNodes(); | ||||||
| @ -417,7 +432,13 @@ void EdgeBasedGraphFactory::Run( | |||||||
|     SimpleLogger().Write() << "new nodes: " << new_node_count << ", edges " << new_edge_count; |     SimpleLogger().Write() << "new nodes: " << new_node_count << ", edges " << new_edge_count; | ||||||
|     SimpleLogger().Write() << "Node compression ratio: " << new_node_count/(double)original_number_of_nodes; |     SimpleLogger().Write() << "Node compression ratio: " << new_node_count/(double)original_number_of_nodes; | ||||||
|     SimpleLogger().Write() << "Edge compression ratio: " << new_edge_count/(double)original_number_of_edges; |     SimpleLogger().Write() << "Edge compression ratio: " << new_edge_count/(double)original_number_of_edges; | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
|  | /**
 | ||||||
|  |  * Writes the id of the edge in the edge expanded graph (into the egde in the node based graph) | ||||||
|  |  */ | ||||||
|  | void EdgeBasedGraphFactory::RenumberEdges() | ||||||
|  | { | ||||||
|     // renumber edge based node IDs
 |     // renumber edge based node IDs
 | ||||||
|     unsigned numbered_edges_count = 0; |     unsigned numbered_edges_count = 0; | ||||||
|     for(NodeID current_node = 0; current_node < m_node_based_graph->GetNumberOfNodes(); ++current_node) { |     for(NodeID current_node = 0; current_node < m_node_based_graph->GetNumberOfNodes(); ++current_node) { | ||||||
| @ -435,37 +456,30 @@ void EdgeBasedGraphFactory::Run( | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     unsigned node_based_edge_counter = 0; |     m_number_of_edge_based_nodes = numbered_edges_count; | ||||||
|     unsigned original_edges_counter  = 0; | } | ||||||
| 
 |  | ||||||
|     std::ofstream edge_data_file( |  | ||||||
|         original_edge_data_filename.c_str(), |  | ||||||
|         std::ios::binary |  | ||||||
|     ); |  | ||||||
| 
 |  | ||||||
|     //writes a dummy value that is updated later
 |  | ||||||
|     edge_data_file.write( |  | ||||||
|         (char*)&original_edges_counter, |  | ||||||
|         sizeof(unsigned) |  | ||||||
|     ); |  | ||||||
| 
 | 
 | ||||||
|  | /**
 | ||||||
|  |  * Creates the nodes in the edge expanded graph from edges in the node-based graph. | ||||||
|  |  */ | ||||||
|  | void EdgeBasedGraphFactory::GenerateEdgeExpandedNodes() | ||||||
|  | { | ||||||
|     SimpleLogger().Write() << "Identifying components of the road network"; |     SimpleLogger().Write() << "Identifying components of the road network"; | ||||||
| 
 | 
 | ||||||
|     //Run a BFS on the undirected graph and identify small components
 |     //Run a BFS on the undirected graph and identify small components
 | ||||||
|     //TODO move this to a sub function, so we can just use scoping
 |     BFSComponentExplorer<NodeBasedDynamicGraph> component_explorer( | ||||||
|     auto component_explorer = new BFSComponentExplorer<NodeBasedDynamicGraph>( |  | ||||||
|         *m_node_based_graph, |         *m_node_based_graph, | ||||||
|         *m_restriction_map, |         *m_restriction_map, | ||||||
|         m_barrier_nodes |         m_barrier_nodes | ||||||
|     ); |     ); | ||||||
| 
 | 
 | ||||||
|     component_explorer->run(); |     component_explorer.run(); | ||||||
| 
 | 
 | ||||||
|     SimpleLogger().Write() << |     SimpleLogger().Write() << | ||||||
|         "identified: " << component_explorer->getNumberOfComponents() << " many components"; |         "identified: " << component_explorer.getNumberOfComponents() << " many components"; | ||||||
|     SimpleLogger().Write() << "generating edge-expanded nodes"; |     SimpleLogger().Write() << "generating edge-expanded nodes"; | ||||||
| 
 | 
 | ||||||
|     p.reinit(m_node_based_graph->GetNumberOfNodes()); |     Percent p(m_node_based_graph->GetNumberOfNodes()); | ||||||
| 
 | 
 | ||||||
|     //loop over all edges and generate new set of nodes
 |     //loop over all edges and generate new set of nodes
 | ||||||
|     for( |     for( | ||||||
| @ -501,8 +515,8 @@ void EdgeBasedGraphFactory::Run( | |||||||
|             //Note: edges that end on barrier nodes or on a turn restriction
 |             //Note: edges that end on barrier nodes or on a turn restriction
 | ||||||
|             //may actually be in two distinct components. We choose the smallest
 |             //may actually be in two distinct components. We choose the smallest
 | ||||||
|             const unsigned size_of_component = std::min( |             const unsigned size_of_component = std::min( | ||||||
|                 component_explorer->getComponentSize(u), |                 component_explorer.getComponentSize(u), | ||||||
|                 component_explorer->getComponentSize(v) |                 component_explorer.getComponentSize(v) | ||||||
|             ); |             ); | ||||||
| 
 | 
 | ||||||
|             const bool component_is_tiny = ( size_of_component < 1000 ); |             const bool component_is_tiny = ( size_of_component < 1000 ); | ||||||
| @ -510,15 +524,32 @@ void EdgeBasedGraphFactory::Run( | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     delete component_explorer; |  | ||||||
| 
 |  | ||||||
|     m_number_of_edge_based_nodes = numbered_edges_count; |  | ||||||
| 
 |  | ||||||
|     SimpleLogger().Write() << "Generated " << m_edge_based_node_list.size() << |     SimpleLogger().Write() << "Generated " << m_edge_based_node_list.size() << | ||||||
|                               " nodes in edge-expanded graph"; |                               " nodes in edge-expanded graph"; | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
|  | /**
 | ||||||
|  |  * Actually it also generates OriginalEdgeData and serializes them... | ||||||
|  |  */ | ||||||
|  | void EdgeBasedGraphFactory::GenerateEdgeExpandedEdges(const std::string& original_edge_data_filename, lua_State* lua_state) | ||||||
|  | { | ||||||
|     SimpleLogger().Write() << "generating edge-expanded edges"; |     SimpleLogger().Write() << "generating edge-expanded edges"; | ||||||
| 
 | 
 | ||||||
|  |     unsigned node_based_edge_counter = 0; | ||||||
|  |     unsigned original_edges_counter  = 0; | ||||||
|  | 
 | ||||||
|  |     std::ofstream edge_data_file( | ||||||
|  |         original_edge_data_filename.c_str(), | ||||||
|  |         std::ios::binary | ||||||
|  |     ); | ||||||
|  | 
 | ||||||
|  |     //writes a dummy value that is updated later
 | ||||||
|  |     edge_data_file.write( | ||||||
|  |         (char*)&original_edges_counter, | ||||||
|  |         sizeof(unsigned) | ||||||
|  |     ); | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|     std::vector<OriginalEdgeData> original_edge_data_vector; |     std::vector<OriginalEdgeData> original_edge_data_vector; | ||||||
|     original_edge_data_vector.reserve(1024*1024); |     original_edge_data_vector.reserve(1024*1024); | ||||||
| 
 | 
 | ||||||
| @ -529,7 +560,9 @@ void EdgeBasedGraphFactory::Run( | |||||||
|     unsigned skipped_uturns_counter = 0; |     unsigned skipped_uturns_counter = 0; | ||||||
|     unsigned skipped_barrier_turns_counter = 0; |     unsigned skipped_barrier_turns_counter = 0; | ||||||
|     unsigned compressed = 0; |     unsigned compressed = 0; | ||||||
|     p.reinit(m_node_based_graph->GetNumberOfNodes()); | 
 | ||||||
|  |     Percent p(m_node_based_graph->GetNumberOfNodes()); | ||||||
|  | 
 | ||||||
|     for (NodeIterator u = 0, end = m_node_based_graph->GetNumberOfNodes(); u < end; ++u) |     for (NodeIterator u = 0, end = m_node_based_graph->GetNumberOfNodes(); u < end; ++u) | ||||||
|     { |     { | ||||||
|         for (EdgeIterator e1 = m_node_based_graph->BeginEdges(u), last_edge_u = m_node_based_graph->EndEdges(u); e1 < last_edge_u; ++e1) |         for (EdgeIterator e1 = m_node_based_graph->BeginEdges(u), last_edge_u = m_node_based_graph->EndEdges(u); e1 < last_edge_u; ++e1) | ||||||
| @ -635,7 +668,7 @@ void EdgeBasedGraphFactory::Run( | |||||||
|                 BOOST_ASSERT( SPECIAL_NODEID != edge_data1.edgeBasedNodeID ); |                 BOOST_ASSERT( SPECIAL_NODEID != edge_data1.edgeBasedNodeID ); | ||||||
|                 BOOST_ASSERT( SPECIAL_NODEID != edge_data2.edgeBasedNodeID ); |                 BOOST_ASSERT( SPECIAL_NODEID != edge_data2.edgeBasedNodeID ); | ||||||
| 
 | 
 | ||||||
|                 m_edge_based_edge_list.push_back( |                 m_edge_based_edge_list.emplace_back( | ||||||
|                     EdgeBasedEdge( |                     EdgeBasedEdge( | ||||||
|                         edge_data1.edgeBasedNodeID, |                         edge_data1.edgeBasedNodeID, | ||||||
|                         edge_data2.edgeBasedNodeID, |                         edge_data2.edgeBasedNodeID, | ||||||
| @ -655,8 +688,6 @@ void EdgeBasedGraphFactory::Run( | |||||||
|     edge_data_file.write( (char*)&original_edges_counter, sizeof(unsigned) ); |     edge_data_file.write( (char*)&original_edges_counter, sizeof(unsigned) ); | ||||||
|     edge_data_file.close(); |     edge_data_file.close(); | ||||||
| 
 | 
 | ||||||
|     m_geometry_compressor.SerializeInternalVector( geometry_filename ); |  | ||||||
| 
 |  | ||||||
|     SimpleLogger().Write() << "Generated " << m_edge_based_node_list.size() << " edge based nodes"; |     SimpleLogger().Write() << "Generated " << m_edge_based_node_list.size() << " edge based nodes"; | ||||||
|     SimpleLogger().Write() << "Node-based graph contains " << node_based_edge_counter << " edges"; |     SimpleLogger().Write() << "Node-based graph contains " << node_based_edge_counter << " edges"; | ||||||
|     SimpleLogger().Write() << "Edge-expanded graph ..."; |     SimpleLogger().Write() << "Edge-expanded graph ..."; | ||||||
| @ -667,6 +698,7 @@ void EdgeBasedGraphFactory::Run( | |||||||
|     SimpleLogger().Write() << "  skips "  <<  skipped_barrier_turns_counter << " turns over barriers"; |     SimpleLogger().Write() << "  skips "  <<  skipped_barrier_turns_counter << " turns over barriers"; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
| int EdgeBasedGraphFactory::GetTurnPenalty( | int EdgeBasedGraphFactory::GetTurnPenalty( | ||||||
|     const NodeID u, |     const NodeID u, | ||||||
|     const NodeID v, |     const NodeID v, | ||||||
|  | |||||||
| @ -127,16 +127,13 @@ private: | |||||||
| 
 | 
 | ||||||
|     GeometryCompressor                          m_geometry_compressor; |     GeometryCompressor                          m_geometry_compressor; | ||||||
| 
 | 
 | ||||||
|     NodeID CheckForEmanatingIsOnlyTurn( |     void CompressGeometry(); | ||||||
|         const NodeID u, |     void RenumberEdges(); | ||||||
|         const NodeID v |     void GenerateEdgeExpandedNodes(); | ||||||
|     ) const; |     void GenerateEdgeExpandedEdges( | ||||||
| 
 |         const std::string& original_edge_data_filename, | ||||||
|     bool CheckIfTurnIsRestricted( |         lua_State* lua_state | ||||||
|         const NodeID u, |     ); | ||||||
|         const NodeID v, |  | ||||||
|         const NodeID w |  | ||||||
|     ) const; |  | ||||||
| 
 | 
 | ||||||
|     void InsertEdgeBasedNode( |     void InsertEdgeBasedNode( | ||||||
|         NodeBasedDynamicGraph::NodeIterator u, |         NodeBasedDynamicGraph::NodeIterator u, | ||||||
| @ -150,18 +147,6 @@ private: | |||||||
|         std::vector<OriginalEdgeData> & original_edge_data_vector |         std::vector<OriginalEdgeData> & original_edge_data_vector | ||||||
|     ) const; |     ) const; | ||||||
| 
 | 
 | ||||||
|     void FixupArrivingTurnRestriction( |  | ||||||
|         const NodeID u, |  | ||||||
|         const NodeID v, |  | ||||||
|         const NodeID w |  | ||||||
|     ); |  | ||||||
| 
 |  | ||||||
|     void FixupStartingTurnRestriction( |  | ||||||
|         const NodeID u, |  | ||||||
|         const NodeID v, |  | ||||||
|         const NodeID w |  | ||||||
|     ); |  | ||||||
| 
 |  | ||||||
|     unsigned max_id; |     unsigned max_id; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user