26 #ifndef __TERRALIB_RASTER_INTERNAL_BANDITERATOR_H
27 #define __TERRALIB_RASTER_INTERNAL_BANDITERATOR_H
35 #include <boost/dynamic_bitset.hpp>
84 unsigned int getRow()
const;
341 : m_blkw(b->getProperty()->m_blkw),
342 m_blkh(b->getProperty()->m_blkh),
343 m_npxlsblk(m_blkw * m_blkh),
344 m_nblocksx(b->getProperty()->m_nblocksx),
345 m_nblocksy(b->getProperty()->m_nblocksy),
349 m_blksize(b->getBlockSize()),
364 : m_blkw(rhs.m_blkw),
366 m_npxlsblk(rhs.m_npxlsblk),
367 m_nblocksx(rhs.m_nblocksx),
368 m_nblocksy(rhs.m_nblocksy),
372 m_lastblksize(rhs.m_lastblksize),
373 m_blksize(rhs.m_blksize),
374 m_getBuff(rhs.m_getBuff),
375 m_getBuffI(rhs.m_getBuffI),
376 m_setBuff(rhs.m_setBuff),
377 m_setBuffI(rhs.m_setBuffI)
391 return m_blky * m_blkh + (m_i - (m_i % m_blkw)) / m_blkw;
396 return m_blkx * m_blkw + m_i % m_blkw;
410 if(m_blkx < m_nblocksx)
421 if(m_blky < m_nblocksy)
424 if((m_blkx == m_nblocksx - 1) && (m_blky == m_nblocksy - 1))
425 m_npxlsblk = m_lastblksize;
435 m_i = m_npxlsblk - 1;
446 m_blkx = m_nblocksx - 1;
479 return (m_blky != rhs.
m_blky);
509 this->m_getBuff(this->m_i, this->m_blk, &value);
518 this->m_getBuff(this->m_i, this->m_blk, &value);
548 m_band->read(this->m_blkx, this->m_blky, this->m_blk);
578 this->m_getBuff(this->m_i, this->m_blk, &value);
608 m_band->read(this->m_blkx, this->m_blky, this->m_blk);
616 m_currentpixelindex(0)
623 m_currentpixelindex(0)
630 m_mask.resize(m_masksize);
657 m_currentpixelindex++;
659 if (m_currentpixelindex >= m_masksize)
662 while (m_mask[m_currentpixelindex] == 0);
671 m_currentpixelindex--;
673 if (m_currentpixelindex < 0)
676 while (m_mask[m_currentpixelindex] == 0);
707 #endif // __TERRALIB_RASTER_INTERNAL_BANDITERATOR_H
te::rst::GetBufferValueFPtr m_getBuff
A pointer to a function that helps to extract a double or complex value from a specific buffer data t...
This class implements an iterator to "navigate" over a single band, with a spatial restriction given ...
unsigned int getRow() const
Returns the current row in iterator.
int m_nblocksy
The number of blocks in Y direction.
int m_blky
The position in Y of the current block.
te::rst::GetBufferValueFPtr m_getBuffI
A pointer to a function that helps to extract the imaginary part value from a specific buffer data ty...
It describes one band (or dimension) of a raster.
unsigned int getColumn() const
Returns the current column in iterator.
virtual void replaceBlock()=0
Replaces the current bufferized block values.
unsigned int getNumberOfColumns() const
Returns the raster number of columns.
const Band * m_band
The band from where to get the values.
int m_i
The actual position inside the block.
virtual const Band * getBand(std::size_t i) const =0
Returns the raster i-th band.
int m_nblocksy
The number of blocks in y.
bool operator!=(const AbstractBandIterator &rhs) const
Difference operator.
Band * m_band
The band from where to get the values.
te::rst::SetBufferValueFPtr m_setBuffI
A pointer to a function that helps to insert the imaginary part value into a specific buffer data typ...
void operator--()
Returns to the previous position.
BandIteratorWithMask & operator=(const BandIteratorWithMask &rhs)
Assignment operator.
ConstBandIterator()
Constructor.
void(* SetBufferValueFPtr)(int index, void *buffer, const double *value)
The type of function used to extract data from a buffer.
~AbstractBandIterator()
Destructor.
int m_blksize
The block size of the band.
This class implements an iterator to "navigate" over a single band (const).
static BandIterator begin(Band *b)
Returns an iterator referring to the first value of the band.
static ConstBandIterator begin(const Band *b)
Returns an iterator referring to the first value of the band.
Utility functions for dealing with raster data blocks.
boost::dynamic_bitset m_mask
The internal mask of bits, one bit per pixel.
This class implements an abstract iterator to "navigate" over a single band.
static BandIteratorWithMask end(Band *b, Raster *m)
Returns an iterator with the mask referring to after the end of the iterator.
void(* GetBufferValueFPtr)(int index, void *buffer, double *value)
The type of function used to extract data from a buffer.
int m_blkx
The position in X of the current block.
int m_blkw
The internal block width.
T operator*()
Returns the value in current position (column, row) from iterator.
BandProperty * getProperty()
Returns the band property.
An abstract class for raster data strucutures.
unsigned int getNumberOfRows() const
Returns the raster number of rows.
void replaceBlock()
Replaces the current bufferized block values.
TERASTEREXPORT void SetBlockFunctions(GetBufferValueFPtr *gb, GetBufferValueFPtr *gbi, SetBufferValueFPtr *sb, SetBufferValueFPtr *sbi, int type)
Sets the pointers to functions that helps to extract a double or complex value from a specific buffer...
int m_npxlsblk
The maximum number of pixels inside the block.
virtual Raster * getRaster() const =0
Returns the associated raster.
It gives access to values in one band (dimension) of a raster.
A raster band description.
const T operator*() const
Returns the value in current position (column, row) from iterator.
BandIterator()
Constructor.
int m_blkh
The internal block height.
AbstractBandIterator()
Constructor.
te::rst::SetBufferValueFPtr m_setBuff
A pointer to a function that helps to insert a double or complex value into a specific buffer data ty...
AbstractBandIterator & operator=(const AbstractBandIterator &rhs)
Assignment operator.
This class implements an iterator to "navigate" over a single band.
int m_lastblksize
The number of pixels inside the last block.
BandIterator & operator=(const BandIterator &rhs)
Assignment operator.
virtual const T operator*() const =0
Returns the value in current position (column, row) from iterator.
void replaceBlock()
Replaces the current bufferized block values.
virtual void operator++()
Advances to the next position.
unsigned int m_currentpixelindex
The index of the current pixel location.
static BandIteratorWithMask begin(Band *b, Raster *m)
Returns an iterator with the mask referring to the first value of the band.
int getType() const
It returns the data type of the elements in the band.
static BandIterator end(Band *b)
Returns an iterator referring to after the end of the iterator.
int m_nblocksx
The number of blocks in X direction.
ConstBandIterator & operator=(const ConstBandIterator &rhs)
Assignment operator.
BandIteratorWithMask()
Constructor.
void operator++()
Advances to the next position.
unsigned int m_masksize
The size of the mask (rows * columns of the mask raster).
static ConstBandIterator end(const Band *b)
Returns an iterator referring to after the end of the iterator.