#ifndef __fpa__Base__Dijkstra__hxx__ #define __fpa__Base__Dijkstra__hxx__ #include #include // ------------------------------------------------------------------------- template< class _TSuperclass, class _TMST > _TMST* fpa::Base::Dijkstra< _TSuperclass, _TMST >:: GetMinimumSpanningTree( ) { return( dynamic_cast< _TMST* >( this->itk::ProcessObject::GetOutput( this->m_MSTIndex ) ) ); } // ------------------------------------------------------------------------- template< class _TSuperclass, class _TMST > const _TMST* fpa::Base::Dijkstra< _TSuperclass, _TMST >:: GetMinimumSpanningTree( ) const { return( dynamic_cast< const _TMST* >( this->itk::ProcessObject::GetOutput( this->m_MSTIndex ) ) ); } // ------------------------------------------------------------------------- template< class _TSuperclass, class _TMST > fpa::Base::Dijkstra< _TSuperclass, _TMST >:: Dijkstra( ) : Superclass( ) { this->m_InitResult = TOutput( 0 ); this->m_MSTIndex = this->GetNumberOfRequiredOutputs( ); this->SetNumberOfRequiredOutputs( this->m_MSTIndex + 1 ); this->itk::ProcessObject::SetNthOutput( this->m_MSTIndex, _TMST::New( ) ); } // ------------------------------------------------------------------------- template< class _TSuperclass, class _TMST > fpa::Base::Dijkstra< _TSuperclass, _TMST >:: ~Dijkstra( ) { } // ------------------------------------------------------------------------- template< class _TSuperclass, class _TMST > void fpa::Base::Dijkstra< _TSuperclass, _TMST >:: _AfterGenerateData( ) { this->Superclass::_AfterGenerateData( ); auto mst = this->GetMinimumSpanningTree( ); mst->ClearSeeds( ); for( auto s = this->m_Seeds.begin( ); s != this->m_Seeds.end( ); ++s ) mst->AddSeed( s->Vertex ); mst->SetCollisions( this->m_Collisions ); } // ------------------------------------------------------------------------- template< class _TSuperclass, class _TMST > void fpa::Base::Dijkstra< _TSuperclass, _TMST >:: _UpdateResult( const _TQueueNode& n ) { this->Superclass::_UpdateResult( n ); this->GetMinimumSpanningTree( )->SetParent( n.Vertex, n.Parent ); } // ------------------------------------------------------------------------- template< class _TSuperclass, class _TMST > bool fpa::Base::Dijkstra< _TSuperclass, _TMST >:: _UpdateValue( _TQueueNode& v, const _TQueueNode& p ) { v.Result = this->_GetInputValue( p.Vertex, v.Vertex ); if( v.Result >= TOutput( 0 ) ) { v.Result += p.Result; return( true ); } else { v.Result = this->m_InitResult; return( false ); } // fi } #endif // __fpa__Base__Dijkstra__hxx__ // eof - $RCSfile$