31 #include "../common/Translator.h"
75 const unsigned int blockXIndex,
const unsigned int blockYIndex,
80 if( bandIdx >= m_blocksUseCounters.size() )
83 throw Exception(
TE_TR(
"Inalid band index") );
85 if( blockYIndex >= m_blocksUseCounters[ bandIdx ].size() )
88 throw Exception(
TE_TR(
"Inalid block Y index") );
90 if( blockXIndex >= m_blocksUseCounters[ bandIdx ][ blockYIndex ].size() )
93 throw Exception(
TE_TR(
"Inalid block X index") );
100 while( m_blocksUseCounters[ bandIdx ][ blockYIndex ][ blockXIndex ] )
102 m_condVar.wait( m_mutex );
105 assert( m_blocksUseCounters[ bandIdx ][ blockYIndex ][ blockXIndex ] == 0 );
107 m_blocksUseCounters[ bandIdx ][ blockYIndex ][ blockXIndex ] = 1;
109 m_raster.getBand( bandIdx )->read( blockXIndex, blockYIndex, blkDataPtr );
117 ++( m_blocksUseCounters[ bandIdx ][ blockYIndex ][ blockXIndex ] );
119 m_raster.getBand( bandIdx )->read( blockXIndex, blockYIndex, blkDataPtr );
128 const unsigned int blockXIndex,
const unsigned int blockYIndex,
133 if( bandIdx >= m_blocksUseCounters.size() )
136 throw Exception(
TE_TR(
"Inalid band index") );
138 if( blockYIndex >= m_blocksUseCounters[ bandIdx ].size() )
141 throw Exception(
TE_TR(
"Inalid block Y index") );
143 if( blockXIndex >= m_blocksUseCounters[ bandIdx ][ blockYIndex ].size() )
146 throw Exception(
TE_TR(
"Inalid block X index") );
149 if( m_blocksUseCounters[ bandIdx ][ blockYIndex ][ blockXIndex ] )
154 m_raster.getBand( bandIdx )->write( blockXIndex, blockYIndex, blkDataPtr );
157 --( m_blocksUseCounters[ bandIdx ][ blockYIndex ][ blockXIndex ] );
162 m_condVar.notify_all();
It describes one band (or dimension) of a raster.
bool acquireBlock(const unsigned int bandIdx, const unsigned int blockXIndex, const unsigned int blockYIndex, void *blkDataPtr)
Acquire a raster data block.
int m_nblocksx
The number of blocks in x.
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.
#define TE_TR(message)
It marks a string in order to get translated.
te::common::AccessPolicy getAccessPolicy() const
Returns the raster access policy.
AccessPolicy
Supported data access policies (can be used as bitfield).
An exception class for the Raster module.
RasterSynchronizer(Raster &raster, const te::common::AccessPolicy policy)
Constructor.
An abstract class for raster data strucutures.
BandProperty * getProperty()
Returns the band property.
An access synchronizer to be used in SynchronizedRaster raster instances.
virtual std::size_t getNumberOfBands() const =0
Returns the number of bands (dimension of cells attribute values) in the raster.
It gives access to values in one band (dimension) of a raster.
te::common::AccessPolicy m_policy
The access policy used on the given input raster.
BlocksUseCounterT m_blocksUseCounters
blocks use counter.
bool releaseBlock(const unsigned int bandIdx, const unsigned int blockXIndex, const unsigned int blockYIndex, void *blkDataPtr)
Release a raster data block.