1 // =========================================================================
2 // @author Leonardo Florez Valencia
3 // @email florez-l@javeriana.edu.co
4 // =========================================================================
5 #ifndef __fpa__Filters__Algorithm__h__
6 #define __fpa__Filters__Algorithm__h__
9 #include <itkDataObject.h>
10 #include <fpa/Config.h>
11 #include <fpa/Filters/Event.h>
19 template< class _TTraits >
21 : public _TTraits::TFilterInterface,
22 public _TTraits::TMarksInterface,
23 public _TTraits::TSeedsInterface
26 typedef _TTraits TTraits;
27 fpaTraitsMacro( typename TTraits );
29 typedef typename TTraits::TFilterInterface Superclass;
30 typedef Algorithm Self;
31 typedef itk::SmartPointer< Self > Pointer;
32 typedef itk::SmartPointer< const Self > ConstPointer;
34 typedef fpa::Filters::Event< TVertex > TEvent;
37 itkTypeMacro( fpa::Filters::Algorithm, TTraits::TFilterInterface );
39 itkBooleanMacro( VisualDebug );
40 itkGetConstMacro( VisualDebug, bool );
41 itkSetMacro( VisualDebug, bool );
43 itkGetConstMacro( InitValue, TOutputValue );
44 itkSetMacro( InitValue, TOutputValue );
46 itkGetConstMacro( FillValue, TOutputValue );
47 itkSetMacro( FillValue, TOutputValue );
50 virtual itk::ModifiedTimeType GetMTime( ) const override;
51 virtual void InvokeEvent( const itk::EventObject& e );
52 virtual void InvokeEvent( const itk::EventObject& e ) const;
56 virtual ~Algorithm( );
58 // Main algorithm method
59 virtual void GenerateData( ) override;
62 void _Associate( itk::Object* o );
63 void _Deassociate( itk::Object* o );
64 void _DeassociateAll( );
66 // Pipeline related methods
67 virtual void _BeforeGenerateData( );
68 virtual void _AfterGenerateData( );
70 // Filter related methods
71 virtual void _AssignOutputValue( const TNode& n ) = 0;
72 virtual void _ConfigureOutputs( ) = 0;
73 virtual TInputValue _GetInputValue( const TVertex& v ) const = 0;
74 virtual TInputValue _GetInputValue( const TNode& n ) const;
75 virtual TOutputValue _GetOutputValue( const TVertex& v ) const = 0;
76 virtual TOutputValue _GetOutputValue( const TNode& n ) const;
77 virtual TNeighborhood _GetNeighbors( const TVertex& v ) const = 0;
78 virtual TNeighborhood _GetNeighbors( const TNode& n ) const;
79 virtual const itk::DataObject* _GetReferenceInput( ) const;
81 // Marks related methods
82 virtual bool _IsMarked( const TVertex& v ) const = 0;
83 virtual bool _IsMarked( const TNode& n ) const;
84 virtual bool _IsNotMarked( const TVertex& v ) const;
85 virtual bool _IsNotMarked( const TNode& n ) const;
86 virtual void _Mark( const TNode& n ) = 0;
88 // Queue related methods
89 virtual void _QueueClear( ) = 0;
90 virtual TNode _QueuePop( ) = 0;
91 virtual void _QueuePush( const TNode& n ) = 0;
92 virtual unsigned long _QueueSize( ) const = 0;
94 // Algoritm related methods
95 virtual void _PostComputeOutputValue( TNode& n ) = 0;
96 virtual void _PreComputeOutputValue( TNode& n ) = 0;
97 virtual void _Reinitialize( );
100 Algorithm( const Self& other );
101 Self& operator=( const Self& other );
105 TOutputValue m_InitValue;
106 TOutputValue m_FillValue;
107 std::set< itk::Object* > m_AssociatedObjects;
114 #ifndef ITK_MANUAL_INSTANTIATION
115 # include <fpa/Filters/Algorithm.hxx>
116 #endif // ITK_MANUAL_INSTANTIATION
117 #endif // __fpa__Filters__Algorithm__h__