]> 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 <itkConceptChecking.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::TFilter,
22         public _TTraits::TMarksInterface,
23         public _TTraits::TSeedsInterface
24     {
25     public:
26       typedef _TTraits TTraits;
27       fpaTraitsMacro( typename, TTraits );
28
29       typedef TFilter                         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     protected:
37       itkConceptMacro(
38         Check_Marks,
39         ( itk::Concept::IsUnsignedInteger< TMark > )
40         );
41
42     public:
43       itkTypeMacro( fpa::Filters::Image::Algorithm, TFilter );
44
45       itkBooleanMacro( VisualDebug );
46       itkGetConstMacro( VisualDebug, bool );
47       itkSetMacro( VisualDebug, bool );
48
49       itkGetConstMacro( InitValue, TOutputValue );
50       itkSetMacro( InitValue, TOutputValue );
51
52     public:
53       virtual itk::ModifiedTimeType GetMTime( ) const override;
54       virtual void InvokeEvent( const itk::EventObject& e );
55       virtual void InvokeEvent( const itk::EventObject& e ) const;
56
57     protected:
58       Algorithm( );
59       virtual ~Algorithm( );
60
61       virtual void GenerateData( ) override;
62
63       // Object association
64       void _Associate( itk::Object* o );
65       void _Deassociate( itk::Object* o );
66       void _DeassociateAll( );
67
68       // Preparation and termination
69       virtual void _BeforeGenerateData( );
70       virtual void _AfterGenerateData( );
71       virtual void _Reinitialize( );
72
73       // Memory allocation
74       virtual void _ConfigureOutputs( ) = 0;
75
76       // Value assignation/recuperation
77       virtual const itk::DataObject* _GetReferenceInput( ) const;
78       virtual TInputValue _GetInputValue( const TVertex& v ) const = 0;
79       virtual TInputValue _GetInputValue( const TNode& n ) const;
80       virtual TOutputValue _GetOutputValue( const TVertex& v ) const = 0;
81       virtual TOutputValue _GetOutputValue( const TNode& n ) const;
82       virtual TNeighborhood _GetNeighbors( const TVertex& v ) const = 0;
83       virtual void _UpdateOutputValue( TNode& n ) = 0;
84
85       // Queue management
86       virtual void _QueueClear( ) = 0;
87       virtual TNode _QueuePop( ) = 0;
88       virtual void _QueuePush( const TNode& n ) = 0;
89       virtual unsigned long _QueueSize( ) const = 0;
90
91       // Value update according to the particular algorithm
92       virtual void _ComputeOutputValue( TNode& n ) = 0;
93
94     private:
95       // Purposely not implemented.
96       Algorithm( const Self& other );
97       Self& operator=( const Self& other );
98
99     protected:
100       bool m_VisualDebug;
101       TOutputValue m_InitValue;
102
103       std::set< itk::Object* > m_AssociatedObjects;
104     };
105
106   } // ecapseman
107
108 } // ecapseman
109
110 #ifndef ITK_MANUAL_INSTANTIATION
111 #  include <fpa/Filters/Algorithm.hxx>
112 #endif // ITK_MANUAL_INSTANTIATION
113
114 #endif // __fpa__Filters__Algorithm__h__
115 // eof - $RCSfile$