From 14bd1d01f2e197c5a0b652726b57ac547a28a711 Mon Sep 17 00:00:00 2001 From: Dennis Luxen Date: Tue, 24 Sep 2013 18:48:02 +0200 Subject: [PATCH] create sentinel to adjancency array during preprocessing --- DataStructures/StaticGraph.h | 4 +++- Server/DataStructures/InternalDataFacade.h | 13 ++++++++++--- createHierarchy.cpp | 15 ++++++++++++++- 3 files changed, 27 insertions(+), 5 deletions(-) diff --git a/DataStructures/StaticGraph.h b/DataStructures/StaticGraph.h index ccdb3a214..8c086a664 100644 --- a/DataStructures/StaticGraph.h +++ b/DataStructures/StaticGraph.h @@ -88,7 +88,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); @@ -97,8 +97,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); diff --git a/Server/DataStructures/InternalDataFacade.h b/Server/DataStructures/InternalDataFacade.h index 5c6abc2c0..fa7ed927e 100644 --- a/Server/DataStructures/InternalDataFacade.h +++ b/Server/DataStructures/InternalDataFacade.h @@ -82,7 +82,9 @@ private: void LoadGraph(const boost::filesystem::path & hsgr_path) { typename ShM::vector node_list; - typename ShM< typename QueryGraph::_StrEdge, false>::vector edge_list; + typename ShM::vector edge_list; + + SimpleLogger().Write() << "loading graph from " << hsgr_path.string(); m_number_of_nodes = readHSGRFromStream( hsgr_path, @@ -90,9 +92,10 @@ private: 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); } diff --git a/createHierarchy.cpp b/createHierarchy.cpp index a3c6ceb20..66706342e 100644 --- a/createHierarchy.cpp +++ b/createHierarchy.cpp @@ -269,6 +269,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; } @@ -283,14 +284,26 @@ int main (int argc, char *argv[]) { StaticGraph::EdgeIterator edge = 0; StaticGraph::EdgeIterator position = 0; - for ( StaticGraph::NodeIterator node = 0; node <= numberOfNodes; ++node ) { + for ( StaticGraph::NodeIterator node = 0; node < numberOfNodes; ++node ) { StaticGraph::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));