Coverage Report

Created: 2026-02-14 09:00

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/gdal/frmts/kmlsuperoverlay/kmlsuperoverlaydataset.h
Line
Count
Source
1
/******************************************************************************
2
 *
3
 * Project:  KmlSuperOverlay
4
 * Purpose:  Implements write support for KML superoverlay - KMZ.
5
 * Author:   Harsh Govind, harsh.govind@spadac.com
6
 *
7
 ******************************************************************************
8
 * Copyright (c) 2010, SPADAC Inc. <harsh.govind@spadac.com>
9
 * Copyright (c) 2012, Even Rouault <even dot rouault at spatialys.com>
10
 *
11
 * SPDX-License-Identifier: MIT
12
 ****************************************************************************/
13
14
#ifndef KMLSUPEROVERLAYDATASET_H_INCLUDED
15
#define KMLSUPEROVERLAYDATASET_H_INCLUDED
16
17
#include <array>
18
#include <map>
19
20
#include "cpl_minixml.h"
21
#include "gdal_pam.h"
22
#include "gdal_priv.h"
23
24
/************************************************************************/
25
/*                      KmlSuperOverlayReadDataset                      */
26
/************************************************************************/
27
class KmlSuperOverlayRasterBand;
28
class KmlSuperOverlayReadDataset;
29
30
class LinkedDataset;
31
32
class LinkedDataset
33
{
34
  public:
35
    KmlSuperOverlayReadDataset *poDS = nullptr;
36
    LinkedDataset *psPrev = nullptr;
37
    LinkedDataset *psNext = nullptr;
38
    CPLString osSubFilename{};
39
40
0
    LinkedDataset() = default;
41
42
  private:
43
    LinkedDataset(const LinkedDataset &) = delete;
44
    LinkedDataset &operator=(const LinkedDataset &) = delete;
45
};
46
47
class KmlSuperOverlayReadDataset final : public GDALDataset
48
{
49
    friend class KmlSuperOverlayRasterBand;
50
51
    OGRSpatialReference m_oSRS{};
52
    int nFactor = 1;
53
    CPLString osFilename{};
54
    CPLXMLNode *psRoot = nullptr;
55
    CPLXMLNode *psDocument = nullptr;
56
    std::unique_ptr<GDALDataset> poDSIcon{};
57
    GDALGeoTransform m_gt{};
58
59
    std::vector<std::unique_ptr<KmlSuperOverlayReadDataset>> m_apoOverviewDS{};
60
    bool bIsOvr = false;
61
62
    KmlSuperOverlayReadDataset *poParent = nullptr;
63
64
    std::map<CPLString, LinkedDataset *> oMapChildren{};
65
    LinkedDataset *psFirstLink = nullptr;
66
    LinkedDataset *psLastLink = nullptr;
67
68
    KmlSuperOverlayReadDataset(const KmlSuperOverlayReadDataset &) = delete;
69
    KmlSuperOverlayReadDataset &
70
    operator=(const KmlSuperOverlayReadDataset &) = delete;
71
72
  protected:
73
    int CloseDependentDatasets() override;
74
75
  public:
76
    KmlSuperOverlayReadDataset();
77
    ~KmlSuperOverlayReadDataset() override;
78
79
    static int Identify(GDALOpenInfo *);
80
    static GDALDataset *Open(const char *pszFilename,
81
                             KmlSuperOverlayReadDataset *poParent = nullptr,
82
                             int nRec = 0);
83
    static GDALDataset *Open(GDALOpenInfo *);
84
85
    static const int KMLSO_ContainsOpaquePixels = 0x1;
86
    static const int KMLSO_ContainsTransparentPixels = 0x2;
87
    static const int KMLSO_ContainsPartiallyTransparentPixels = 0x4;
88
89
    static int DetectTransparency(int rxsize, int rysize, int rx, int ry,
90
                                  int dxsize, int dysize, GDALDataset *poSrcDs);
91
92
    CPLErr GetGeoTransform(GDALGeoTransform &gt) const override;
93
    const OGRSpatialReference *GetSpatialRef() const override;
94
95
    CPLErr IRasterIO(GDALRWFlag eRWFlag, int nXOff, int nYOff, int nXSize,
96
                     int nYSize, void *pData, int nBufXSize, int nBufYSize,
97
                     GDALDataType eBufType, int nBandCount,
98
                     BANDMAP_TYPE panBandMap, GSpacing nPixelSpace,
99
                     GSpacing nLineSpace, GSpacing nBandSpace,
100
                     GDALRasterIOExtraArg *psExtraArg) override;
101
};
102
103
/************************************************************************/
104
/*                      KmlSuperOverlayRasterBand                       */
105
/************************************************************************/
106
107
class KmlSuperOverlayRasterBand final : public GDALRasterBand
108
{
109
  public:
110
    KmlSuperOverlayRasterBand(KmlSuperOverlayReadDataset *poDS, int nBand);
111
112
  protected:
113
    CPLErr IReadBlock(int, int, void *) override;
114
    CPLErr IRasterIO(GDALRWFlag, int, int, int, int, void *, int, int,
115
                     GDALDataType, GSpacing nPixelSpace, GSpacing nLineSpace,
116
                     GDALRasterIOExtraArg *psExtraArg) override;
117
    GDALColorInterp GetColorInterpretation() override;
118
119
    int GetOverviewCount() override;
120
    GDALRasterBand *GetOverview(int) override;
121
};
122
123
#endif /* ndef KMLSUPEROVERLAYDATASET_H_INCLUDED */