25 #ifndef __TERRALIB_RP_INTERNAL_SEGMENTERREGIONGROWINGSEGMENTSPOOL_H 
   26 #define __TERRALIB_RP_INTERNAL_SEGMENTERREGIONGROWINGSEGMENTSPOOL_H 
   33 #include <boost/noncopyable.hpp> 
   44     template< 
typename FeatureDataTypeT >
 
   61                        const unsigned int featuresNumber );            
 
  121     template< 
typename FeatureDataTypeT >
 
  125       m_featuresNumber = 0;
 
  126       m_nextUnusedSegmentIdx = 0;
 
  129     template< 
typename FeatureDataTypeT >
 
  135     template< 
typename FeatureDataTypeT >
 
  138       const unsigned int featuresNumber )
 
  140       if( ( segsNumber > m_segsNumber ) || ( featuresNumber != m_featuresNumber ) )
 
  146           unsigned int nCols = (
unsigned int)std::floor( std::sqrt( (
double)segsNumber ) );
 
  147           unsigned int nRows = (
unsigned int)std::ceil( ((
double)segsNumber) / 
 
  149           assert( ( nCols * nRows ) >= segsNumber );
 
  151           if( m_segments.reset( nRows, nCols, 
 
  157           m_segsNumber = segsNumber;
 
  161             if( m_segmentsFeatures.reset( nRows, nCols * featuresNumber, 
 
  168             m_featuresNumber = featuresNumber;
 
  170             unsigned int col = 0;
 
  171             for( 
unsigned int row = 0 ; row < nRows ; ++row )
 
  173               for( col = 0 ; col < nCols ; ++col )
 
  175                 m_segments[ row ][ col ].m_neighborSegments = 0;
 
  176                 m_segments[ row ][ col ].m_neighborSegmentsSize = 0;
 
  177                 m_segments[ row ][ col ].m_features = m_segmentsFeatures[ row ] + ( col * featuresNumber );
 
  178                 m_segments[ row ][ col ].m_featuresSize = featuresNumber;
 
  184             unsigned int col = 0;
 
  185             for( 
unsigned int row = 0 ; row < nRows ; ++row )
 
  187               for( col = 0 ; col < nCols ; ++col )
 
  189                 m_segments[ row ][ col ].m_neighborSegments = 0;
 
  190                 m_segments[ row ][ col ].m_neighborSegmentsSize = 0;
 
  191                 m_segments[ row ][ col ].m_features = 0;
 
  192                 m_segments[ row ][ col ].m_featuresSize = 0;
 
  207     template< 
typename FeatureDataTypeT >
 
  211       if( m_nextUnusedSegmentIdx < m_segsNumber )
 
  213         m_getNextSegment_line = m_nextUnusedSegmentIdx / m_segments.getColumnsNumber();
 
  214         m_getNextSegment_col = m_nextUnusedSegmentIdx - ( m_getNextSegment_line *
 
  215           m_segments.getColumnsNumber() );
 
  217         ++m_nextUnusedSegmentIdx;
 
  219         assert( m_getNextSegment_line < m_segments.getLinesNumber() );
 
  220         assert( m_getNextSegment_col < m_segments.getColumnsNumber() );
 
  222         return m_segments[ m_getNextSegment_line ] + m_getNextSegment_col;
 
  230     template< 
typename FeatureDataTypeT >
 
  233       unsigned int nRows = m_segments.getLinesNumber();
 
  234       unsigned int nCols = m_segments.getColumnsNumber();      
 
  236       unsigned int col = 0;
 
  237       for( 
unsigned int row = 0 ; row < nRows ; ++row )
 
  239         for( col = 0 ; col < nCols ; ++col )
 
  241           if( m_segments[ row ][ col ].m_neighborSegments )
 
  243             m_segments[ row ][ col ].removeAllNeighborSegmentsPtrs();
 
  249       m_featuresNumber = 0;
 
  250       m_nextUnusedSegmentIdx = 0;
 
  252       m_segmentsFeatures.reset();
 
  255     template< 
typename FeatureDataTypeT >
 
  258       m_nextUnusedSegmentIdx = 0;
 
  261     template< 
typename FeatureDataTypeT >
 
  270 #endif // __TERRALIB_RP_INTERNAL_SEGMENTERREGIONGROWINGSEGMENTSPOOL_H 
SegmenterRegionGrowingSegmentsPool()
bool initialize(const SegmenterSegmentsBlock::SegmentIdDataType segsNumber, const unsigned int featuresNumber)
Pool initialization. 
SegmenterSegmentsBlock::SegmentIdDataType m_segsNumber
The number of segments allocated segments. 
Matrix< SegmenterRegionGrowingSegment< FeatureDataTypeT > > & getSegsMatrix()
Return a reference to the internal segments matrix. 
SegmenterSegmentsBlock::SegmentIdDataType m_nextUnusedSegmentIdx
The next unused segment index. 
void resetUseCounter()
Reset the segments use counter. 
unsigned int SegmentIdDataType
~SegmenterRegionGrowingSegmentsPool()
void clear()
Clear all stored data. 
Matrix< SegmenterRegionGrowingSegment< FeatureDataTypeT > > m_segments
Internal stored segments. 
unsigned int m_featuresNumber
The number of features for each created segment. 
unsigned int m_getNextSegment_col
SegmenterRegionGrowingSegment< FeatureDataTypeT > * getNextSegment()
Retrive a stored segment. 
unsigned int m_getNextSegment_line
Configuration flags for the Raster Processing module of TerraLib. 
A generic template matrix. 
SegmenterSegmentsBlock::SegmentIdDataType getSegmentsNumber() const 
Return the current allocated segments number. 
Matrix< FeatureDataTypeT > m_segmentsFeatures
Internal stored segment features.