Line data Source code
1 : /******************************************************************************
2 : *
3 : * Name: gdal_maskbands.h
4 : * Project: GDAL Core
5 : * Purpose: Declaration of mask related subclasses of GDALRasterBand
6 : * Author: Frank Warmerdam, warmerdam@pobox.com
7 : *
8 : ******************************************************************************
9 : * Copyright (c) 1998, Frank Warmerdam
10 : * Copyright (c) 2007-2014, Even Rouault <even dot rouault at spatialys.com>
11 : *
12 : * SPDX-License-Identifier: MIT
13 : ****************************************************************************/
14 :
15 : #ifndef GDALMASKBANDS_H_INCLUDED
16 : #define GDALMASKBANDS_H_INCLUDED
17 :
18 : #include "cpl_port.h"
19 : #include "gdal_rasterband.h"
20 :
21 : #include <cstddef>
22 :
23 : //! @cond Doxygen_Suppress
24 : /* ******************************************************************** */
25 : /* GDALAllValidMaskBand */
26 : /* ******************************************************************** */
27 :
28 323844 : class CPL_DLL GDALAllValidMaskBand final : public GDALRasterBand
29 : {
30 : protected:
31 : CPLErr IReadBlock(int, int, void *) override;
32 :
33 : CPLErr IRasterIO(GDALRWFlag eRWFlag, int nXOff, int nYOff, int nXSize,
34 : int nYSize, void *pData, int nBufXSize, int nBufYSize,
35 : GDALDataType eBufType, GSpacing nPixelSpace,
36 : GSpacing nLineSpace,
37 : GDALRasterIOExtraArg *psExtraArg) override;
38 :
39 : bool
40 : EmitErrorMessageIfWriteNotSupported(const char *pszCaller) const override;
41 :
42 : CPL_DISALLOW_COPY_ASSIGN(GDALAllValidMaskBand)
43 :
44 : public:
45 : explicit GDALAllValidMaskBand(GDALRasterBand *);
46 : ~GDALAllValidMaskBand() override;
47 :
48 : GDALRasterBand *GetMaskBand() override;
49 : int GetMaskFlags() override;
50 :
51 1 : bool IsMaskBand() const override
52 : {
53 1 : return true;
54 : }
55 :
56 0 : GDALMaskValueRange GetMaskValueRange() const override
57 : {
58 0 : return GMVR_0_AND_255_ONLY;
59 : }
60 :
61 : CPLErr ComputeStatistics(int bApproxOK, double *pdfMin, double *pdfMax,
62 : double *pdfMean, double *pdfStdDev,
63 : GDALProgressFunc, void *pProgressData) override;
64 : };
65 :
66 : /* ******************************************************************** */
67 : /* GDALNoDataMaskBand */
68 : /* ******************************************************************** */
69 :
70 2268 : class CPL_DLL GDALNoDataMaskBand final : public GDALRasterBand
71 : {
72 : friend class GDALRasterBand;
73 : double m_dfNoDataValue = 0;
74 : int64_t m_nNoDataValueInt64 = 0;
75 : uint64_t m_nNoDataValueUInt64 = 0;
76 : GDALRasterBand *m_poParent = nullptr;
77 :
78 : CPL_DISALLOW_COPY_ASSIGN(GDALNoDataMaskBand)
79 :
80 : protected:
81 : CPLErr IReadBlock(int, int, void *) override;
82 : CPLErr IRasterIO(GDALRWFlag, int, int, int, int, void *, int, int,
83 : GDALDataType, GSpacing, GSpacing,
84 : GDALRasterIOExtraArg *psExtraArg) override;
85 :
86 : bool
87 : EmitErrorMessageIfWriteNotSupported(const char *pszCaller) const override;
88 :
89 : public:
90 : explicit GDALNoDataMaskBand(GDALRasterBand *);
91 : explicit GDALNoDataMaskBand(GDALRasterBand *, double dfNoDataValue);
92 : ~GDALNoDataMaskBand() override;
93 :
94 1 : bool IsMaskBand() const override
95 : {
96 1 : return true;
97 : }
98 :
99 0 : GDALMaskValueRange GetMaskValueRange() const override
100 : {
101 0 : return GMVR_0_AND_255_ONLY;
102 : }
103 :
104 : static bool IsNoDataInRange(double dfNoDataValue, GDALDataType eDataType);
105 : };
106 :
107 : /* ******************************************************************** */
108 : /* GDALNoDataValuesMaskBand */
109 : /* ******************************************************************** */
110 :
111 : class CPL_DLL GDALNoDataValuesMaskBand final : public GDALRasterBand
112 : {
113 : double *padfNodataValues;
114 :
115 : CPL_DISALLOW_COPY_ASSIGN(GDALNoDataValuesMaskBand)
116 :
117 : protected:
118 : CPLErr IReadBlock(int, int, void *) override;
119 :
120 : bool
121 : EmitErrorMessageIfWriteNotSupported(const char *pszCaller) const override;
122 :
123 : public:
124 : explicit GDALNoDataValuesMaskBand(GDALDataset *);
125 : ~GDALNoDataValuesMaskBand() override;
126 :
127 0 : bool IsMaskBand() const override
128 : {
129 0 : return true;
130 : }
131 :
132 0 : GDALMaskValueRange GetMaskValueRange() const override
133 : {
134 0 : return GMVR_0_AND_255_ONLY;
135 : }
136 : };
137 :
138 : /* ******************************************************************** */
139 : /* GDALRescaledAlphaBand */
140 : /* ******************************************************************** */
141 :
142 : class GDALRescaledAlphaBand final : public GDALRasterBand
143 : {
144 : GDALRasterBand *poParent;
145 : void *pTemp;
146 :
147 : CPL_DISALLOW_COPY_ASSIGN(GDALRescaledAlphaBand)
148 :
149 : protected:
150 : CPLErr IReadBlock(int, int, void *) override;
151 : CPLErr IRasterIO(GDALRWFlag, int, int, int, int, void *, int, int,
152 : GDALDataType, GSpacing, GSpacing,
153 : GDALRasterIOExtraArg *psExtraArg) override;
154 :
155 : bool
156 : EmitErrorMessageIfWriteNotSupported(const char *pszCaller) const override;
157 :
158 : public:
159 : explicit GDALRescaledAlphaBand(GDALRasterBand *);
160 : ~GDALRescaledAlphaBand() override;
161 :
162 0 : bool IsMaskBand() const override
163 : {
164 0 : return true;
165 : }
166 : };
167 :
168 : //! @endcond
169 :
170 : #endif
|