Line data Source code
1 : /****************************************************************************** 2 : * 3 : * Project: GDAL Core 4 : * Purpose: Implementation of GDALAllValidMaskBand, a class implementing all 5 : * a default 'all valid' band mask. 6 : * Author: Frank Warmerdam, warmerdam@pobox.com 7 : * 8 : ****************************************************************************** 9 : * Copyright (c) 2007, Frank Warmerdam 10 : * 11 : * SPDX-License-Identifier: MIT 12 : ****************************************************************************/ 13 : 14 : #include "cpl_port.h" 15 : #include "gdal_priv.h" 16 : 17 : #include <cstring> 18 : 19 : #include "gdal.h" 20 : #include "cpl_error.h" 21 : 22 : //! @cond Doxygen_Suppress 23 : /************************************************************************/ 24 : /* GDALAllValidMaskBand() */ 25 : /************************************************************************/ 26 : 27 92202 : GDALAllValidMaskBand::GDALAllValidMaskBand(GDALRasterBand *poParent) 28 92202 : : GDALRasterBand(FALSE) 29 : { 30 92202 : poDS = nullptr; 31 92202 : nBand = 0; 32 : 33 92202 : nRasterXSize = poParent->GetXSize(); 34 92202 : nRasterYSize = poParent->GetYSize(); 35 : 36 92201 : eDataType = GDT_Byte; 37 92201 : poParent->GetBlockSize(&nBlockXSize, &nBlockYSize); 38 92201 : } 39 : 40 : /************************************************************************/ 41 : /* ~GDALAllValidMaskBand() */ 42 : /************************************************************************/ 43 : 44 : GDALAllValidMaskBand::~GDALAllValidMaskBand() = default; 45 : 46 : /************************************************************************/ 47 : /* IReadBlock() */ 48 : /************************************************************************/ 49 : 50 1 : CPLErr GDALAllValidMaskBand::IReadBlock(int /* nXBlockOff */, 51 : int /* nYBlockOff */, void *pImage) 52 : { 53 1 : memset(pImage, 255, static_cast<size_t>(nBlockXSize) * nBlockYSize); 54 : 55 1 : return CE_None; 56 : } 57 : 58 : /************************************************************************/ 59 : /* IRasterIO() */ 60 : /************************************************************************/ 61 : 62 27921 : CPLErr GDALAllValidMaskBand::IRasterIO(GDALRWFlag eRWFlag, int, int, int, int, 63 : void *pData, int nBufXSize, 64 : int nBufYSize, GDALDataType eBufType, 65 : GSpacing nPixelSpace, 66 : GSpacing nLineSpace, 67 : GDALRasterIOExtraArg *) 68 : { 69 27921 : if (eRWFlag != GF_Read) 70 : { 71 0 : return CE_Failure; 72 : } 73 : 74 27921 : GByte *pabyData = static_cast<GByte *>(pData); 75 27921 : GByte byVal = 255; 76 341802 : for (int iY = 0; iY < nBufYSize; ++iY) 77 : { 78 313842 : GDALCopyWords64(&byVal, GDT_Byte, 0, pabyData + iY * nLineSpace, 79 : eBufType, static_cast<int>(nPixelSpace), nBufXSize); 80 : } 81 : 82 27960 : return CE_None; 83 : } 84 : 85 : /************************************************************************/ 86 : /* GetMaskBand() */ 87 : /************************************************************************/ 88 : 89 135 : GDALRasterBand *GDALAllValidMaskBand::GetMaskBand() 90 : 91 : { 92 135 : return this; 93 : } 94 : 95 : /************************************************************************/ 96 : /* GetMaskFlags() */ 97 : /************************************************************************/ 98 : 99 7 : int GDALAllValidMaskBand::GetMaskFlags() 100 : 101 : { 102 7 : return GMF_ALL_VALID; 103 : } 104 : 105 : /************************************************************************/ 106 : /* ComputeStatistics() */ 107 : /************************************************************************/ 108 : 109 1 : CPLErr GDALAllValidMaskBand::ComputeStatistics( 110 : int /* bApproxOK */, double *pdfMin, double *pdfMax, double *pdfMean, 111 : double *pdfStdDev, GDALProgressFunc, void * /*pProgressData*/) 112 : { 113 1 : if (pdfMin) 114 1 : *pdfMin = 255.0; 115 1 : if (pdfMax) 116 1 : *pdfMax = 255.0; 117 1 : if (pdfMean) 118 1 : *pdfMean = 255.0; 119 1 : if (pdfStdDev) 120 1 : *pdfStdDev = 0.0; 121 1 : return CE_None; 122 : } 123 : 124 : //! @endcond