// Init objects
this->_BeforeGenerateData( );
this->_ConfigureOutput( this->m_InitValue );
- this->_InitMarks( this->GetNumberOfSeeds( ) );
+ this->_InitMarks( this->GetSeeds( ).size( ) );
+ TNodes seeds = this->_UnifySeeds( );
+ this->_PrepareSeeds( seeds );
// Init queue
this->_QueueInit( );
- typename TSeeds::const_iterator sIt = this->BeginSeeds( );
- for( ; sIt != this->EndSeeds( ); ++sIt )
+ typename TNodes::const_iterator sIt = seeds.begin( );
+ for( ; sIt != seeds.end( ); ++sIt )
{
this->_QueuePush( *sIt );
this->InvokeEvent( TEvent( sIt->Vertex, sIt->FrontId, true ) );
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( );
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 ) );
} // fi
} // fi
+ this->_FinishOneLoop( );
} // elihw
{
}
+// -------------------------------------------------------------------------
+template< class _TFilter, class _TMarksInterface, class _TSeedsInterface >
+void fpa::Base::Algorithm< _TFilter, _TMarksInterface, _TSeedsInterface >::
+_FinishOneLoop( )
+{
+}
+
// -------------------------------------------------------------------------
template< class _TFilter, class _TMarksInterface, class _TSeedsInterface >
void fpa::Base::Algorithm< _TFilter, _TMarksInterface, _TSeedsInterface >::