#include <itkFunctionBase.h>
#include <fpa/Config.h>
#include <fpa/Base/Events.h>
+#include <fpa/Base/Functors/VertexCostFunctionBase.h>
namespace fpa
{
// Different functions
typedef std::vector< TVertex > TNeighborhood;
typedef itk::FunctionBase< TVertex, TNeighborhood > TNeighborhoodFunction;
+ typedef itk::FunctionBase< TOutput, TOutput > TConversionFunction;
+ typedef fpa::Base::Functors::VertexCostFunctionBase< TVertex, TOutput > TVertexFunction;
// Minigraph to represent collisions
typedef std::pair< _TVertex, bool > TCollision;
itkSetMacro( StopAtOneFront, bool );
itkGetObjectMacro( NeighborhoodFunction, TNeighborhoodFunction );
+ itkGetObjectMacro( ConversionFunction, TConversionFunction );
+ itkGetObjectMacro( VertexFunction, TVertexFunction );
+
+ itkGetConstObjectMacro( NeighborhoodFunction, TNeighborhoodFunction );
+ itkGetConstObjectMacro( ConversionFunction, TConversionFunction );
+ itkGetConstObjectMacro( VertexFunction, TVertexFunction );
+
itkSetObjectMacro( NeighborhoodFunction, TNeighborhoodFunction );
+ itkSetObjectMacro( ConversionFunction, TConversionFunction );
+ itkSetObjectMacro( VertexFunction, TVertexFunction );
public:
+ void ClearSeeds( );
void AddSeed( const TVertex& seed, const TOutput& value );
protected:
Algorithm( );
virtual ~Algorithm( );
- virtual void GenerateData( ) fpa_OVERRIDE;
+ virtual void GenerateData( ) override;
// Particular methods
virtual bool _ContinueGenerateData( );
virtual bool _ValidLoop( ) const;
virtual void _UpdateCollisions( const TVertex& a, const TVertex& b );
+ virtual _TOutput _GetInputValue( const _TQueueNode& v, const _TQueueNode& p );
+
virtual void _InitMarks( ) = 0;
virtual void _InitResults( const TOutput& init_value ) = 0;
virtual bool _IsMarked( const _TVertex& v ) const = 0;
virtual void _Mark( const _TQueueNode& n ) = 0;
virtual TFrontId _GetMark( const _TVertex& v ) const = 0;
virtual void _UpdateResult( const _TQueueNode& n ) = 0;
+ virtual TOutput _GetResult( const _TVertex& v ) const = 0;
+ virtual unsigned int _GetNumberOfDimensions( ) const = 0;
virtual bool _UpdateValue( _TQueueNode& v, const _TQueueNode& p ) = 0;
virtual unsigned long _QueueSize( ) const = 0;
protected:
_TOutput m_InitResult;
bool m_StopAtOneFront;
+
typename TNeighborhoodFunction::Pointer m_NeighborhoodFunction;
+ typename TConversionFunction::Pointer m_ConversionFunction;
+ typename TVertexFunction::Pointer m_VertexFunction;
+
std::vector< _TQueueNode > m_Seeds;
TCollisions m_Collisions;
unsigned int m_NumberOfFronts;