// ========================================================================= // @author Leonardo Florez Valencia // @email florez-l@javeriana.edu.co // ========================================================================= #ifndef __fpa__Base__DijkstraBase__h__ #define __fpa__Base__DijkstraBase__h__ #include #include #include namespace fpa { namespace Base { /** */ template< class _TAlgorithm > class DijkstraBase : public _TAlgorithm { public: typedef DijkstraBase Self; typedef _TAlgorithm Superclass; typedef itk::SmartPointer< Self > Pointer; typedef itk::SmartPointer< const Self > ConstPointer; typedef typename _TAlgorithm::TNode TNode; typedef typename _TAlgorithm::TInputValue TInputValue; typedef typename _TAlgorithm::TOutputValue TOutputValue; typedef typename _TAlgorithm::TVertex TVertex; typedef std::vector< TNode > TQueue; struct TQueueOrder { bool operator()( const TNode& a, const TNode& b ) const { return( b.Value < a.Value ); } }; typedef fpa::Base::Functors::Dijkstra::Function< TVertex, TOutputValue > TWeightFunction; public: itkConceptMacro( Check_TOutputValue, ( itk::Concept::IsFloatingPoint< TOutputValue > ) ); public: itkGetObjectMacro( WeightFunction, TWeightFunction ); itkSetObjectMacro( WeightFunction, TWeightFunction ); public: virtual itk::ModifiedTimeType GetMTime( ) const override; protected: DijkstraBase( ); virtual ~DijkstraBase( ); virtual TOutputValue _ComputeOutputValue( const TNode& n ) override; virtual void _QueueInit( ) override; virtual void _QueueClear( ) override; virtual TNode _QueuePop( ) override; virtual void _QueuePush( const TNode& node ) override; virtual unsigned long _QueueSize( ) const override; private: // Purposely not implemented. DijkstraBase( const Self& other ); Self& operator=( const Self& other ); protected: typename TWeightFunction::Pointer m_WeightFunction; TQueue m_Queue; TQueueOrder m_QueueOrder; }; } // ecapseman } // ecapseman #ifndef ITK_MANUAL_INSTANTIATION # include #endif // ITK_MANUAL_INSTANTIATION #endif // __fpa__Base__DijkstraBase__h__ // eof - $RCSfile$