Fixing an invalid read when contracting rather small graphs. Partially
fixes issue #218
This commit is contained in:
parent
765b1cb3a5
commit
819c1729f1
@ -426,31 +426,30 @@ public:
|
|||||||
template< class Edge >
|
template< class Edge >
|
||||||
void GetEdges( std::vector< Edge >& edges ) {
|
void GetEdges( std::vector< Edge >& edges ) {
|
||||||
NodeID numberOfNodes = _graph->GetNumberOfNodes();
|
NodeID numberOfNodes = _graph->GetNumberOfNodes();
|
||||||
for ( NodeID node = 0; node < numberOfNodes; ++node ) {
|
if(oldNodeIDFromNewNodeIDMap.size()) {
|
||||||
for ( _DynamicGraph::EdgeIterator edge = _graph->BeginEdges( node ), endEdges = _graph->EndEdges( node ); edge < endEdges; edge++ ) {
|
for ( NodeID node = 0; node < numberOfNodes; ++node ) {
|
||||||
const NodeID target = _graph->GetTarget( edge );
|
for ( _DynamicGraph::EdgeIterator edge = _graph->BeginEdges( node ), endEdges = _graph->EndEdges( node ); edge < endEdges; edge++ ) {
|
||||||
const _DynamicGraph::EdgeData& data = _graph->GetEdgeData( edge );
|
const NodeID target = _graph->GetTarget( edge );
|
||||||
Edge newEdge;
|
const _DynamicGraph::EdgeData& data = _graph->GetEdgeData( edge );
|
||||||
newEdge.source = oldNodeIDFromNewNodeIDMap[node];
|
Edge newEdge;
|
||||||
newEdge.target = oldNodeIDFromNewNodeIDMap[target];
|
newEdge.source = oldNodeIDFromNewNodeIDMap[node];
|
||||||
|
newEdge.target = oldNodeIDFromNewNodeIDMap[target];
|
||||||
|
assert(UINT_MAX != newEdge.source);
|
||||||
|
assert(UINT_MAX != newEdge.target);
|
||||||
|
|
||||||
assert(UINT_MAX != newEdge.source);
|
newEdge.data.distance = data.distance;
|
||||||
assert(UINT_MAX != newEdge.target);
|
newEdge.data.shortcut = data.shortcut;
|
||||||
|
if(!data.originalViaNodeID)
|
||||||
|
newEdge.data.id = oldNodeIDFromNewNodeIDMap[data.id];
|
||||||
|
else
|
||||||
|
newEdge.data.id = data.id;
|
||||||
|
|
||||||
newEdge.data.distance = data.distance;
|
assert(newEdge.data.id != UINT_MAX);
|
||||||
newEdge.data.shortcut = data.shortcut;
|
newEdge.data.forward = data.forward;
|
||||||
if(!data.originalViaNodeID)
|
newEdge.data.backward = data.backward;
|
||||||
newEdge.data.id = oldNodeIDFromNewNodeIDMap[data.id];
|
edges.push_back( newEdge );
|
||||||
else
|
}
|
||||||
newEdge.data.id = data.id;
|
}
|
||||||
|
|
||||||
assert(newEdge.data.id != UINT_MAX);
|
|
||||||
// newEdge.data.nameID = data.nameID;
|
|
||||||
// newEdge.data.turnInstruction = data.turnInstruction;
|
|
||||||
newEdge.data.forward = data.forward;
|
|
||||||
newEdge.data.backward = data.backward;
|
|
||||||
edges.push_back( newEdge );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
std::ifstream temporaryEdgeStorage(temporaryEdgeStorageFilename.c_str(), std::ios::binary);
|
std::ifstream temporaryEdgeStorage(temporaryEdgeStorageFilename.c_str(), std::ios::binary);
|
||||||
//Also get the edges from temporary storage
|
//Also get the edges from temporary storage
|
||||||
@ -461,20 +460,18 @@ public:
|
|||||||
NodeID target;
|
NodeID target;
|
||||||
_DynamicGraph::EdgeData data;
|
_DynamicGraph::EdgeData data;
|
||||||
for(unsigned i = 0; i < numberOfTemporaryEdges; ++i) {
|
for(unsigned i = 0; i < numberOfTemporaryEdges; ++i) {
|
||||||
temporaryEdgeStorage.read((char*)&start, sizeof(NodeID));
|
temporaryEdgeStorage.read((char*)&start, sizeof(NodeID));
|
||||||
temporaryEdgeStorage.read((char*)&target, sizeof(NodeID));
|
temporaryEdgeStorage.read((char*)&target, sizeof(NodeID));
|
||||||
temporaryEdgeStorage.read((char*)&data, sizeof(_DynamicGraph::EdgeData));
|
temporaryEdgeStorage.read((char*)&data, sizeof(_DynamicGraph::EdgeData));
|
||||||
Edge newEdge;
|
Edge newEdge;
|
||||||
newEdge.source = start;
|
newEdge.source = start;
|
||||||
newEdge.target = target;
|
newEdge.target = target;
|
||||||
newEdge.data.distance = data.distance;
|
newEdge.data.distance = data.distance;
|
||||||
newEdge.data.shortcut = data.shortcut;
|
newEdge.data.shortcut = data.shortcut;
|
||||||
newEdge.data.id = data.id;
|
newEdge.data.id = data.id;
|
||||||
// newEdge.data.nameID = data.nameID;
|
newEdge.data.forward = data.forward;
|
||||||
// newEdge.data.turnInstruction = data.turnInstruction;
|
newEdge.data.backward = data.backward;
|
||||||
newEdge.data.forward = data.forward;
|
edges.push_back( newEdge );
|
||||||
newEdge.data.backward = data.backward;
|
|
||||||
edges.push_back( newEdge );
|
|
||||||
}
|
}
|
||||||
temporaryEdgeStorage.close();
|
temporaryEdgeStorage.close();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user