Coverage Report

Created: 2026-09-26 08:22

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/gdal/ogr/ogrsf_frmts/s57/ogr_s57.h
Line
Count
Source
1
/******************************************************************************
2
 *
3
 * Project:  S-57 Translator
4
 * Purpose:  Declarations for classes binding S57 support onto OGRLayer,
5
 *           OGRDataSource and OGRDriver.  See also s57.h.
6
 * Author:   Frank Warmerdam, warmerdam@pobox.com
7
 *
8
 ******************************************************************************
9
 * Copyright (c) 1999, Frank Warmerdam
10
 *
11
 * SPDX-License-Identifier: MIT
12
 ****************************************************************************/
13
14
#ifndef OGR_S57_H_INCLUDED
15
#define OGR_S57_H_INCLUDED
16
17
#include "ogrsf_frmts.h"
18
#include "s57.h"
19
20
class OGRS57DataSource;
21
22
/************************************************************************/
23
/*                             OGRS57Layer                              */
24
/*                                                                      */
25
/*      Represents all features of a particular S57 object class.       */
26
/************************************************************************/
27
28
class OGRS57Layer final : public OGRLayer
29
{
30
    OGRS57DataSource *poDS;
31
32
    OGRFeatureDefn *poFeatureDefn;
33
34
    int nCurrentModule;
35
    int nRCNM;
36
    int nOBJL;
37
    int nNextFEIndex;
38
    int nFeatureCount;
39
40
  public:
41
    OGRS57Layer(OGRS57DataSource *poDS, OGRFeatureDefn *,
42
                int nFeatureCount = -1, int nOBJL = -1);
43
    ~OGRS57Layer() override;
44
45
    void ResetReading() override;
46
    OGRFeature *GetNextFeature() override;
47
    OGRFeature *GetNextUnfilteredFeature();
48
    OGRFeature *GetFeature(GIntBig nFeatureId) override;
49
50
    GIntBig GetFeatureCount(int bForce = TRUE) override;
51
    OGRErr IGetExtent(int iGeomField, OGREnvelope *psExtent,
52
                      bool bForce) override;
53
54
    const OGRFeatureDefn *GetLayerDefn() const override
55
294
    {
56
294
        return poFeatureDefn;
57
294
    }
58
59
    OGRErr ICreateFeature(OGRFeature *poFeature) override;
60
    bool TestCapability(const char *) const override;
61
};
62
63
/************************************************************************/
64
/*                           OGRS57DataSource                           */
65
/************************************************************************/
66
67
class OGRS57DataSource final : public GDALDataset
68
{
69
    int nLayers;
70
    OGRS57Layer **papoLayers;
71
72
    OGRSpatialReference *poSpatialRef;
73
74
    char **papszOptions;
75
76
    int nModules;
77
    S57Reader **papoModules;
78
79
    S57Writer *poWriter;
80
81
    S57ClassContentExplorer *poClassContentExplorer;
82
83
    bool bExtentsSet;
84
    OGREnvelope oExtents;
85
86
    CPL_DISALLOW_COPY_ASSIGN(OGRS57DataSource)
87
88
  public:
89
    explicit OGRS57DataSource(CSLConstList papszOpenOptions = nullptr);
90
    ~OGRS57DataSource() override;
91
92
    void SetOptionList(char **);
93
    const char *GetOption(const char *);
94
95
    int Open(const char *pszName);
96
    int Create(const char *pszName, CSLConstList papszOptions);
97
98
    int GetLayerCount() const override
99
0
    {
100
0
        return nLayers;
101
0
    }
102
103
    using GDALDataset::GetLayer;
104
    const OGRLayer *GetLayer(int) const override;
105
    void AddLayer(OGRS57Layer *);
106
    bool TestCapability(const char *) const override;
107
108
    const OGRSpatialReference *DSGetSpatialRef() const
109
0
    {
110
0
        return poSpatialRef;
111
0
    }
112
113
    int GetModuleCount()
114
0
    {
115
0
        return nModules;
116
0
    }
117
118
    S57Reader *GetModule(int);
119
120
    S57Writer *GetWriter()
121
0
    {
122
0
        return poWriter;
123
0
    }
124
125
    OGRErr GetDSExtent(OGREnvelope *psExtent, int bForce = TRUE);
126
};
127
128
/************************************************************************/
129
/*                             OGRS57Driver                             */
130
/************************************************************************/
131
132
class OGRS57Driver final : public GDALDriver
133
{
134
    static S57ClassRegistrar *poRegistrar;
135
136
  public:
137
    OGRS57Driver();
138
    ~OGRS57Driver() override;
139
140
    static GDALDataset *Open(GDALOpenInfo *poOpenInfo);
141
    static GDALDataset *Create(const char *pszName, int nBands, int nXSize,
142
                               int nYSize, GDALDataType eDT,
143
                               CSLConstList papszOptions);
144
145
    static S57ClassRegistrar *GetS57Registrar();
146
};
147
148
#endif /* ndef OGR_S57_H_INCLUDED */