]> Creatis software - FrontAlgorithms.git/blobdiff - lib/fpa/Base/RegionGrow.h
Almost there...
[FrontAlgorithms.git] / lib / fpa / Base / RegionGrow.h
index 6028b754622fb5f91c9413cf92b79cca0da7a9bc..0b5b79744c547a1daa588856128c984590344158 100644 (file)
@@ -2,6 +2,7 @@
 #define __FPA__BASE__REGIONGROW__H__
 
 #include <queue>
+#include <utility>
 #include <fpa/Base/Algorithm.h>
 
 namespace fpa
@@ -11,26 +12,28 @@ 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;
@@ -40,7 +43,7 @@ namespace fpa
       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 );
@@ -64,8 +67,8 @@ namespace fpa
 
       // 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: