CPLErr GDALHashSetBandBlockCache::UnreferenceBlock( GDALRasterBlock* poBlock ) { UnreferenceBlockBase(); CPLLockHolderOptionalLockD( hLock ); m_oSet.erase(poBlock); return CE_None; }
CPLErr GDALArrayBandBlockCache::UnreferenceBlock( GDALRasterBlock* poBlock ) { int nXBlockOff = poBlock->GetXOff(); int nYBlockOff = poBlock->GetYOff(); UnreferenceBlockBase(); /* -------------------------------------------------------------------- */ /* Simple case for single level caches. */ /* -------------------------------------------------------------------- */ if( !bSubBlockingActive ) { int nBlockIndex = nXBlockOff + nYBlockOff * poBand->nBlocksPerRow; u.papoBlocks[nBlockIndex] = NULL; } /* -------------------------------------------------------------------- */ /* Identify our subblock. */ /* -------------------------------------------------------------------- */ else { int nSubBlock = TO_SUBBLOCK(nXBlockOff) + TO_SUBBLOCK(nYBlockOff) * nSubBlocksPerRow; /* -------------------------------------------------------------------- */ /* Check within subblock. */ /* -------------------------------------------------------------------- */ GDALRasterBlock **papoSubBlockGrid = u.papapoBlocks[nSubBlock]; if( papoSubBlockGrid == NULL ) return CE_None; int nBlockInSubBlock = WITHIN_SUBBLOCK(nXBlockOff) + WITHIN_SUBBLOCK(nYBlockOff) * SUBBLOCK_SIZE; papoSubBlockGrid[nBlockInSubBlock] = NULL; } return CE_None; }