#ifndef __fpa__Base__Algorithm__h__
#define __fpa__Base__Algorithm__h__
+#include <fpa/Config.h>
+
#include <vector>
#include <itkObject.h>
-/* TODO
- #include <itkMacro.h>
- #include <itkSmartPointer.h>
-*/
+#include <itkEventObject.h>
+
namespace fpa
{
namespace Base
typedef itk::SmartPointer< Self > Pointer;
typedef itk::SmartPointer< const Self > ConstPointer;
- typedef typename _TMarksInterface::TOutputValue TOutputValue;
+ typedef typename _TSeedsInterface::TInputValue TInputValue;
+ typedef typename _TSeedsInterface::TOutputValue TOutputValue;
typedef typename _TSeedsInterface::TNode TNode;
+ typedef typename _TSeedsInterface::TNodes TNodes;
typedef typename _TSeedsInterface::TSeeds TSeeds;
+ typedef typename _TSeedsInterface::TVertex TVertex;
+
+ typedef std::vector< TVertex > TNeighborhood;
+
+ /**
+ */
+ class TEvent
+ : public itk::EventObject
+ {
+ public:
+ typedef TEvent Self;
+ typedef itk::EventObject Superclass;
- typedef std::vector< TNode > TNeighborhood;
+ public:
+ TEvent( );
+ TEvent( const TVertex& v, unsigned long fid, bool intoq );
+ virtual ~TEvent( );
+ virtual const char* GetEventName( ) const override;
+ virtual bool CheckEvent( const itk::EventObject* e ) const override;
+ virtual itk::EventObject* MakeObject( ) const override;
+
+ private:
+ // Purposely not implemented.
+ Self& operator=( const Self& other );
+
+ public:
+ TVertex Vertex;
+ unsigned long FrontId;
+ bool IntoQueue;
+ };
public:
itkTypeMacro( fpa::Base::Algorithm, _TFilter );
-
+
+ itkBooleanMacro( VisualDebug );
+
itkGetConstMacro( InitValue, TOutputValue );
+ itkGetConstMacro( VisualDebug, bool );
+
itkSetMacro( InitValue, TOutputValue );
+ itkSetMacro( VisualDebug, bool );
+
+ 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 _QueueInit( );
virtual void _ConfigureOutput( const TOutputValue& v ) = 0;
- virtual void _QueueInit( ) = 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 TOutputValue _ComputeOutputValue( const TNode& n ) = 0;
+ virtual void _UpdateOutputValue( const TNode& n ) = 0;
+ virtual void _QueueClear( ) = 0;
virtual void _QueuePush( const TNode& node ) = 0;
virtual unsigned long _QueueSize( ) const = 0;
virtual TNode _QueuePop( ) = 0;
Self& operator=( const Self& other );
protected:
+ bool m_VisualDebug;
TOutputValue m_InitValue;
};