From 164c9333ef032e0b2441998e4edbd0b801f62d6f Mon Sep 17 00:00:00 2001 From: Dennis Luxen Date: Fri, 14 Jan 2011 17:21:19 +0000 Subject: [PATCH] fixes ticket 6. Slight speed increase for queries, escpecially long distance ones. --- DataStructures/SearchEngine.h | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/DataStructures/SearchEngine.h b/DataStructures/SearchEngine.h index f7045fdde..0dc944684 100644 --- a/DataStructures/SearchEngine.h +++ b/DataStructures/SearchEngine.h @@ -187,7 +187,7 @@ public: pathNode = _forwardHeap->GetData( pathNode ).parent; packedPath.push_front( pathNode ); } -// NodeID realStart = pathNode; + // NodeID realStart = pathNode; packedPath.push_back( middle ); pathNode = middle; @@ -275,7 +275,7 @@ public: } inline void RegisterThread(const unsigned k, const unsigned v) { - nodeHelpDesk->RegisterThread(k,v); + nodeHelpDesk->RegisterThread(k,v); } private: @@ -294,13 +294,24 @@ private: _forwardHeap->DeleteAll(); return; } + //Stalling + for ( typename GraphT::EdgeIterator edge = _graph->BeginEdges( node ); edge < _graph->EndEdges(node); edge++ ) { const NodeID to = _graph->GetTarget(edge); - const int edgeWeight = _graph->GetEdgeData(edge).distance; + const EdgeWeight edgeWeight = _graph->GetEdgeData(edge).distance; assert( edgeWeight > 0 ); const int toDistance = distance + edgeWeight; + if(_forwardHeap->WasInserted( to )) { + if(!forwardDirection ? _graph->GetEdgeData(edge).forward : _graph->GetEdgeData(edge).backward) { + if(_forwardHeap->GetKey( to ) + edgeWeight < distance) { +// std::cout << "[stalled] node " << node << std::endl; + return; + } + } + } + if(forwardDirection ? _graph->GetEdgeData(edge).forward : _graph->GetEdgeData(edge).backward ) { //New Node discovered -> Add to Heap + Node Info Storage