]> Creatis software - FrontAlgorithms.git/blobdiff - lib/fpa/Base/Dijkstra.hxx
CMake updated. Some other filters added.
[FrontAlgorithms.git] / lib / fpa / Base / Dijkstra.hxx
index 2a2ccf5403d6ecf62b56f583e79e1d3eca807735..25d56504051fbb1b2b1bccd01a9a239487764051 100644 (file)
@@ -4,23 +4,24 @@
 #include <algorithm>
 
 // -------------------------------------------------------------------------
-template< class V, class C, class R, class VC, class B >
-fpa::Base::Dijkstra< V, C, R, VC, B >::
+template< class V, class C, class R, class S, class VC, class B >
+fpa::Base::Dijkstra< V, C, R, S, VC, B >::
 Dijkstra( )
-  : Superclass( )
+  : Superclass( ),
+    m_LocalCosts( false )
 {
 }
 
 // -------------------------------------------------------------------------
-template< class V, class C, class R, class VC, class B >
-fpa::Base::Dijkstra< V, C, R, VC, B >::
+template< class V, class C, class R, class S, class VC, class B >
+fpa::Base::Dijkstra< V, C, R, S, VC, B >::
 ~Dijkstra( )
 {
 }
 
 // -------------------------------------------------------------------------
-template< class V, class C, class R, class VC, class B >
-bool fpa::Base::Dijkstra< V, C, R, VC, B >::
+template< class V, class C, class R, class S, class VC, class B >
+bool fpa::Base::Dijkstra< V, C, R, S, VC, B >::
 _ComputeNeighborResult(
   TResult& result, const TVertex& neighbor, const TVertex& parent
   ) const
@@ -32,7 +33,7 @@ _ComputeNeighborResult(
   if( result >= TResult( 0 ) )
   {
     _TNode pn = this->_Node( parent );
-    if( pn.Label == Self::AliveLabel )
+    if( pn.Label == Self::AliveLabel && !this->m_LocalCosts )
       result += pn.Result;
     return( true );
   }
@@ -41,16 +42,16 @@ _ComputeNeighborResult(
 }
 
 // -------------------------------------------------------------------------
-template< class V, class C, class R, class VC, class B >
-bool fpa::Base::Dijkstra< V, C, R, VC, B >::
+template< class V, class C, class R, class S, class VC, class B >
+bool fpa::Base::Dijkstra< V, C, R, S, VC, B >::
 _IsQueueEmpty( ) const
 {
   return( this->m_Queue.empty( ) );
 }
 
 // -------------------------------------------------------------------------
-template< class V, class C, class R, class VC, class B >
-void fpa::Base::Dijkstra< V, C, R, VC, B >::
+template< class V, class C, class R, class S, class VC, class B >
+void fpa::Base::Dijkstra< V, C, R, S, VC, B >::
 _QueuePush( const TVertex& v, const _TNode& n )
 {
   _TQueueNode qn;
@@ -61,8 +62,8 @@ _QueuePush( const TVertex& v, const _TNode& n )
 }
 
 // -------------------------------------------------------------------------
-template< class V, class C, class R, class VC, class B >
-void fpa::Base::Dijkstra< V, C, R, VC, B >::
+template< class V, class C, class R, class S, class VC, class B >
+void fpa::Base::Dijkstra< V, C, R, S, VC, B >::
 _QueuePop( TVertex& v, _TNode& n )
 {
   _TQueueNode qn = this->m_Queue.front( );
@@ -73,8 +74,8 @@ _QueuePop( TVertex& v, _TNode& n )
 }
 
 // -------------------------------------------------------------------------
-template< class V, class C, class R, class VC, class B >
-void fpa::Base::Dijkstra< V, C, R, VC, B >::
+template< class V, class C, class R, class S, class VC, class B >
+void fpa::Base::Dijkstra< V, C, R, S, VC, B >::
 _QueueClear( )
 {
   this->m_Queue.clear( );