// ========================================================================= // @author Leonardo Florez Valencia // @email florez-l@javeriana.edu.co // ========================================================================= #ifndef __fpa__Base__Algorithm__h__ #define __fpa__Base__Algorithm__h__ #include #include #include namespace fpa { namespace Base { /** */ template< class _TFilter, class _TMarks, class _TSeeds > class Algorithm : public _TFilter, public _TMarks, public _TSeeds { public: typedef _TMarks TMarksInterface; typedef _TSeeds TSeedsInterface; typedef _TFilter Superclass; typedef Algorithm Self; typedef itk::SmartPointer< Self > Pointer; typedef itk::SmartPointer< const Self > ConstPointer; typedef typename _TMarks::TTraits TTraits; fpa_Base_TraitTypes( typename TTraits ); private: itkConceptMacro( Marks_and_Seeds_SameTraits, ( itk::Concept::SameType< typename _TSeeds::TTraits, TTraits > ) ); public: itkTypeMacro( fpa::Base::Algorithm, _TFilter ); itkBooleanMacro( VisualDebug ); itkGetConstMacro( VisualDebug, bool ); itkSetMacro( VisualDebug, bool ); itkGetConstMacro( InitValue, TOutputValue ); itkSetMacro( InitValue, TOutputValue ); public: virtual void InvokeEvent( const itk::EventObject& e ); virtual void InvokeEvent( const itk::EventObject& e ) const; protected: Algorithm( ); virtual ~Algorithm( ); virtual void GenerateData( ) override; virtual void _BeforeGenerateData( ); virtual void _AfterGenerateData( ); virtual void _FinishOneLoop( ); virtual void _QueueInit( ); virtual void _ConfigureOutput( const TOutputValue& v ) = 0; virtual TNeighborhood _GetNeighbors( const TVertex& v ) const = 0; virtual TInputValue _GetInputValue( const TVertex& v ) const = 0; virtual TOutputValue _GetOutputValue( const TVertex& v ) const = 0; virtual void _ComputeOutputValue( TNode& n ) = 0; virtual void _UpdateOutputValue( TNode& n ) = 0; virtual void _QueueClear( ) = 0; virtual void _QueuePush( const TNode& node ) = 0; virtual unsigned long _QueueSize( ) const = 0; virtual TNode _QueuePop( ) = 0; private: // Purposely not implemented Algorithm( const Self& other ); Self& operator=( const Self& other ); protected: bool m_VisualDebug; TOutputValue m_InitValue; }; } // ecapseman } // ecapseman #ifndef ITK_MANUAL_INSTANTIATION # include #endif // ITK_MANUAL_INSTANTIATION #endif // __fpa__Base__Algorithm__h__ // eof - $RCSfile$