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()
 
SegmenterSegmentsBlock::SegmentIdDataType getSegmentsNumber() const
Return the current allocated segments number. 
 
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. 
 
Matrix< FeatureDataTypeT > m_segmentsFeatures
Internal stored segment features.