Coverage Report

Created: 2026-07-25 06:50

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/gdal/gcore/gdal_maskbands.h
Line
Count
Source
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
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
    bool IsMaskBand() const override
52
0
    {
53
0
        return true;
54
0
    }
55
56
    GDALMaskValueRange GetMaskValueRange() const override
57
0
    {
58
0
        return GMVR_0_AND_255_ONLY;
59
0
    }
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
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
    bool IsMaskBand() const override
96
0
    {
97
0
        return true;
98
0
    }
99
100
    GDALMaskValueRange GetMaskValueRange() const override
101
0
    {
102
0
        return GMVR_0_AND_255_ONLY;
103
0
    }
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
    bool IsMaskBand() const override
129
0
    {
130
0
        return true;
131
0
    }
132
133
    GDALMaskValueRange GetMaskValueRange() const override
134
0
    {
135
0
        return GMVR_0_AND_255_ONLY;
136
0
    }
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
    bool IsMaskBand() const override
164
0
    {
165
0
        return true;
166
0
    }
167
};
168
169
//! @endcond
170
171
#endif