]> Creatis software - FrontAlgorithms.git/blob - lib/fpa/Filters/Algorithm.h
...
[FrontAlgorithms.git] / lib / fpa / Filters / Algorithm.h
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__
7
8 #include <set>
9 #include <itkDataObject.h>
10 #include <fpa/Config.h>
11 #include <fpa/Filters/Event.h>
12
13 namespace fpa
14 {
15   namespace Filters
16   {
17     /**
18      */
19     template< class _TTraits >
20     class Algorithm
21       : public _TTraits::TFilterInterface,
22         public _TTraits::TMarksInterface,
23         public _TTraits::TSeedsInterface
24     {
25     public:
26       typedef _TTraits TTraits;
27       fpaTraitsMacro( typename TTraits );
28
29       typedef typename TTraits::TFilterInterface Superclass;
30       typedef Algorithm                          Self;
31       typedef itk::SmartPointer< Self >          Pointer;
32       typedef itk::SmartPointer< const Self >    ConstPointer;
33
34       typedef fpa::Filters::Event< TVertex > TEvent;
35
36     public:
37       itkTypeMacro( fpa::Filters::Algorithm, TTraits::TFilterInterface );
38
39       itkBooleanMacro( VisualDebug );
40       itkGetConstMacro( VisualDebug, bool );
41       itkSetMacro( VisualDebug, bool );
42
43       itkGetConstMacro( InitValue, TOutputValue );
44       itkSetMacro( InitValue, TOutputValue );
45
46       itkGetConstMacro( FillValue, TOutputValue );
47       itkSetMacro( FillValue, TOutputValue );
48
49     public:
50       virtual itk::ModifiedTimeType GetMTime( ) const override;
51       virtual void InvokeEvent( const itk::EventObject& e );
52       virtual void InvokeEvent( const itk::EventObject& e ) const;
53
54     protected:
55       Algorithm( );
56       virtual ~Algorithm( );
57
58       // Main algorithm method
59       virtual void GenerateData( ) override;
60
61       // Object association
62       void _Associate( itk::Object* o );
63       void _Deassociate( itk::Object* o );
64       void _DeassociateAll( );
65
66       // Pipeline related methods
67       virtual void _BeforeGenerateData( );
68       virtual void _AfterGenerateData( );
69
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;
80
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;
87
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;
93
94       // Algoritm related methods
95       virtual void _PostComputeOutputValue( TNode& n ) = 0;
96       virtual void _PreComputeOutputValue( TNode& n ) = 0;
97       virtual void _Reinitialize( );
98
99     private:
100       Algorithm( const Self& other );
101       Self& operator=( const Self& other );
102
103     protected:
104       bool m_VisualDebug;
105       TOutputValue m_InitValue;
106       TOutputValue m_FillValue;
107       std::set< itk::Object* > m_AssociatedObjects;
108     };
109
110   } // ecapseman
111
112 } // ecapseman
113
114 #ifndef ITK_MANUAL_INSTANTIATION
115 #  include <fpa/Filters/Algorithm.hxx>
116 #endif // ITK_MANUAL_INSTANTIATION
117 #endif // __fpa__Filters__Algorithm__h__
118 // eof - $RCSfile$