13#ifndef OGRLAYERPOOL_H_INCLUDED
14#define OGRLAYERPOOL_H_INCLUDED
22typedef OGRLayer *(*OpenLayerFunc)(
void *user_data);
23typedef void (*ReleaseLayerFunc)(
OGRLayer *,
void *user_data);
24typedef void (*FreeUserDataFunc)(
void *user_data);
32class CPL_DLL OGRAbstractProxiedLayer :
public OGRLayer
36 friend class OGRLayerPool;
38 OGRAbstractProxiedLayer
40 OGRAbstractProxiedLayer
46 virtual void CloseUnderlyingLayer() = 0;
49 explicit OGRAbstractProxiedLayer(OGRLayerPool *poPool);
50 ~OGRAbstractProxiedLayer()
override;
57class CPL_DLL OGRLayerPool
62 OGRAbstractProxiedLayer *poMRULayer;
63 OGRAbstractProxiedLayer
66 int nMaxSimultaneouslyOpened;
69 explicit OGRLayerPool(
int nMaxSimultaneouslyOpened = 100);
72 void SetLastUsedLayer(OGRAbstractProxiedLayer *poProxiedLayer);
73 void UnchainLayer(OGRAbstractProxiedLayer *poProxiedLayer);
75 int GetMaxSimultaneouslyOpened()
const
77 return nMaxSimultaneouslyOpened;
90class CPL_DLL OGRProxiedLayer :
public OGRAbstractProxiedLayer
94 OpenLayerFunc pfnOpenLayer;
95 ReleaseLayerFunc pfnReleaseLayer;
96 FreeUserDataFunc pfnFreeUserData;
98 mutable OGRLayer *poUnderlyingLayer;
99 mutable OGRFeatureDefn *poFeatureDefn;
100 mutable OGRSpatialReference *poSRS;
101 mutable std::recursive_mutex m_oMutex{};
103 int OpenUnderlyingLayer()
const;
106 void CloseUnderlyingLayer()
override;
109 OGRProxiedLayer(OGRLayerPool *poPool, OpenLayerFunc pfnOpenLayer,
110 FreeUserDataFunc pfnFreeUserData,
void *pUserData);
111 OGRProxiedLayer(OGRLayerPool *poPool, OpenLayerFunc pfnOpenLayer,
112 ReleaseLayerFunc pfnReleaseLayer,
113 FreeUserDataFunc pfnFreeUserData,
void *pUserData);
114 ~OGRProxiedLayer()
override;
116 OGRLayer *GetUnderlyingLayer();
118 OGRGeometry *GetSpatialFilter()
override;
119 virtual OGRErr ISetSpatialFilter(
int iGeomField,
120 const OGRGeometry *)
override;
122 OGRErr SetAttributeFilter(
const char *)
override;
124 void ResetReading()
override;
125 OGRFeature *GetNextFeature()
override;
127 OGRFeature *GetFeature(
GIntBig nFID)
override;
128 OGRErr ISetFeature(OGRFeature *poFeature)
override;
129 OGRErr ISetFeatureUniqPtr(std::unique_ptr<OGRFeature> poFeature)
override;
130 OGRErr ICreateFeature(OGRFeature *poFeature)
override;
131 OGRErr ICreateFeatureUniqPtr(std::unique_ptr<OGRFeature> poFeature,
133 OGRErr IUpsertFeature(OGRFeature *poFeature)
override;
134 OGRErr IUpdateFeature(OGRFeature *poFeature,
int nUpdatedFieldsCount,
135 const int *panUpdatedFieldsIdx,
136 int nUpdatedGeomFieldsCount,
137 const int *panUpdatedGeomFieldsIdx,
138 bool bUpdateStyleString)
override;
141 GDALDataset *GetDataset()
override;
142 virtual bool GetArrowStream(
struct ArrowArrayStream *out_stream,
145 const char *GetName()
const override;
147 const OGRFeatureDefn *GetLayerDefn()
const override;
149 const OGRSpatialReference *GetSpatialRef()
const override;
151 GIntBig GetFeatureCount(
int bForce = TRUE)
override;
152 OGRErr IGetExtent(
int iGeomField, OGREnvelope *psExtent,
153 bool bForce)
override;
155 int TestCapability(
const char *)
const override;
157 virtual OGRErr CreateField(
const OGRFieldDefn *poField,
158 int bApproxOK = TRUE)
override;
159 OGRErr DeleteField(
int iField)
override;
160 OGRErr ReorderFields(
int *panMap)
override;
161 virtual OGRErr AlterFieldDefn(
int iField, OGRFieldDefn *poNewFieldDefn,
162 int nFlags)
override;
164 AlterGeomFieldDefn(
int iGeomField,
165 const OGRGeomFieldDefn *poNewGeomFieldDefn,
166 int nFlags)
override;
168 OGRErr SyncToDisk()
override;
170 OGRStyleTable *GetStyleTable()
override;
171 void SetStyleTableDirectly(OGRStyleTable *poStyleTable)
override;
173 void SetStyleTable(OGRStyleTable *poStyleTable)
override;
175 OGRErr StartTransaction()
override;
176 OGRErr CommitTransaction()
override;
177 OGRErr RollbackTransaction()
override;
179 const char *GetFIDColumn()
const override;
180 const char *GetGeometryColumn()
const override;
184 OGRErr Rename(
const char *pszNewName)
override;
This class represents a layer of simple features, with access methods.
Definition ogrsf_frmts.h:61
#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
long long GIntBig
Large signed integer type (generally 64-bit integer type).
Definition cpl_port.h:195
OGRwkbGeometryType
List of well known binary geometry types.
Definition ogr_core.h:423
int OGRErr
Type for a OGR error.
Definition ogr_core.h:388
Classes related to registration of format support, and opening datasets.