create sentinel to adjancency array during preprocessing
This commit is contained in:
parent
918e20b164
commit
14bd1d01f2
@ -88,7 +88,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);
|
||||||
@ -97,8 +97,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);
|
||||||
|
@ -84,15 +84,18 @@ private:
|
|||||||
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,
|
||||||
node_list,
|
node_list,
|
||||||
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -269,6 +269,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;
|
||||||
}
|
}
|
||||||
@ -283,14 +284,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