#ifndef __FPA__BASE__DIJKSTRA__HXX__ #define __FPA__BASE__DIJKSTRA__HXX__ #include // ------------------------------------------------------------------------- template< class V, class C, class R, class B > fpa::Base::Dijkstra< V, C, R, B >:: Dijkstra( ) : Superclass( ) { } // ------------------------------------------------------------------------- template< class V, class C, class R, class B > fpa::Base::Dijkstra< V, C, R, B >:: ~Dijkstra( ) { } // ------------------------------------------------------------------------- template< class V, class C, class R, class B > bool fpa::Base::Dijkstra< V, C, R, B >:: _ComputeNeighborResult( TResult& result, const TVertex& neighbor, const TVertex& parent ) const { result = this->_Cost( neighbor, parent ); result *= TResult( this->_Distance( neighbor, parent ) ); _TNode pn = this->_Node( parent ); if( pn.Label == Self::AliveLabel ) result += pn.Result; return( true ); } // ------------------------------------------------------------------------- template< class V, class C, class R, class B > bool fpa::Base::Dijkstra< V, C, R, B >:: _IsQueueEmpty( ) const { return( this->m_Queue.empty( ) ); } // ------------------------------------------------------------------------- template< class V, class C, class R, class B > void fpa::Base::Dijkstra< V, C, R, B >:: _QueuePush( const _TNode& n ) { this->m_Queue.push_back( n ); std::push_heap( this->m_Queue.begin( ), this->m_Queue.end( ), Self::m_NodeCompare ); } // ------------------------------------------------------------------------- template< class V, class C, class R, class B > typename fpa::Base::Dijkstra< V, C, R, B >:: _TNode fpa::Base::Dijkstra< V, C, R, B >:: _QueuePop( ) { _TNode n = this->m_Queue.front( ); std::pop_heap( this->m_Queue.begin( ), this->m_Queue.end( ), Self::m_NodeCompare ); this->m_Queue.pop_back( ); return( n ); } // ------------------------------------------------------------------------- template< class V, class C, class R, class B > void fpa::Base::Dijkstra< V, C, R, B >:: _QueueClear( ) { this->m_Queue.clear( ); } #endif // __FPA__BASE__DIJKSTRA__HXX__ // eof - $RCSfile$