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 >
 
A generic template matrix.
 
unsigned int m_getNextSegment_line
 
SegmenterSegmentsBlock::SegmentIdDataType m_nextUnusedSegmentIdx
The next unused segment index.
 
unsigned int m_featuresNumber
The number of features for each created segment.
 
bool initialize(const SegmenterSegmentsBlock::SegmentIdDataType segsNumber, const unsigned int featuresNumber)
Pool initialization.
 
void clear()
Clear all stored data.
 
Matrix< FeatureDataTypeT > m_segmentsFeatures
Internal stored segment features.
 
~SegmenterRegionGrowingSegmentsPool()
 
SegmenterSegmentsBlock::SegmentIdDataType getSegmentsNumber() const
Return the current allocated segments number.
 
SegmenterSegmentsBlock::SegmentIdDataType m_segsNumber
The number of segments allocated segments.
 
SegmenterRegionGrowingSegmentsPool()
 
SegmenterRegionGrowingSegment< FeatureDataTypeT > * getNextSegment()
Retrive a stored segment.
 
Matrix< SegmenterRegionGrowingSegment< FeatureDataTypeT > > m_segments
Internal stored segments.
 
Matrix< SegmenterRegionGrowingSegment< FeatureDataTypeT > > & getSegsMatrix()
Return a reference to the internal segments matrix.
 
void resetUseCounter()
Reset the segments use counter.
 
unsigned int m_getNextSegment_col
 
unsigned int SegmentIdDataType
 
Proxy configuration file for TerraView (see terraview_config.h).