create sentinel to adjancency array during preprocessing
This commit is contained in:
		
							parent
							
								
									999f50dce9
								
							
						
					
					
						commit
						5a04700bae
					
				| @ -95,7 +95,7 @@ public: | |||||||
|         typename ShM<_StrNode, UseSharedMemory>::vector & nodes, |         typename ShM<_StrNode, UseSharedMemory>::vector & nodes, | ||||||
|         typename ShM<_StrEdge, UseSharedMemory>::vector & edges |         typename ShM<_StrEdge, UseSharedMemory>::vector & edges | ||||||
|     ) { |     ) { | ||||||
|         _numNodes = nodes.size(); |         _numNodes = nodes.size()-1; | ||||||
|         _numEdges = edges.size(); |         _numEdges = edges.size(); | ||||||
| 
 | 
 | ||||||
|         _nodes.swap(nodes); |         _nodes.swap(nodes); | ||||||
| @ -104,8 +104,10 @@ public: | |||||||
| #ifndef NDEBUG | #ifndef NDEBUG | ||||||
|         Percent p(GetNumberOfNodes()); |         Percent p(GetNumberOfNodes()); | ||||||
|         for(unsigned u = 0; u < GetNumberOfNodes(); ++u) { |         for(unsigned u = 0; u < GetNumberOfNodes(); ++u) { | ||||||
|  |             SimpleLogger().Write() << "[" << u << "], 1st: " << BeginEdges(u) << ", last: " << EndEdges(u); | ||||||
|             for(unsigned eid = BeginEdges(u); eid < EndEdges(u); ++eid) { |             for(unsigned eid = BeginEdges(u); eid < EndEdges(u); ++eid) { | ||||||
|                 unsigned v = GetTarget(eid); |                 unsigned v = GetTarget(eid); | ||||||
|  |                 SimpleLogger().Write() << "Edge (" << u << "," << v << ")"; | ||||||
|                 EdgeData & data = GetEdgeData(eid); |                 EdgeData & data = GetEdgeData(eid); | ||||||
|                 if(data.shortcut) { |                 if(data.shortcut) { | ||||||
|                     unsigned eid2 = FindEdgeInEitherDirection(u, data.id); |                     unsigned eid2 = FindEdgeInEitherDirection(u, data.id); | ||||||
|  | |||||||
| @ -82,7 +82,9 @@ private: | |||||||
| 
 | 
 | ||||||
|     void LoadGraph(const boost::filesystem::path & hsgr_path) { |     void LoadGraph(const boost::filesystem::path & hsgr_path) { | ||||||
|         typename ShM<typename QueryGraph::_StrNode, false>::vector node_list; |         typename ShM<typename QueryGraph::_StrNode, false>::vector node_list; | ||||||
|         typename ShM< typename QueryGraph::_StrEdge, false>::vector edge_list; |         typename ShM<typename QueryGraph::_StrEdge, false>::vector edge_list; | ||||||
|  | 
 | ||||||
|  |         SimpleLogger().Write() << "loading graph from " << hsgr_path.string(); | ||||||
| 
 | 
 | ||||||
|         m_number_of_nodes = readHSGRFromStream( |         m_number_of_nodes = readHSGRFromStream( | ||||||
|             hsgr_path, |             hsgr_path, | ||||||
| @ -90,9 +92,10 @@ private: | |||||||
|             edge_list, |             edge_list, | ||||||
|             &m_check_sum |             &m_check_sum | ||||||
|         ); |         ); | ||||||
|  | 
 | ||||||
|         BOOST_ASSERT_MSG(0 != node_list.size(), "node list empty"); |         BOOST_ASSERT_MSG(0 != node_list.size(), "node list empty"); | ||||||
|         BOOST_ASSERT_MSG(0 != edge_list.size(), "edge list empty"); |         BOOST_ASSERT_MSG(0 != edge_list.size(), "edge list empty"); | ||||||
| 
 |         SimpleLogger().Write() << "loaded " << node_list.size() << " nodes and " << edge_list.size() << " edges"; | ||||||
|         m_query_graph = new QueryGraph(node_list, edge_list); |         m_query_graph = new QueryGraph(node_list, edge_list); | ||||||
| 
 | 
 | ||||||
|         BOOST_ASSERT_MSG(0 == node_list.size(), "node list not flushed"); |         BOOST_ASSERT_MSG(0 == node_list.size(), "node list not flushed"); | ||||||
| @ -248,9 +251,13 @@ public: | |||||||
|         //load data
 |         //load data
 | ||||||
|         SimpleLogger().Write() << "loading graph data"; |         SimpleLogger().Write() << "loading graph data"; | ||||||
|         LoadGraph(hsgr_path); |         LoadGraph(hsgr_path); | ||||||
|  |         SimpleLogger().Write() << "loading egde information"; | ||||||
|         LoadNodeAndEdgeInformation(node_data_path, edge_data_path); |         LoadNodeAndEdgeInformation(node_data_path, edge_data_path); | ||||||
|  |         SimpleLogger().Write() << "loading r-tree"; | ||||||
|         LoadRTree(ram_index_path, file_index_path); |         LoadRTree(ram_index_path, file_index_path); | ||||||
|         LoadTimestamp(hsgr_path); |         SimpleLogger().Write() << "loading timestamp"; | ||||||
|  |         LoadTimestamp(timestamp_path); | ||||||
|  |         SimpleLogger().Write() << "loading street names"; | ||||||
|         LoadStreetNames(name_data_path); |         LoadStreetNames(name_data_path); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | |||||||
							
								
								
									
										15
									
								
								prepare.cpp
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								prepare.cpp
									
									
									
									
									
								
							| @ -332,6 +332,7 @@ int main (int argc, char *argv[]) { | |||||||
|         std::ofstream hsgr_output_stream(graphOut.c_str(), std::ios::binary); |         std::ofstream hsgr_output_stream(graphOut.c_str(), std::ios::binary); | ||||||
|         hsgr_output_stream.write((char*)&uuid_orig, sizeof(UUID) ); |         hsgr_output_stream.write((char*)&uuid_orig, sizeof(UUID) ); | ||||||
|         BOOST_FOREACH(const QueryEdge & edge, contractedEdgeList) { |         BOOST_FOREACH(const QueryEdge & edge, contractedEdgeList) { | ||||||
|  |             SimpleLogger().Write() << "edge (" << edge.source << "," << edge.target << ")"; | ||||||
|             if(edge.source > numberOfNodes) { |             if(edge.source > numberOfNodes) { | ||||||
|                 numberOfNodes = edge.source; |                 numberOfNodes = edge.source; | ||||||
|             } |             } | ||||||
| @ -346,14 +347,26 @@ int main (int argc, char *argv[]) { | |||||||
| 
 | 
 | ||||||
|         StaticGraph<EdgeData>::EdgeIterator edge = 0; |         StaticGraph<EdgeData>::EdgeIterator edge = 0; | ||||||
|         StaticGraph<EdgeData>::EdgeIterator position = 0; |         StaticGraph<EdgeData>::EdgeIterator position = 0; | ||||||
|         for ( StaticGraph<EdgeData>::NodeIterator node = 0; node <= numberOfNodes; ++node ) { |         for ( StaticGraph<EdgeData>::NodeIterator node = 0; node < numberOfNodes; ++node ) { | ||||||
|             StaticGraph<EdgeData>::EdgeIterator lastEdge = edge; |             StaticGraph<EdgeData>::EdgeIterator lastEdge = edge; | ||||||
|             while ( edge < numberOfEdges && contractedEdgeList[edge].source == node ) |             while ( edge < numberOfEdges && contractedEdgeList[edge].source == node ) | ||||||
|                 ++edge; |                 ++edge; | ||||||
|             _nodes[node].firstEdge = position; //=edge
 |             _nodes[node].firstEdge = position; //=edge
 | ||||||
|             position += edge - lastEdge; //remove
 |             position += edge - lastEdge; //remove
 | ||||||
|  |             SimpleLogger().Write() << "_nodes[" << node << "].firstEdge = " << _nodes[node].firstEdge; | ||||||
|         } |         } | ||||||
|  |         _nodes[_nodes.size()-1].firstEdge = _nodes[_nodes.size()-2].firstEdge; | ||||||
|  |         SimpleLogger().Write() << "position: " << position; | ||||||
|         ++numberOfNodes; |         ++numberOfNodes; | ||||||
|  | 
 | ||||||
|  |         SimpleLogger().Write() << "no. of nodes: " << numberOfNodes << ", edges: " << edge; | ||||||
|  |         SimpleLogger().Write() << "_nodes.size(): " << _nodes.size(); | ||||||
|  |         for(unsigned i = 0; i < _nodes.size(); ++i) { | ||||||
|  |             SimpleLogger().Write() << _nodes[i].firstEdge; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         BOOST_ASSERT_MSG(_nodes.size() == numberOfNodes, "no. of nodes dont match"); | ||||||
|  | 
 | ||||||
|         //Serialize numberOfNodes, nodes
 |         //Serialize numberOfNodes, nodes
 | ||||||
|         hsgr_output_stream.write((char*) &crc32OfNodeBasedEdgeList, sizeof(unsigned)); |         hsgr_output_stream.write((char*) &crc32OfNodeBasedEdgeList, sizeof(unsigned)); | ||||||
|         hsgr_output_stream.write((char*) &numberOfNodes, sizeof(unsigned)); |         hsgr_output_stream.write((char*) &numberOfNodes, sizeof(unsigned)); | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user