#define __FPA__BASE__REGIONGROW__H__
#include <queue>
+#include <utility>
#include <fpa/Base/Algorithm.h>
namespace fpa
/**
* Region grow is a front propagation with no costs.
*
- * @param V Vertex type.
- * @param C Vertex value type.
- * @param R Result value type.
- * @param B Base class for this algorithm. It should be any itk-based
- * filter (itk::ProcessObject).
+ * @param V Vertex type.
+ * @param C Vertex value type.
+ * @param R Result value type.
+ * @param VC Vertex lexicographical compare.
+ * @param B Base class for this algorithm. It should be any itk-based
+ * filter (itk::ProcessObject).
*
*/
- template< class V, class C, class R, class B >
+ template< class V, class C, class R, class VC, class B >
class RegionGrow
- : public Algorithm< V, C, R, B >
+ : public Algorithm< V, C, R, VC, B >
{
public:
typedef RegionGrow Self;
- typedef Algorithm< V, C, R, B > Superclass;
+ typedef Algorithm< V, C, R, VC, B > Superclass;
typedef itk::SmartPointer< Self > Pointer;
typedef itk::SmartPointer< const Self > ConstPointer;
- typedef typename Superclass::TVertex TVertex;
- typedef typename Superclass::TValue TValue;
- typedef typename Superclass::TResult TResult;
+ typedef typename Superclass::TVertex TVertex;
+ typedef typename Superclass::TValue TValue;
+ typedef typename Superclass::TResult TResult;
+ typedef typename Superclass::TVertexCompare TVertexCompare;
protected:
typedef typename Superclass::_TVertices _TVertices;
typedef typename Superclass::_TNode _TNode;
typedef typename Superclass::_TNodes _TNodes;
- typedef std::queue< _TNode > _TQueue;
+ typedef std::queue< std::pair< TVertex, _TNode > > _TQueue;
public:
itkTypeMacro( RegionGrow, Algorithm );
// Queue-related abstract methods
virtual bool _IsQueueEmpty( ) const;
- virtual void _QueuePush( const _TNode& n );
- virtual _TNode _QueuePop( );
+ virtual void _QueuePush( const TVertex& v, const _TNode& n );
+ virtual void _QueuePop( TVertex& v, _TNode& n );
virtual void _QueueClear( );
private: