GDAL
ogrsf_frmts.h
Go to the documentation of this file.
1/******************************************************************************
2 * $Id$
3 *
4 * Project: OpenGIS Simple Features Reference Implementation
5 * Purpose: Classes related to format registration, and file opening.
6 * Author: Frank Warmerdam, warmerda@home.com
7 *
8 ******************************************************************************
9 * Copyright (c) 1999, Les Technologies SoftMap Inc.
10 * Copyright (c) 2007-2014, Even Rouault <even dot rouault at spatialys.com>
11 *
12 * Permission is hereby granted, free of charge, to any person obtaining a
13 * copy of this software and associated documentation files (the "Software"),
14 * to deal in the Software without restriction, including without limitation
15 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
16 * and/or sell copies of the Software, and to permit persons to whom the
17 * Software is furnished to do so, subject to the following conditions:
18 *
19 * The above copyright notice and this permission notice shall be included
20 * in all copies or substantial portions of the Software.
21 *
22 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
23 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
24 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
25 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
26 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
27 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
28 * DEALINGS IN THE SOFTWARE.
29 ****************************************************************************/
30
31#ifndef OGRSF_FRMTS_H_INCLUDED
32#define OGRSF_FRMTS_H_INCLUDED
33
34#include "cpl_progress.h"
35#include "ogr_feature.h"
36#include "ogr_featurestyle.h"
37#include "gdal_priv.h"
38
39#include <memory>
40
48#if !defined(GDAL_COMPILATION) && !defined(SUPPRESS_DEPRECATION_WARNINGS)
49#define OGR_DEPRECATED(x) CPL_WARN_DEPRECATED(x)
50#else
51#define OGR_DEPRECATED(x)
52#endif
54
55class OGRLayerAttrIndex;
56class OGRSFDriver;
57
58struct ArrowArrayStream;
59
60/************************************************************************/
61/* OGRLayer */
62/************************************************************************/
63
69/* Note: any virtual method added to this class must also be added in the */
70/* OGRLayerDecorator and OGRMutexedLayer classes. */
71
72class CPL_DLL OGRLayer : public GDALMajorObject
73{
74 private:
75 struct Private;
76 std::unique_ptr<Private> m_poPrivate;
77
78 void ConvertGeomsIfNecessary(OGRFeature *poFeature);
79
80 class CPL_DLL FeatureIterator
81 {
82 struct Private;
83 std::unique_ptr<Private> m_poPrivate;
84
85 public:
86 FeatureIterator(OGRLayer *poLayer, bool bStart);
87 FeatureIterator(
88 FeatureIterator &&oOther) noexcept; // declared but not defined.
89 // Needed for gcc 5.4 at least
90 ~FeatureIterator();
91 OGRFeatureUniquePtr &operator*();
92 FeatureIterator &operator++();
93 bool operator!=(const FeatureIterator &it) const;
94 };
95
96 friend inline FeatureIterator begin(OGRLayer *poLayer);
97 friend inline FeatureIterator end(OGRLayer *poLayer);
98
100
101 protected:
103 int m_bFilterIsEnvelope;
104 OGRGeometry *m_poFilterGeom;
105 OGRPreparedGeometry *m_pPreparedFilterGeom; /* m_poFilterGeom compiled as a
106 prepared geometry */
107 OGREnvelope m_sFilterEnvelope;
108 int m_iGeomFieldFilter; // specify the index on which the spatial
109 // filter is active.
110
111 int FilterGeometry(OGRGeometry *);
112 // int FilterGeometry( OGRGeometry *, OGREnvelope*
113 // psGeometryEnvelope);
114 int InstallFilter(OGRGeometry *);
115
116 OGRErr GetExtentInternal(int iGeomField, OGREnvelope *psExtent, int bForce);
118
119 virtual OGRErr ISetFeature(OGRFeature *poFeature) CPL_WARN_UNUSED_RESULT;
120 virtual OGRErr ICreateFeature(OGRFeature *poFeature) CPL_WARN_UNUSED_RESULT;
121 virtual OGRErr IUpsertFeature(OGRFeature *poFeature) CPL_WARN_UNUSED_RESULT;
122
124 CPLStringList m_aosArrowArrayStreamOptions{};
125 struct ArrowArrayStreamPrivateData
126 {
127 bool m_bArrowArrayStreamInProgress = false;
128 OGRLayer *m_poLayer = nullptr;
129 };
130 std::shared_ptr<ArrowArrayStreamPrivateData>
131 m_poSharedArrowArrayStreamPrivateData{};
132 struct ArrowArrayStreamPrivateDataSharedDataWrapper
133 {
134 std::shared_ptr<ArrowArrayStreamPrivateData> poShared{};
135 };
137
138 friend class OGRArrowArrayHelper;
139 static void ReleaseArray(struct ArrowArray *array);
140 static void ReleaseSchema(struct ArrowSchema *schema);
141 static void ReleaseStream(struct ArrowArrayStream *stream);
142 virtual int GetArrowSchema(struct ArrowArrayStream *,
143 struct ArrowSchema *out_schema);
144 virtual int GetNextArrowArray(struct ArrowArrayStream *,
145 struct ArrowArray *out_array);
146 static int StaticGetArrowSchema(struct ArrowArrayStream *,
147 struct ArrowSchema *out_schema);
148 static int StaticGetNextArrowArray(struct ArrowArrayStream *,
149 struct ArrowArray *out_array);
150 static const char *GetLastErrorArrowArrayStream(struct ArrowArrayStream *);
151
152 public:
153 OGRLayer();
154 virtual ~OGRLayer();
155
166 FeatureIterator begin();
167
169 FeatureIterator end();
170
171 virtual OGRGeometry *GetSpatialFilter();
172 virtual void SetSpatialFilter(OGRGeometry *);
173 virtual void SetSpatialFilterRect(double dfMinX, double dfMinY,
174 double dfMaxX, double dfMaxY);
175
176 virtual void SetSpatialFilter(int iGeomField, OGRGeometry *);
177 virtual void SetSpatialFilterRect(int iGeomField, double dfMinX,
178 double dfMinY, double dfMaxX,
179 double dfMaxY);
180
181 virtual OGRErr SetAttributeFilter(const char *);
182
183 virtual void ResetReading() = 0;
185 virtual OGRErr SetNextByIndex(GIntBig nIndex);
186 virtual OGRFeature *GetFeature(GIntBig nFID) CPL_WARN_UNUSED_RESULT;
187
188 virtual GDALDataset *GetDataset();
189 virtual bool GetArrowStream(struct ArrowArrayStream *out_stream,
190 CSLConstList papszOptions = nullptr);
191
192 OGRErr SetFeature(OGRFeature *poFeature) CPL_WARN_UNUSED_RESULT;
193 OGRErr CreateFeature(OGRFeature *poFeature) CPL_WARN_UNUSED_RESULT;
194 OGRErr UpsertFeature(OGRFeature *poFeature) CPL_WARN_UNUSED_RESULT;
195
196 virtual OGRErr DeleteFeature(GIntBig nFID) CPL_WARN_UNUSED_RESULT;
197
198 virtual const char *GetName();
199 virtual OGRwkbGeometryType GetGeomType();
200 virtual OGRFeatureDefn *GetLayerDefn() = 0;
201 virtual int FindFieldIndex(const char *pszFieldName, int bExactMatch);
202
203 virtual OGRSpatialReference *GetSpatialRef();
204
205 virtual GIntBig GetFeatureCount(int bForce = TRUE);
206 virtual OGRErr GetExtent(OGREnvelope *psExtent,
207 int bForce = TRUE) CPL_WARN_UNUSED_RESULT;
208 virtual OGRErr GetExtent(int iGeomField, OGREnvelope *psExtent,
209 int bForce = TRUE) CPL_WARN_UNUSED_RESULT;
210
211 virtual int TestCapability(const char *) = 0;
212
213 virtual OGRErr Rename(const char *pszNewName) CPL_WARN_UNUSED_RESULT;
214
215 virtual OGRErr CreateField(OGRFieldDefn *poField, int bApproxOK = TRUE);
216 virtual OGRErr DeleteField(int iField);
217 virtual OGRErr ReorderFields(int *panMap);
218 virtual OGRErr AlterFieldDefn(int iField, OGRFieldDefn *poNewFieldDefn,
219 int nFlagsIn);
220 virtual OGRErr
221 AlterGeomFieldDefn(int iGeomField,
222 const OGRGeomFieldDefn *poNewGeomFieldDefn,
223 int nFlagsIn);
224
225 virtual OGRErr CreateGeomField(OGRGeomFieldDefn *poField,
226 int bApproxOK = TRUE);
227
228 virtual OGRErr SyncToDisk();
229
230 virtual OGRStyleTable *GetStyleTable();
231 virtual void SetStyleTableDirectly(OGRStyleTable *poStyleTable);
232
233 virtual void SetStyleTable(OGRStyleTable *poStyleTable);
234
235 virtual OGRErr StartTransaction() CPL_WARN_UNUSED_RESULT;
236 virtual OGRErr CommitTransaction() CPL_WARN_UNUSED_RESULT;
237 virtual OGRErr RollbackTransaction();
238
239 virtual const char *GetFIDColumn();
240 virtual const char *GetGeometryColumn();
241
242 virtual OGRErr SetIgnoredFields(const char **papszFields);
243
244 virtual OGRGeometryTypeCounter *
245 GetGeometryTypes(int iGeomField, int nFlagsGGT, int &nEntryCountOut,
246 GDALProgressFunc pfnProgress, void *pProgressData);
247
248 OGRErr Intersection(OGRLayer *pLayerMethod, OGRLayer *pLayerResult,
249 char **papszOptions = nullptr,
250 GDALProgressFunc pfnProgress = nullptr,
251 void *pProgressArg = nullptr);
252 OGRErr Union(OGRLayer *pLayerMethod, OGRLayer *pLayerResult,
253 char **papszOptions = nullptr,
254 GDALProgressFunc pfnProgress = nullptr,
255 void *pProgressArg = nullptr);
256 OGRErr SymDifference(OGRLayer *pLayerMethod, OGRLayer *pLayerResult,
257 char **papszOptions, GDALProgressFunc pfnProgress,
258 void *pProgressArg);
259 OGRErr Identity(OGRLayer *pLayerMethod, OGRLayer *pLayerResult,
260 char **papszOptions = nullptr,
261 GDALProgressFunc pfnProgress = nullptr,
262 void *pProgressArg = nullptr);
263 OGRErr Update(OGRLayer *pLayerMethod, OGRLayer *pLayerResult,
264 char **papszOptions = nullptr,
265 GDALProgressFunc pfnProgress = nullptr,
266 void *pProgressArg = nullptr);
267 OGRErr Clip(OGRLayer *pLayerMethod, OGRLayer *pLayerResult,
268 char **papszOptions = nullptr,
269 GDALProgressFunc pfnProgress = nullptr,
270 void *pProgressArg = nullptr);
271 OGRErr Erase(OGRLayer *pLayerMethod, OGRLayer *pLayerResult,
272 char **papszOptions = nullptr,
273 GDALProgressFunc pfnProgress = nullptr,
274 void *pProgressArg = nullptr);
275
276 int Reference();
277 int Dereference();
278 int GetRefCount() const;
280 GIntBig GetFeaturesRead();
282
283 /* non virtual : convenience wrapper for ReorderFields() */
284 OGRErr ReorderField(int iOldFieldPos, int iNewFieldPos);
285
287 int AttributeFilterEvaluationNeedsGeometry();
288
289 /* consider these private */
290 OGRErr InitializeIndexSupport(const char *);
291 OGRLayerAttrIndex *GetIndex()
292 {
293 return m_poAttrIndex;
294 }
295 int GetGeomFieldFilter() const
296 {
297 return m_iGeomFieldFilter;
298 }
299 const char *GetAttrQueryString() const
300 {
301 return m_pszAttrQueryString;
302 }
304
308 static inline OGRLayerH ToHandle(OGRLayer *poLayer)
309 {
310 return reinterpret_cast<OGRLayerH>(poLayer);
311 }
312
316 static inline OGRLayer *FromHandle(OGRLayerH hLayer)
317 {
318 return reinterpret_cast<OGRLayer *>(hLayer);
319 }
320
321 protected:
323 OGRStyleTable *m_poStyleTable;
324 OGRFeatureQuery *m_poAttrQuery;
325 char *m_pszAttrQueryString;
326 OGRLayerAttrIndex *m_poAttrIndex;
327
328 int m_nRefCount;
329
330 GIntBig m_nFeaturesRead;
332};
333
345inline OGRLayer::FeatureIterator begin(OGRLayer *poLayer)
346{
347 return poLayer->begin();
348}
349
353inline OGRLayer::FeatureIterator end(OGRLayer *poLayer)
354{
355 return poLayer->end();
356}
357
361using OGRLayerUniquePtr = std::unique_ptr<OGRLayer>;
362
363/************************************************************************/
364/* OGRGetNextFeatureThroughRaw */
365/************************************************************************/
366
372template <class BaseLayer> class OGRGetNextFeatureThroughRaw
373{
374 protected:
376
377 public:
381 {
382 const auto poThis = static_cast<BaseLayer *>(this);
383 while (true)
384 {
385 OGRFeature *poFeature = poThis->GetNextRawFeature();
386 if (poFeature == nullptr)
387 return nullptr;
388
389 if ((poThis->m_poFilterGeom == nullptr ||
390 poThis->FilterGeometry(poFeature->GetGeometryRef())) &&
391 (poThis->m_poAttrQuery == nullptr ||
392 poThis->m_poAttrQuery->Evaluate(poFeature)))
393 {
394 return poFeature;
395 }
396 else
397 delete poFeature;
398 }
399 }
400};
401
403#define DEFINE_GET_NEXT_FEATURE_THROUGH_RAW(BaseLayer) \
404 private: \
405 friend class OGRGetNextFeatureThroughRaw<BaseLayer>; \
406 \
407 public: \
408 OGRFeature *GetNextFeature() override \
409 { \
410 return OGRGetNextFeatureThroughRaw<BaseLayer>::GetNextFeature(); \
411 }
412
413/************************************************************************/
414/* OGRDataSource */
415/************************************************************************/
416
436class CPL_DLL OGRDataSource : public GDALDataset
437{
438 public:
441 virtual const char *GetName()
442 OGR_DEPRECATED("Use GDALDataset class instead") = 0;
443
444 static void DestroyDataSource(OGRDataSource *)
445 OGR_DEPRECATED("Use GDALDataset class instead");
447};
448
449/************************************************************************/
450/* OGRSFDriver */
451/************************************************************************/
452
471class CPL_DLL OGRSFDriver : public GDALDriver
472{
473 public:
475 virtual ~OGRSFDriver();
476
477 virtual const char *GetName()
478 OGR_DEPRECATED("Use GDALDriver class instead") = 0;
479
480 virtual OGRDataSource *Open(const char *pszName, int bUpdate = FALSE)
481 OGR_DEPRECATED("Use GDALDriver class instead") = 0;
482
483 virtual int TestCapability(const char *pszCap)
484 OGR_DEPRECATED("Use GDALDriver class instead") = 0;
485
486 virtual OGRDataSource *CreateDataSource(const char *pszName,
487 char ** = nullptr)
488 OGR_DEPRECATED("Use GDALDriver class instead");
489 virtual OGRErr DeleteDataSource(const char *pszName)
490 OGR_DEPRECATED("Use GDALDriver class instead");
492};
493
494/************************************************************************/
495/* OGRSFDriverRegistrar */
496/************************************************************************/
497
512{
513
516
517 static GDALDataset *OpenWithDriverArg(GDALDriver *poDriver,
518 GDALOpenInfo *poOpenInfo);
519 static GDALDataset *CreateVectorOnly(GDALDriver *poDriver,
520 const char *pszName,
521 char **papszOptions);
522 static CPLErr DeleteDataSource(GDALDriver *poDriver, const char *pszName);
523
524 public:
526 static OGRSFDriverRegistrar *GetRegistrar()
527 OGR_DEPRECATED("Use GDALDriverManager class instead");
528
529 // cppcheck-suppress functionStatic
530 void RegisterDriver(OGRSFDriver *poDriver)
531 OGR_DEPRECATED("Use GDALDriverManager class instead");
532
533 // cppcheck-suppress functionStatic
534 int GetDriverCount(void)
535 OGR_DEPRECATED("Use GDALDriverManager class instead");
536 // cppcheck-suppress functionStatic
537 GDALDriver *GetDriver(int iDriver)
538 OGR_DEPRECATED("Use GDALDriverManager class instead");
539 // cppcheck-suppress functionStatic
540 GDALDriver *GetDriverByName(const char *)
541 OGR_DEPRECATED("Use GDALDriverManager class instead");
542
543 // cppcheck-suppress functionStatic
544 int GetOpenDSCount() OGR_DEPRECATED("Use GDALDriverManager class instead");
545 // cppcheck-suppress functionStatic
546 OGRDataSource *GetOpenDS(int)
547 OGR_DEPRECATED("Use GDALDriverManager class instead");
549};
550
551/* -------------------------------------------------------------------- */
552/* Various available registration methods. */
553/* -------------------------------------------------------------------- */
555
557void OGRRegisterAllInternal();
558
559void CPL_DLL RegisterOGRFileGDB();
560void CPL_DLL RegisterOGRShape();
561void CPL_DLL RegisterOGRNTF();
562void CPL_DLL RegisterOGRSDTS();
563void CPL_DLL RegisterOGRTiger();
564void CPL_DLL RegisterOGRS57();
565void CPL_DLL RegisterOGRTAB();
566void CPL_DLL RegisterOGRMIF();
567void CPL_DLL RegisterOGROGDI();
568void CPL_DLL RegisterOGRODBC();
569void CPL_DLL RegisterOGRWAsP();
570void CPL_DLL RegisterOGRPG();
571void CPL_DLL RegisterOGRMSSQLSpatial();
572void CPL_DLL RegisterOGRMySQL();
573void CPL_DLL RegisterOGROCI();
574void CPL_DLL RegisterOGRDGN();
575void CPL_DLL RegisterOGRGML();
576void CPL_DLL RegisterOGRLIBKML();
577void CPL_DLL RegisterOGRKML();
578void CPL_DLL RegisterOGRFlatGeobuf();
579void CPL_DLL RegisterOGRGeoJSON();
580void CPL_DLL RegisterOGRGeoJSONSeq();
581void CPL_DLL RegisterOGRESRIJSON();
582void CPL_DLL RegisterOGRTopoJSON();
583void CPL_DLL RegisterOGRAVCBin();
584void CPL_DLL RegisterOGRAVCE00();
585void CPL_DLL RegisterOGRMEM();
586void CPL_DLL RegisterOGRVRT();
587void CPL_DLL RegisterOGRSQLite();
588void CPL_DLL RegisterOGRCSV();
589void CPL_DLL RegisterOGRILI1();
590void CPL_DLL RegisterOGRILI2();
591void CPL_DLL RegisterOGRPGeo();
592void CPL_DLL RegisterOGRDXF();
593void CPL_DLL RegisterOGRCAD();
594void CPL_DLL RegisterOGRDWG();
595void CPL_DLL RegisterOGRDGNV8();
596void CPL_DLL RegisterOGRIDB();
597void CPL_DLL RegisterOGRGMT();
598void CPL_DLL RegisterOGRGPX();
599void CPL_DLL RegisterOGRGeoconcept();
600void CPL_DLL RegisterOGRNAS();
601void CPL_DLL RegisterOGRGeoRSS();
602void CPL_DLL RegisterOGRVFK();
603void CPL_DLL RegisterOGRPGDump();
604void CPL_DLL RegisterOGROSM();
605void CPL_DLL RegisterOGRGPSBabel();
606void CPL_DLL RegisterOGRPDS();
607void CPL_DLL RegisterOGRWFS();
608void CPL_DLL RegisterOGROAPIF();
609void CPL_DLL RegisterOGRSOSI();
610void CPL_DLL RegisterOGREDIGEO();
611void CPL_DLL RegisterOGRSVG();
612void CPL_DLL RegisterOGRIdrisi();
613void CPL_DLL RegisterOGRXLS();
614void CPL_DLL RegisterOGRODS();
615void CPL_DLL RegisterOGRXLSX();
616void CPL_DLL RegisterOGRElastic();
617void CPL_DLL RegisterOGRGeoPackage();
618void CPL_DLL RegisterOGRCarto();
619void CPL_DLL RegisterOGRAmigoCloud();
620void CPL_DLL RegisterOGRSXF();
621void CPL_DLL RegisterOGROpenFileGDB();
622void CPL_DLL RegisterOGRSelafin();
623void CPL_DLL RegisterOGRJML();
624void CPL_DLL RegisterOGRPLSCENES();
625void CPL_DLL RegisterOGRCSW();
626void CPL_DLL RegisterOGRMongoDBv3();
627void CPL_DLL RegisterOGRVDV();
628void CPL_DLL RegisterOGRGMLAS();
629void CPL_DLL RegisterOGRMVT();
630void CPL_DLL RegisterOGRNGW();
631void CPL_DLL RegisterOGRMapML();
632void CPL_DLL RegisterOGRLVBAG();
633void CPL_DLL RegisterOGRHANA();
634void CPL_DLL RegisterOGRParquet();
635void CPL_DLL RegisterOGRArrow();
636// @endcond
637
639
640#endif /* ndef OGRSF_FRMTS_H_INCLUDED */
String list class designed around our use of C "char**" string lists.
Definition cpl_string.h:438
A set of associated raster bands, usually from one file.
Definition gdal_priv.h:348
Format specific driver.
Definition gdal_priv.h:1641
Object with metadata.
Definition gdal_priv.h:138
Class for dataset open functions.
Definition gdal_priv.h:277
LEGACY class.
Definition ogrsf_frmts.h:437
Simple container for a bounding region (rectangle)
Definition ogr_core.h:58
Definition of a feature class or feature layer.
Definition ogr_feature.h:364
A simple feature, including geometry and attributes.
Definition ogr_feature.h:497
OGRGeometry * GetGeometryRef()
Fetch pointer to feature geometry.
Definition ogrfeature.cpp:712
Definition of an attribute of an OGRFeatureDefn.
Definition ogr_feature.h:104
Definition of a geometry field of an OGRFeatureDefn.
Definition ogr_feature.h:265
Abstract base class for all geometry classes.
Definition ogr_geometry.h:335
Template class offering a GetNextFeature() implementation relying on GetNextRawFeature()
Definition ogrsf_frmts.h:373
OGRFeature * GetNextFeature()
Implement OGRLayer::GetNextFeature(), relying on BaseLayer::GetNextRawFeature()
Definition ogrsf_frmts.h:380
This class represents a layer of simple features, with access methods.
Definition ogrsf_frmts.h:73
friend FeatureIterator begin(OGRLayer *poLayer)
Return begin of feature iterator.
Definition ogrsf_frmts.h:345
virtual OGRFeature * GetNextFeature()=0
Fetch the next available feature from this layer.
static OGRLayerH ToHandle(OGRLayer *poLayer)
Convert a OGRLayer* to a OGRLayerH.
Definition ogrsf_frmts.h:308
friend FeatureIterator end(OGRLayer *poLayer)
Return end of feature iterator.
Definition ogrsf_frmts.h:353
virtual void ResetReading()=0
Reset feature reading to start on the first feature.
static OGRLayer * FromHandle(OGRLayerH hLayer)
Convert a OGRLayerH to a OGRLayer*.
Definition ogrsf_frmts.h:316
LEGACY class.
Definition ogrsf_frmts.h:512
LEGACY class.
Definition ogrsf_frmts.h:472
This class represents an OpenGIS Spatial Reference System, and contains methods for converting betwee...
Definition ogr_spatialref.h:167
This class represents a style table.
Definition ogr_featurestyle.h:85
CPLErr
Error category.
Definition cpl_error.h:53
#define CPL_C_END
Macro to end a block of C symbols.
Definition cpl_port.h:317
#define CPL_C_START
Macro to start a block of C symbols.
Definition cpl_port.h:313
#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:1049
char ** CSLConstList
Type of a constant null-terminated list of nul terminated strings.
Definition cpl_port.h:1190
#define CPL_WARN_UNUSED_RESULT
Qualifier to warn when the return value of a function is not used.
Definition cpl_port.h:983
long long GIntBig
Large signed integer type (generally 64-bit integer type).
Definition cpl_port.h:233
C++ GDAL entry points.
void * OGRLayerH
Opaque type for a layer (OGRLayer)
Definition ogr_api.h:613
OGRwkbGeometryType
List of well known binary geometry types.
Definition ogr_core.h:407
int OGRErr
Type for a OGR error.
Definition ogr_core.h:378
Simple feature classes.
std::unique_ptr< OGRFeature, OGRFeatureUniquePtrDeleter > OGRFeatureUniquePtr
Unique pointer type for OGRFeature.
Definition ogr_feature.h:1106
Simple feature style classes.
std::unique_ptr< OGRLayer > OGRLayerUniquePtr
Unique pointer type for OGRLayer.
Definition ogrsf_frmts.h:361
OGRLayer::FeatureIterator begin(OGRLayer *poLayer)
Return begin of feature iterator.
Definition ogrsf_frmts.h:345
OGRLayer::FeatureIterator end(OGRLayer *poLayer)
Return end of feature iterator.
Definition ogrsf_frmts.h:353
Result item of OGR_L_GetGeometryTypes.
Definition ogr_api.h:627