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.