Forgot to guard against bad data from NNGrid

This commit is contained in:
Dennis Luxen 2010-09-21 16:23:50 +00:00
parent ee56d0051f
commit c36fc9e49f

View File

@ -73,6 +73,12 @@ public:
{ {
bool reverse = false; bool reverse = false;
EdgeID currentEdge = _graph->FindEdge( phantomNodes->startNode1, phantomNodes->startNode2 ); EdgeID currentEdge = _graph->FindEdge( phantomNodes->startNode1, phantomNodes->startNode2 );
if(currentEdge == UINT_MAX){
delete _forwardHeap;
delete _backwardHeap;
return _upperbound;
}
if(currentEdge == UINT_MAX){ if(currentEdge == UINT_MAX){
currentEdge = _graph->FindEdge( phantomNodes->startNode2, phantomNodes->startNode1 ); currentEdge = _graph->FindEdge( phantomNodes->startNode2, phantomNodes->startNode1 );
reverse = true; reverse = true;
@ -108,6 +114,12 @@ public:
edge = _graph->FindEdge( phantomNodes->startNode2, phantomNodes->startNode1 ); edge = _graph->FindEdge( phantomNodes->startNode2, phantomNodes->startNode1 );
reverse = true; reverse = true;
} }
if(edge == UINT_MAX){
delete _forwardHeap;
delete _backwardHeap;
return _upperbound;
}
EdgeWeight w = _graph->GetEdgeData( edge ).distance; EdgeWeight w = _graph->GetEdgeData( edge ).distance;
if( (_graph->GetEdgeData( edge ).backward && !reverse) || (_graph->GetEdgeData( edge ).forward && reverse) ) if( (_graph->GetEdgeData( edge ).backward && !reverse) || (_graph->GetEdgeData( edge ).forward && reverse) )
_forwardHeap->Insert(phantomNodes->startNode1, absDouble( w*phantomNodes->startRatio), phantomNodes->startNode1); _forwardHeap->Insert(phantomNodes->startNode1, absDouble( w*phantomNodes->startRatio), phantomNodes->startNode1);
@ -122,6 +134,12 @@ public:
edge = _graph->FindEdge( phantomNodes->targetNode2, phantomNodes->targetNode1 ); edge = _graph->FindEdge( phantomNodes->targetNode2, phantomNodes->targetNode1 );
reverse = true; reverse = true;
} }
if(edge == UINT_MAX){
delete _forwardHeap;
delete _backwardHeap;
return _upperbound;
}
EdgeWeight w = _graph->GetEdgeData( edge ).distance; EdgeWeight w = _graph->GetEdgeData( edge ).distance;
if( (_graph->GetEdgeData( edge ).backward && !reverse) || (_graph->GetEdgeData( edge ).forward && reverse) ) if( (_graph->GetEdgeData( edge ).backward && !reverse) || (_graph->GetEdgeData( edge ).forward && reverse) )
_backwardHeap->Insert(phantomNodes->targetNode2, absDouble( w*phantomNodes->targetRatio), phantomNodes->targetNode2); _backwardHeap->Insert(phantomNodes->targetNode2, absDouble( w*phantomNodes->targetRatio), phantomNodes->targetNode2);