// ========================================================================= // @author Leonardo Florez Valencia // @email florez-l@javeriana.edu.co // ========================================================================= #ifndef __fpa__Base__Algorithm__h__ #define __fpa__Base__Algorithm__h__ #include #include /* TODO #include #include */ namespace fpa { namespace Base { /** */ template< class _TFilter, class _TMarksInterface, class _TSeedsInterface > class Algorithm : public _TFilter, public _TMarksInterface, public _TSeedsInterface { public: typedef Algorithm Self; typedef _TFilter Superclass; typedef _TMarksInterface TMarksInterface; typedef _TSeedsInterface TSeedsInterface; typedef itk::SmartPointer< Self > Pointer; typedef itk::SmartPointer< const Self > ConstPointer; typedef typename _TMarksInterface::TOutputValue TOutputValue; typedef typename _TSeedsInterface::TNode TNode; typedef typename _TSeedsInterface::TSeeds TSeeds; typedef std::vector< TNode > TNeighborhood; public: itkTypeMacro( fpa::Base::Algorithm, _TFilter ); itkGetConstMacro( InitValue, TOutputValue ); itkSetMacro( InitValue, TOutputValue ); protected: Algorithm( ); virtual ~Algorithm( ); virtual void GenerateData( ) override; virtual void _ConfigureOutput( const TOutputValue& v ) = 0; virtual void _QueueInit( ) = 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: TOutputValue m_InitValue; }; } // ecapseman } // ecapseman #ifndef ITK_MANUAL_INSTANTIATION # include #endif // ITK_MANUAL_INSTANTIATION #endif // __fpa__Base__Algorithm__h__ // eof - $RCSfile$