-// -------------------------------------------------------------------------
-template< class V, class C, class R, class S, class VC, class MST, class B >
-bool fpa::Base::Dijkstra< V, C, R, S, VC, MST, B >::
-_ComputeNeighborResult(
- TResult& result, const TVertex& neighbor, const TVertex& parent
- ) const
-{
- result = this->_Cost( neighbor, parent );
- result *= TResult( this->_Distance( neighbor, parent ) );
-
- // WARNING: Dijkstra does not work on negative values!
- if( result >= TResult( 0 ) )
- {
- _TNode pn = this->_Node( parent );
- if( pn.Label == Self::AliveLabel && !this->m_LocalCosts )
- result += pn.Result;
- return( true );
- }
- else
- return( false );
-}
-
-// -------------------------------------------------------------------------
-template< class V, class C, class R, class S, class VC, class MST, class B >
-void fpa::Base::Dijkstra< V, C, R, S, VC, MST, B >::
-_SetResult( const TVertex& v, const _TNode& n )
-{
- this->GetMinimumSpanningTree( )->SetNode( v, n.Parent, n.FrontId, n.Result );
-}
-
-// -------------------------------------------------------------------------
-template< class V, class C, class R, class S, class VC, class MST, class B >
-bool fpa::Base::Dijkstra< V, C, R, S, VC, MST, B >::
-_IsQueueEmpty( ) const
-{
- return( this->m_Queue.empty( ) );
-}
-
-// -------------------------------------------------------------------------
-template< class V, class C, class R, class S, class VC, class MST, class B >
-void fpa::Base::Dijkstra< V, C, R, S, VC, MST, B >::
-_QueuePush( const TVertex& v, const _TNode& n )
-{
- _TQueueNode qn;
- qn.Vertex = v;
- qn.Node = n;
- this->m_Queue.push_back( qn );
- std::push_heap( this->m_Queue.begin( ), this->m_Queue.end( ) );
-}
-
-// -------------------------------------------------------------------------
-template< class V, class C, class R, class S, class VC, class MST, class B >
-void fpa::Base::Dijkstra< V, C, R, S, VC, MST, B >::
-_QueuePop( TVertex& v, _TNode& n )
-{
- _TQueueNode qn = this->m_Queue.front( );
- std::pop_heap( this->m_Queue.begin( ), this->m_Queue.end( ) );
- this->m_Queue.pop_back( );
- v = qn.Vertex;
- n = qn.Node;