GDAL
gdal_driver.h
1/******************************************************************************
2 *
3 * Name: gdal_driver.h
4 * Project: GDAL Core
5 * Purpose: Declaration of GDALDriver class
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 GDALDRIVER_H_INCLUDED
16#define GDALDRIVER_H_INCLUDED
17
18#include "cpl_port.h"
19#include "gdal.h"
20#include "gdal_majorobject.h"
21
22#include <vector>
23
24class GDALAlgorithm;
25class GDALDataset;
26class GDALOpenInfo;
27
28/* ******************************************************************** */
29/* GDALIdentifyEnum */
30/* ******************************************************************** */
31
36typedef enum
37{
40 GDAL_IDENTIFY_UNKNOWN = -1,
42 GDAL_IDENTIFY_FALSE = 0,
44 GDAL_IDENTIFY_TRUE = 1
45} GDALIdentifyEnum;
46
47/* ******************************************************************** */
48/* GDALDriver */
49/* ******************************************************************** */
50
62class CPL_DLL GDALDriver : public GDALMajorObject
63{
64 public:
65 GDALDriver();
66 ~GDALDriver() override;
67
68 const char *GetMetadataItem(const char *pszName,
69 const char *pszDomain = "") override;
70
71 CPLErr SetMetadataItem(const char *pszName, const char *pszValue,
72 const char *pszDomain = "") override;
73
74 /* -------------------------------------------------------------------- */
75 /* Public C++ methods. */
76 /* -------------------------------------------------------------------- */
77 GDALDataset *Create(const char *pszName, int nXSize, int nYSize, int nBands,
78 GDALDataType eType,
80
82 CreateMultiDimensional(const char *pszName,
83 CSLConstList papszRootGroupOptions,
85
86 CPLErr Delete(const char *pszName);
87 CPLErr Delete(GDALDataset *poDS, CSLConstList papszFileList);
88 CPLErr Rename(const char *pszNewName, const char *pszOldName);
89 CPLErr CopyFiles(const char *pszNewName, const char *pszOldName);
90
91 GDALDataset *CreateCopy(const char *, GDALDataset *, int,
92 CSLConstList papszOptions,
93 GDALProgressFunc pfnProgress,
94 void *pProgressData) CPL_WARN_UNUSED_RESULT;
95
96 bool CanVectorTranslateFrom(const char *pszDestName,
97 GDALDataset *poSourceDS,
98 CSLConstList papszVectorTranslateArguments,
99 char ***ppapszFailureReasons);
100
107 bool HasOpenOption(const char *pszOpenOptionName) const;
108
115 bool HasLayerCreationOption(const char *pszOptionName) const;
116
118 VectorTranslateFrom(const char *pszDestName, GDALDataset *poSourceDS,
119 CSLConstList papszVectorTranslateArguments,
120 GDALProgressFunc pfnProgress,
121 void *pProgressData) CPL_WARN_UNUSED_RESULT;
122
123 /* -------------------------------------------------------------------- */
124 /* The following are semiprivate, not intended to be accessed */
125 /* by anyone but the formats instantiating and populating the */
126 /* drivers. */
127 /* -------------------------------------------------------------------- */
129
130 // Not aimed at being used outside of GDAL. Use GDALDataset::Open() instead
131 GDALDataset *Open(GDALOpenInfo *poOpenInfo, bool bSetOpenOptions);
132
133 typedef GDALDataset *(*OpenCallback)(GDALOpenInfo *);
134
135 OpenCallback pfnOpen = nullptr;
136
137 virtual OpenCallback GetOpenCallback()
138 {
139 return pfnOpen;
140 }
141
142 typedef GDALDataset *(*CreateCallback)(const char *pszName, int nXSize,
143 int nYSize, int nBands,
144 GDALDataType eType,
145 CSLConstList papszOptions);
146
147 CreateCallback pfnCreate = nullptr;
148
149 virtual CreateCallback GetCreateCallback()
150 {
151 return pfnCreate;
152 }
153
154 GDALDataset *(*pfnCreateEx)(GDALDriver *, const char *pszName, int nXSize,
155 int nYSize, int nBands, GDALDataType eType,
156 CSLConstList papszOptions) = nullptr;
157
158 typedef GDALDataset *(*CreateMultiDimensionalCallback)(
159 const char *pszName, CSLConstList papszRootGroupOptions,
160 CSLConstList papszOptions);
161
162 CreateMultiDimensionalCallback pfnCreateMultiDimensional = nullptr;
163
164 virtual CreateMultiDimensionalCallback GetCreateMultiDimensionalCallback()
165 {
166 return pfnCreateMultiDimensional;
167 }
168
169 typedef CPLErr (*DeleteCallback)(const char *pszName);
170 DeleteCallback pfnDelete = nullptr;
171
172 virtual DeleteCallback GetDeleteCallback()
173 {
174 return pfnDelete;
175 }
176
177 typedef GDALDataset *(*CreateCopyCallback)(const char *, GDALDataset *, int,
179 GDALProgressFunc pfnProgress,
180 void *pProgressData);
181
182 CreateCopyCallback pfnCreateCopy = nullptr;
183
184 virtual CreateCopyCallback GetCreateCopyCallback()
185 {
186 return pfnCreateCopy;
187 }
188
189 void *pDriverData = nullptr;
190
191 void (*pfnUnloadDriver)(GDALDriver *) = nullptr;
192
201 int (*pfnIdentify)(GDALOpenInfo *) = nullptr;
202 int (*pfnIdentifyEx)(GDALDriver *, GDALOpenInfo *) = nullptr;
203
204 typedef CPLErr (*RenameCallback)(const char *pszNewName,
205 const char *pszOldName);
206 RenameCallback pfnRename = nullptr;
207
208 virtual RenameCallback GetRenameCallback()
209 {
210 return pfnRename;
211 }
212
213 typedef CPLErr (*CopyFilesCallback)(const char *pszNewName,
214 const char *pszOldName);
215 CopyFilesCallback pfnCopyFiles = nullptr;
216
217 virtual CopyFilesCallback GetCopyFilesCallback()
218 {
219 return pfnCopyFiles;
220 }
221
222 // Used for legacy OGR drivers, and Python drivers
223 GDALDataset *(*pfnOpenWithDriverArg)(GDALDriver *,
224 GDALOpenInfo *) = nullptr;
225
226 /* For legacy OGR drivers */
227 GDALDataset *(*pfnCreateVectorOnly)(GDALDriver *, const char *pszName,
228 CSLConstList papszOptions) = nullptr;
229 CPLErr (*pfnDeleteDataSource)(GDALDriver *, const char *pszName) = nullptr;
230
235 bool (*pfnCanVectorTranslateFrom)(
236 const char *pszDestName, GDALDataset *poSourceDS,
237 CSLConstList papszVectorTranslateArguments,
238 char ***ppapszFailureReasons) = nullptr;
239
244 GDALDataset *(*pfnVectorTranslateFrom)(
245 const char *pszDestName, GDALDataset *poSourceDS,
246 CSLConstList papszVectorTranslateArguments,
247 GDALProgressFunc pfnProgress, void *pProgressData) = nullptr;
248
253 GDALSubdatasetInfo *(*pfnGetSubdatasetInfoFunc)(const char *pszFileName) =
254 nullptr;
255
256 typedef GDALAlgorithm *(*InstantiateAlgorithmCallback)(
257 const std::vector<std::string> &aosPath);
258 InstantiateAlgorithmCallback pfnInstantiateAlgorithm = nullptr;
259
260 virtual InstantiateAlgorithmCallback GetInstantiateAlgorithmCallback()
261 {
262 return pfnInstantiateAlgorithm;
263 }
264
269 InstantiateAlgorithm(const std::vector<std::string> &aosPath);
270
274 void DeclareAlgorithm(const std::vector<std::string> &aosPath);
275
279 void (*pfnClearCaches)(GDALDriver *) = nullptr;
280
282
283 /* -------------------------------------------------------------------- */
284 /* Helper methods. */
285 /* -------------------------------------------------------------------- */
287 GDALDataset *DefaultCreateCopy(const char *, GDALDataset *, int,
288 CSLConstList papszOptions,
289 GDALProgressFunc pfnProgress,
290 void *pProgressData) CPL_WARN_UNUSED_RESULT;
291
292 static CPLErr DefaultCreateCopyMultiDimensional(
293 GDALDataset *poSrcDS, GDALDataset *poDstDS, bool bStrict,
294 CSLConstList /*papszOptions*/, GDALProgressFunc pfnProgress,
295 void *pProgressData);
296
297 static CPLErr DefaultCopyMasks(GDALDataset *poSrcDS, GDALDataset *poDstDS,
298 int bStrict);
299 static CPLErr DefaultCopyMasks(GDALDataset *poSrcDS, GDALDataset *poDstDS,
300 int bStrict, CSLConstList papszOptions,
301 GDALProgressFunc pfnProgress,
302 void *pProgressData);
303
304 CPLErr QuietDeleteForCreateCopy(const char *pszFilename,
305 GDALDataset *poSrcDS);
306
308 static CPLErr QuietDelete(const char *pszName,
309 CSLConstList papszAllowedDrivers = nullptr);
310
312 static CPLErr DefaultRename(const char *pszNewName, const char *pszOldName);
313 static CPLErr DefaultCopyFiles(const char *pszNewName,
314 const char *pszOldName);
315 static void DefaultCopyMetadata(GDALDataset *poSrcDS, GDALDataset *poDstDS,
316 CSLConstList papszOptions,
317 CSLConstList papszExcludedDomains);
318
320
323 static inline GDALDriverH ToHandle(GDALDriver *poDriver)
324 {
325 return static_cast<GDALDriverH>(poDriver);
326 }
327
330 static inline GDALDriver *FromHandle(GDALDriverH hDriver)
331 {
332 return static_cast<GDALDriver *>(hDriver);
333 }
334
335 private:
337};
338
339// Macro used so that Identify and driver metadata methods in drivers built
340// as plugin can be duplicated in libgdal core and in the driver under different
341// names
342#ifdef PLUGIN_FILENAME
343#define PLUGIN_SYMBOL_NAME(x) GDAL_core_##x
344#else
345#define PLUGIN_SYMBOL_NAME(x) GDAL_driver_##x
346#endif
347
348#endif
GDAL algorithm.
Definition gdalalgorithm_cpp.h:2445
A set of associated raster bands, usually from one file.
Definition gdal_dataset.h:77
Format specific driver.
Definition gdal_driver.h:63
static GDALDriver * FromHandle(GDALDriverH hDriver)
Convert a GDALDriverH to a GDALDriver*.
Definition gdal_driver.h:330
static GDALDriverH ToHandle(GDALDriver *poDriver)
Convert a GDALDriver* to a GDALDriverH.
Definition gdal_driver.h:323
Object with metadata.
Definition gdal_majorobject.h:43
virtual CPLErr SetMetadataItem(const char *pszName, const char *pszValue, const char *pszDomain="")
Set single metadata item.
Definition gdalmajorobject.cpp:366
virtual const char * GetMetadataItem(const char *pszName, const char *pszDomain="")
Fetch single metadata item.
Definition gdalmajorobject.cpp:322
Class for dataset open functions.
Definition gdal_openinfo.h:30
CPLErr
Error category / error level.
Definition cpl_error.h:45
Core portability definitions for CPL.
#define CPL_DISALLOW_COPY_ASSIGN(ClassName)
Helper to remove the copy and assignment constructors so that the compiler will not generate the defa...
Definition cpl_port.h:1101
char ** CSLConstList
Type of a constant null-terminated list of nul terminated strings.
Definition cpl_port.h:1252
#define CPL_WARN_UNUSED_RESULT
Qualifier to warn when the return value of a function is not used.
Definition cpl_port.h:1035
Public (C callable) GDAL entry points.
GDALDataType
Definition gdal.h:48
void * GDALDriverH
Opaque type used for the C bindings of the C++ GDALDriver class.
Definition gdal_fwd.h:51
The GDALSubdatasetInfo abstract class provides methods to extract and manipulate subdataset informati...
Definition gdalsubdatasetinfo.h:27