1 #ifndef __FPA__BASE__INCREMENTALREGIONGROW__HXX__
2 #define __FPA__BASE__INCREMENTALREGIONGROW__HXX__
4 // -------------------------------------------------------------------------
5 template< class V, class R, class VV, class VC, class B >
6 typename fpa::Base::IncrementalRegionGrow< V, R, VV, VC, B >::
7 TGrowingFunction* fpa::Base::IncrementalRegionGrow< V, R, VV, VC, B >::
8 GetGrowingFunction( unsigned int i )
10 if( i < this->m_Functions.size( ) )
11 return( this->m_Functions[ i ] );
16 // -------------------------------------------------------------------------
17 template< class V, class R, class VV, class VC, class B >
18 const typename fpa::Base::IncrementalRegionGrow< V, R, VV, VC, B >::
19 TGrowingFunction* fpa::Base::IncrementalRegionGrow< V, R, VV, VC, B >::
20 GetGrowingFunction( unsigned int i ) const
22 if( i < this->m_Functions.size( ) )
23 return( this->m_Functions[ i ] );
28 // -------------------------------------------------------------------------
29 template< class V, class R, class VV, class VC, class B >
30 unsigned long fpa::Base::IncrementalRegionGrow< V, R, VV, VC, B >::
31 GetGrowingFunctionVolume( unsigned int i ) const
33 if( i < this->m_Volumes.size( ) )
34 return( this->m_Volumes[ i ] );
39 // -------------------------------------------------------------------------
40 template< class V, class R, class VV, class VC, class B >
41 unsigned int fpa::Base::IncrementalRegionGrow< V, R, VV, VC, B >::
42 GetNumberOfGrowingFunctions( ) const
44 return( this->m_Functions.size( ) );
47 // -------------------------------------------------------------------------
48 template< class V, class R, class VV, class VC, class B >
49 void fpa::Base::IncrementalRegionGrow< V, R, VV, VC, B >::
50 ClearGrowingFunctions( )
52 this->m_Functions.clear( );
53 this->m_Volumes.clear( );
57 // -------------------------------------------------------------------------
58 template< class V, class R, class VV, class VC, class B >
59 unsigned int fpa::Base::IncrementalRegionGrow< V, R, VV, VC, B >::
60 AddGrowingFunction( TGrowingFunction* function )
62 this->m_Functions.push_back( function );
63 this->m_Volumes.push_back( 0 );
67 // -------------------------------------------------------------------------
68 template< class V, class R, class VV, class VC, class B >
69 fpa::Base::IncrementalRegionGrow< V, R, VV, VC, B >::
70 IncrementalRegionGrow( )
75 // -------------------------------------------------------------------------
76 template< class V, class R, class VV, class VC, class B >
77 fpa::Base::IncrementalRegionGrow< V, R, VV, VC, B >::
78 ~IncrementalRegionGrow( )
82 // -------------------------------------------------------------------------
83 template< class V, class R, class VV, class VC, class B >
84 void fpa::Base::IncrementalRegionGrow< V, R, VV, VC, B >::
85 _BeforeGenerateData( )
87 this->Superclass::_BeforeGenerateData( );
88 this->m_ActualFunction = 0;
91 // -------------------------------------------------------------------------
92 template< class V, class R, class VV, class VC, class B >
93 void fpa::Base::IncrementalRegionGrow< V, R, VV, VC, B >::
97 this->Superclass::_AfterLoop( );
100 this->_QueueClear( );
101 while( !( this->m_AuxiliaryQueue.empty( ) ) )
104 _TNode node = this->m_AuxiliaryQueue.front( );
105 this->m_AuxiliaryQueue.pop( );
106 this->_QueuePush( node );
109 typename _TMarks::iterator mIt = this->m_Marks.find( node.Vertex );
110 if( mIt != this->m_Marks.end( ) )
111 this->m_Marks.erase( mIt );
115 // Move to next function
116 this->m_ActualFunction++;
120 // -------------------------------------------------------------------------
121 template< class V, class R, class VV, class VC, class B >
122 void fpa::Base::IncrementalRegionGrow< V, R, VV, VC, B >::
125 while( this->m_ActualFunction < this->m_Functions.size( ) )
126 this->Superclass::_Loop( );
129 // -------------------------------------------------------------------------
130 template< class V, class R, class VV, class VC, class B >
131 bool fpa::Base::IncrementalRegionGrow< V, R, VV, VC, B >::
132 _CheckMembership( const TVertex& v ) const
136 if( this->m_ActualFunction < this->m_Functions.size( ) )
139 this->m_Functions[ this->m_ActualFunction ]->Evaluate( v );
141 this->m_AuxiliaryQueue.push( n );
143 this->m_Volumes[ this->m_ActualFunction ]++;
152 #endif // __FPA__BASE__INCREMENTALREGIONGROW__HXX__