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);
|
||||
|
@ -82,7 +82,9 @@ private:
|
||||
|
||||
void LoadGraph(const boost::filesystem::path & hsgr_path) {
|
||||
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(
|
||||
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);
|
||||
}
|
||||
|
||||
|
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