Coverage Report

Created: 2025-11-16 06:25

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) override;
64
};
65
66
/* ******************************************************************** */
67
/*                         GDALNoDataMaskBand                           */
68
/* ******************************************************************** */
69
70
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
    bool IsMaskBand() const override
95
0
    {
96
0
        return true;
97
0
    }
98
99
    GDALMaskValueRange GetMaskValueRange() const override
100
0
    {
101
0
        return GMVR_0_AND_255_ONLY;
102
0
    }
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
    bool IsMaskBand() const override
128
0
    {
129
0
        return true;
130
0
    }
131
132
    GDALMaskValueRange GetMaskValueRange() const override
133
0
    {
134
0
        return GMVR_0_AND_255_ONLY;
135
0
    }
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
    bool IsMaskBand() const override
163
0
    {
164
0
        return true;
165
0
    }
166
};
167
168
//! @endcond
169
170
#endif