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 329098 : 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,
64 : CSLConstList papszOptions) override;
65 : };
66 :
67 : /* ******************************************************************** */
68 : /* GDALNoDataMaskBand */
69 : /* ******************************************************************** */
70 :
71 2704 : class CPL_DLL GDALNoDataMaskBand final : public GDALRasterBand
72 : {
73 : friend class GDALRasterBand;
74 : double m_dfNoDataValue = 0;
75 : int64_t m_nNoDataValueInt64 = 0;
76 : uint64_t m_nNoDataValueUInt64 = 0;
77 : GDALRasterBand *m_poParent = nullptr;
78 :
79 : CPL_DISALLOW_COPY_ASSIGN(GDALNoDataMaskBand)
80 :
81 : protected:
82 : CPLErr IReadBlock(int, int, void *) override;
83 : CPLErr IRasterIO(GDALRWFlag, int, int, int, int, void *, int, int,
84 : GDALDataType, GSpacing, GSpacing,
85 : GDALRasterIOExtraArg *psExtraArg) override;
86 :
87 : bool
88 : EmitErrorMessageIfWriteNotSupported(const char *pszCaller) const override;
89 :
90 : public:
91 : explicit GDALNoDataMaskBand(GDALRasterBand *);
92 : explicit GDALNoDataMaskBand(GDALRasterBand *, double dfNoDataValue);
93 : ~GDALNoDataMaskBand() override;
94 :
95 1 : bool IsMaskBand() const override
96 : {
97 1 : return true;
98 : }
99 :
100 0 : GDALMaskValueRange GetMaskValueRange() const override
101 : {
102 0 : return GMVR_0_AND_255_ONLY;
103 : }
104 :
105 : static bool IsNoDataInRange(double dfNoDataValue, GDALDataType eDataType);
106 : };
107 :
108 : /* ******************************************************************** */
109 : /* GDALNoDataValuesMaskBand */
110 : /* ******************************************************************** */
111 :
112 : class CPL_DLL GDALNoDataValuesMaskBand final : public GDALRasterBand
113 : {
114 : double *padfNodataValues;
115 :
116 : CPL_DISALLOW_COPY_ASSIGN(GDALNoDataValuesMaskBand)
117 :
118 : protected:
119 : CPLErr IReadBlock(int, int, void *) override;
120 :
121 : bool
122 : EmitErrorMessageIfWriteNotSupported(const char *pszCaller) const override;
123 :
124 : public:
125 : explicit GDALNoDataValuesMaskBand(GDALDataset *);
126 : ~GDALNoDataValuesMaskBand() override;
127 :
128 0 : bool IsMaskBand() const override
129 : {
130 0 : return true;
131 : }
132 :
133 0 : GDALMaskValueRange GetMaskValueRange() const override
134 : {
135 0 : return GMVR_0_AND_255_ONLY;
136 : }
137 : };
138 :
139 : /* ******************************************************************** */
140 : /* GDALRescaledAlphaBand */
141 : /* ******************************************************************** */
142 :
143 : class GDALRescaledAlphaBand final : public GDALRasterBand
144 : {
145 : GDALRasterBand *poParent;
146 : void *pTemp;
147 :
148 : CPL_DISALLOW_COPY_ASSIGN(GDALRescaledAlphaBand)
149 :
150 : protected:
151 : CPLErr IReadBlock(int, int, void *) override;
152 : CPLErr IRasterIO(GDALRWFlag, int, int, int, int, void *, int, int,
153 : GDALDataType, GSpacing, GSpacing,
154 : GDALRasterIOExtraArg *psExtraArg) override;
155 :
156 : bool
157 : EmitErrorMessageIfWriteNotSupported(const char *pszCaller) const override;
158 :
159 : public:
160 : explicit GDALRescaledAlphaBand(GDALRasterBand *);
161 : ~GDALRescaledAlphaBand() override;
162 :
163 0 : bool IsMaskBand() const override
164 : {
165 0 : return true;
166 : }
167 : };
168 :
169 : //! @endcond
170 :
171 : #endif
|