]> Creatis software - FrontAlgorithms.git/blobdiff - lib/fpa/Base/Algorithm.hxx
...
[FrontAlgorithms.git] / lib / fpa / Base / Algorithm.hxx
index 44d2520da23e996f40197f7cf8484077100ee820..68296bebba6393585839f81f02b9cfd2e4546548 100644 (file)
@@ -7,16 +7,16 @@
 #define __fpa__Base__Algorithm__hxx__
 
 // -------------------------------------------------------------------------
-template< class _TFilter, class _TMarksInterface, class _TSeedsInterface >
-fpa::Base::Algorithm< _TFilter, _TMarksInterface, _TSeedsInterface >::TEvent::
+template< class _TTraits >
+fpa::Base::Algorithm< _TTraits >::TEvent::
 TEvent( )
   : Superclass( )
 {
 }
 
 // -------------------------------------------------------------------------
-template< class _TFilter, class _TMarksInterface, class _TSeedsInterface >
-fpa::Base::Algorithm< _TFilter, _TMarksInterface, _TSeedsInterface >::TEvent::
+template< class _TTraits >
+fpa::Base::Algorithm< _TTraits >::TEvent::
 TEvent( const TVertex& v, unsigned long fid, bool intoq )
   : Superclass( ),
     Vertex( v ),
@@ -26,42 +26,39 @@ TEvent( const TVertex& v, unsigned long fid, bool intoq )
 }
 
 // -------------------------------------------------------------------------
-template< class _TFilter, class _TMarksInterface, class _TSeedsInterface >
-fpa::Base::Algorithm< _TFilter, _TMarksInterface, _TSeedsInterface >::TEvent::
+template< class _TTraits >
+fpa::Base::Algorithm< _TTraits >::TEvent::
 ~TEvent( )
 {
 }
 
 // -------------------------------------------------------------------------
-template< class _TFilter, class _TMarksInterface, class _TSeedsInterface >
-const char* 
-fpa::Base::Algorithm< _TFilter, _TMarksInterface, _TSeedsInterface >::TEvent::
+template< class _TTraits >
+const char* fpa::Base::Algorithm< _TTraits >::TEvent::
 GetEventName( ) const
 {
-  return( "fpa::Base::Algorithm< _TFilter, _TMarksInterface, _TSeedsInterface >::TEvent" );
+  return( "fpa::Base::Algorithm< _TTraits >::TEvent" );
 }
 
 // -------------------------------------------------------------------------
-template< class _TFilter, class _TMarksInterface, class _TSeedsInterface >
-bool
-fpa::Base::Algorithm< _TFilter, _TMarksInterface, _TSeedsInterface >::TEvent::
+template< class _TTraits >
+bool fpa::Base::Algorithm< _TTraits >::TEvent::
 CheckEvent( const itk::EventObject* e ) const
 {
   return( dynamic_cast< const Self* >( e ) != NULL );
 }
 
 // -------------------------------------------------------------------------
-template< class _TFilter, class _TMarksInterface, class _TSeedsInterface >
-itk::EventObject* 
-fpa::Base::Algorithm< _TFilter, _TMarksInterface, _TSeedsInterface >::TEvent::
+template< class _TTraits >
+itk::EventObject* fpa::Base::Algorithm< _TTraits >::TEvent::
 MakeObject( ) const
 {
   return( new Self );
 }
 
 // -------------------------------------------------------------------------
-template< class _TFilter, class _TMarksInterface, class _TSeedsInterface >
-void fpa::Base::Algorithm< _TFilter, _TMarksInterface, _TSeedsInterface >::
+template< class _TTraits >
+void fpa::Base::Algorithm< _TTraits >::
 InvokeEvent( const itk::EventObject& e )
 {
   TEvent a;
@@ -75,8 +72,8 @@ InvokeEvent( const itk::EventObject& e )
 }
 
 // -------------------------------------------------------------------------
-template< class _TFilter, class _TMarksInterface, class _TSeedsInterface >
-void fpa::Base::Algorithm< _TFilter, _TMarksInterface, _TSeedsInterface >::
+template< class _TTraits >
+void fpa::Base::Algorithm< _TTraits >::
 InvokeEvent( const itk::EventObject& e ) const
 {
   TEvent a;
@@ -90,26 +87,26 @@ InvokeEvent( const itk::EventObject& e ) const
 }
 
 // -------------------------------------------------------------------------
-template< class _TFilter, class _TMarksInterface, class _TSeedsInterface >
-fpa::Base::Algorithm< _TFilter, _TMarksInterface, _TSeedsInterface >::
+template< class _TTraits >
+fpa::Base::Algorithm< _TTraits >::
 Algorithm( )
   : Superclass( ),
-    _TMarksInterface( this ),
-    _TSeedsInterface( this ),
+    TMarksInterface( this ),
+    TSeedsInterface( this ),
     m_VisualDebug( false )
 {
 }
 
 // -------------------------------------------------------------------------
-template< class _TFilter, class _TMarksInterface, class _TSeedsInterface >
-fpa::Base::Algorithm< _TFilter, _TMarksInterface, _TSeedsInterface >::
+template< class _TTraits >
+fpa::Base::Algorithm< _TTraits >::
 ~Algorithm( )
 {
 }
 
 // -------------------------------------------------------------------------
-template< class _TFilter, class _TMarksInterface, class _TSeedsInterface >
-void fpa::Base::Algorithm< _TFilter, _TMarksInterface, _TSeedsInterface >::
+template< class _TTraits >
+void fpa::Base::Algorithm< _TTraits >::
 GenerateData( )
 {
   this->InvokeEvent( itk::StartEvent( ) );
@@ -139,12 +136,13 @@ GenerateData( )
     this->InvokeEvent( TEvent( node.Vertex, node.FrontId, false ) );
     if( !( this->_IsMarked( node.Vertex ) ) )
     {
-      // Mark it
-      if( this->_Mark( node.Vertex, node.FrontId ) )
-      {
-        // Update output value
-        this->_UpdateOutputValue( node );
+      // Update output value and mark vertex
+      this->_UpdateOutputValue( node );
+      this->_Mark( node.Vertex, node.FrontId );
 
+      // The actual node was effectively marked?
+      if( node.FrontId > 0 )
+      {
         // Add neighborhood
         TNeighborhood neighbors = this->_GetNeighbors( node.Vertex );
         typename TNeighborhood::const_iterator nIt = neighbors.begin( );
@@ -167,7 +165,7 @@ GenerateData( )
             nnode.Vertex = *nIt;
             nnode.Parent = node.Vertex;
             nnode.FrontId = node.FrontId;
-            nnode.Value = this->_ComputeOutputValue( nnode );
+            this->_ComputeOutputValue( nnode );
             this->_QueuePush( nnode );
             this->InvokeEvent( TEvent( nnode.Vertex, nnode.FrontId, true ) );
 
@@ -179,6 +177,7 @@ GenerateData( )
       } // fi
 
     } // fi
+    this->_FinishOneLoop( );
 
   } // elihw
 
@@ -188,22 +187,29 @@ GenerateData( )
 }
 
 // -------------------------------------------------------------------------
-template< class _TFilter, class _TMarksInterface, class _TSeedsInterface >
-void fpa::Base::Algorithm< _TFilter, _TMarksInterface, _TSeedsInterface >::
+template< class _TTraits >
+void fpa::Base::Algorithm< _TTraits >::
 _BeforeGenerateData( )
 {
 }
 
 // -------------------------------------------------------------------------
-template< class _TFilter, class _TMarksInterface, class _TSeedsInterface >
-void fpa::Base::Algorithm< _TFilter, _TMarksInterface, _TSeedsInterface >::
+template< class _TTraits >
+void fpa::Base::Algorithm< _TTraits >::
 _AfterGenerateData( )
 {
 }
 
 // -------------------------------------------------------------------------
-template< class _TFilter, class _TMarksInterface, class _TSeedsInterface >
-void fpa::Base::Algorithm< _TFilter, _TMarksInterface, _TSeedsInterface >::
+template< class _TTraits >
+void fpa::Base::Algorithm< _TTraits >::
+_FinishOneLoop( )
+{
+}
+
+// -------------------------------------------------------------------------
+template< class _TTraits >
+void fpa::Base::Algorithm< _TTraits >::
 _QueueInit( )
 {
   this->_QueueClear( );