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<_StrEdge, UseSharedMemory>::vector & edges | ||||
|     ) { | ||||
|         _numNodes = nodes.size(); | ||||
|         _numNodes = nodes.size()-1; | ||||
|         _numEdges = edges.size(); | ||||
| 
 | ||||
|         _nodes.swap(nodes); | ||||
| @ -104,8 +104,10 @@ public: | ||||
| #ifndef NDEBUG | ||||
|         Percent p(GetNumberOfNodes()); | ||||
|         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) { | ||||
|                 unsigned v = GetTarget(eid); | ||||
|                 SimpleLogger().Write() << "Edge (" << u << "," << v << ")"; | ||||
|                 EdgeData & data = GetEdgeData(eid); | ||||
|                 if(data.shortcut) { | ||||
|                     unsigned eid2 = FindEdgeInEitherDirection(u, data.id); | ||||
|  | ||||
| @ -84,15 +84,18 @@ private: | ||||
|         typename ShM<typename QueryGraph::_StrNode, false>::vector node_list; | ||||
|         typename ShM<typename QueryGraph::_StrEdge, false>::vector edge_list; | ||||
| 
 | ||||
|         SimpleLogger().Write() << "loading graph from " << hsgr_path.string(); | ||||
| 
 | ||||
|         m_number_of_nodes = readHSGRFromStream( | ||||
|             hsgr_path, | ||||
|             node_list, | ||||
|             edge_list, | ||||
|             &m_check_sum | ||||
|         ); | ||||
| 
 | ||||
|         BOOST_ASSERT_MSG(0 != node_list.size(), "node 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); | ||||
| 
 | ||||
|         BOOST_ASSERT_MSG(0 == node_list.size(), "node list not flushed"); | ||||
| @ -248,9 +251,13 @@ public: | ||||
|         //load data
 | ||||
|         SimpleLogger().Write() << "loading graph data"; | ||||
|         LoadGraph(hsgr_path); | ||||
|         SimpleLogger().Write() << "loading egde information"; | ||||
|         LoadNodeAndEdgeInformation(node_data_path, edge_data_path); | ||||
|         SimpleLogger().Write() << "loading r-tree"; | ||||
|         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); | ||||
|     } | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										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); | ||||
|         hsgr_output_stream.write((char*)&uuid_orig, sizeof(UUID) ); | ||||
|         BOOST_FOREACH(const QueryEdge & edge, contractedEdgeList) { | ||||
|             SimpleLogger().Write() << "edge (" << edge.source << "," << edge.target << ")"; | ||||
|             if(edge.source > numberOfNodes) { | ||||
|                 numberOfNodes = edge.source; | ||||
|             } | ||||
| @ -346,14 +347,26 @@ int main (int argc, char *argv[]) { | ||||
| 
 | ||||
|         StaticGraph<EdgeData>::EdgeIterator edge = 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; | ||||
|             while ( edge < numberOfEdges && contractedEdgeList[edge].source == node ) | ||||
|                 ++edge; | ||||
|             _nodes[node].firstEdge = position; //=edge
 | ||||
|             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; | ||||
| 
 | ||||
|         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
 | ||||
|         hsgr_output_stream.write((char*) &crc32OfNodeBasedEdgeList, sizeof(unsigned)); | ||||
|         hsgr_output_stream.write((char*) &numberOfNodes, sizeof(unsigned)); | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user