Line data Source code
1 : /******************************************************************************
2 : *
3 : * Project: OpenGIS Simple Features Reference Implementation
4 : * Purpose: Implements OGRMutexedLayer class
5 : * Author: Even Rouault, even dot rouault at spatialys.com
6 : *
7 : ******************************************************************************
8 : * Copyright (c) 2013, Even Rouault <even dot rouault at spatialys.com>
9 : *
10 : * SPDX-License-Identifier: MIT
11 : ****************************************************************************/
12 :
13 : #ifndef DOXYGEN_SKIP
14 :
15 : #include "ogrmutexedlayer.h"
16 : #include "cpl_multiproc.h"
17 :
18 391 : OGRMutexedLayer::OGRMutexedLayer(OGRLayer *poDecoratedLayer, int bTakeOwnership,
19 391 : CPLMutex *hMutex)
20 391 : : OGRLayerDecorator(poDecoratedLayer, bTakeOwnership), m_hMutex(hMutex)
21 : {
22 391 : SetDescription(poDecoratedLayer->GetDescription());
23 391 : }
24 :
25 782 : OGRMutexedLayer::~OGRMutexedLayer()
26 : {
27 782 : }
28 :
29 18 : OGRGeometry *OGRMutexedLayer::GetSpatialFilter()
30 : {
31 36 : CPLMutexHolderOptionalLockD(m_hMutex);
32 36 : return OGRLayerDecorator::GetSpatialFilter();
33 : }
34 :
35 136 : void OGRMutexedLayer::SetSpatialFilter(OGRGeometry *poGeom)
36 : {
37 272 : CPLMutexHolderOptionalLockD(m_hMutex);
38 136 : OGRLayerDecorator::SetSpatialFilter(poGeom);
39 136 : }
40 :
41 0 : void OGRMutexedLayer::SetSpatialFilterRect(double dfMinX, double dfMinY,
42 : double dfMaxX, double dfMaxY)
43 : {
44 0 : CPLMutexHolderOptionalLockD(m_hMutex);
45 0 : OGRLayerDecorator::SetSpatialFilterRect(dfMinX, dfMinY, dfMaxX, dfMaxY);
46 0 : }
47 :
48 94 : void OGRMutexedLayer::SetSpatialFilter(int iGeomField, OGRGeometry *poGeom)
49 : {
50 188 : CPLMutexHolderOptionalLockD(m_hMutex);
51 94 : OGRLayerDecorator::SetSpatialFilter(iGeomField, poGeom);
52 94 : }
53 :
54 0 : void OGRMutexedLayer::SetSpatialFilterRect(int iGeomField, double dfMinX,
55 : double dfMinY, double dfMaxX,
56 : double dfMaxY)
57 : {
58 0 : CPLMutexHolderOptionalLockD(m_hMutex);
59 0 : OGRLayerDecorator::SetSpatialFilterRect(iGeomField, dfMinX, dfMinY, dfMaxX,
60 : dfMaxY);
61 0 : }
62 :
63 312 : OGRErr OGRMutexedLayer::SetAttributeFilter(const char *poAttrFilter)
64 : {
65 624 : CPLMutexHolderOptionalLockD(m_hMutex);
66 624 : return OGRLayerDecorator::SetAttributeFilter(poAttrFilter);
67 : }
68 :
69 495 : void OGRMutexedLayer::ResetReading()
70 : {
71 990 : CPLMutexHolderOptionalLockD(m_hMutex);
72 495 : OGRLayerDecorator::ResetReading();
73 495 : }
74 :
75 1700 : OGRFeature *OGRMutexedLayer::GetNextFeature()
76 : {
77 3400 : CPLMutexHolderOptionalLockD(m_hMutex);
78 3400 : return OGRLayerDecorator::GetNextFeature();
79 : }
80 :
81 38 : GDALDataset *OGRMutexedLayer::GetDataset()
82 : {
83 76 : CPLMutexHolderOptionalLockD(m_hMutex);
84 76 : return OGRLayerDecorator::GetDataset();
85 : }
86 :
87 105 : bool OGRMutexedLayer::GetArrowStream(struct ArrowArrayStream *out_stream,
88 : CSLConstList papszOptions)
89 : {
90 210 : CPLMutexHolderOptionalLockD(m_hMutex);
91 210 : return OGRLayerDecorator::GetArrowStream(out_stream, papszOptions);
92 : }
93 :
94 73 : OGRErr OGRMutexedLayer::SetNextByIndex(GIntBig nIndex)
95 : {
96 146 : CPLMutexHolderOptionalLockD(m_hMutex);
97 146 : return OGRLayerDecorator::SetNextByIndex(nIndex);
98 : }
99 :
100 152 : OGRFeature *OGRMutexedLayer::GetFeature(GIntBig nFID)
101 : {
102 304 : CPLMutexHolderOptionalLockD(m_hMutex);
103 304 : return OGRLayerDecorator::GetFeature(nFID);
104 : }
105 :
106 24 : OGRErr OGRMutexedLayer::ISetFeature(OGRFeature *poFeature)
107 : {
108 48 : CPLMutexHolderOptionalLockD(m_hMutex);
109 48 : return OGRLayerDecorator::ISetFeature(poFeature);
110 : }
111 :
112 1568 : OGRErr OGRMutexedLayer::ICreateFeature(OGRFeature *poFeature)
113 : {
114 3136 : CPLMutexHolderOptionalLockD(m_hMutex);
115 3136 : return OGRLayerDecorator::ICreateFeature(poFeature);
116 : }
117 :
118 0 : OGRErr OGRMutexedLayer::IUpsertFeature(OGRFeature *poFeature)
119 : {
120 0 : CPLMutexHolderOptionalLockD(m_hMutex);
121 0 : return OGRLayerDecorator::IUpsertFeature(poFeature);
122 : }
123 :
124 2 : OGRErr OGRMutexedLayer::IUpdateFeature(OGRFeature *poFeature,
125 : int nUpdatedFieldsCount,
126 : const int *panUpdatedFieldsIdx,
127 : int nUpdatedGeomFieldsCount,
128 : const int *panUpdatedGeomFieldsIdx,
129 : bool bUpdateStyleString)
130 : {
131 4 : CPLMutexHolderOptionalLockD(m_hMutex);
132 2 : return OGRLayerDecorator::IUpdateFeature(
133 : poFeature, nUpdatedFieldsCount, panUpdatedFieldsIdx,
134 4 : nUpdatedGeomFieldsCount, panUpdatedGeomFieldsIdx, bUpdateStyleString);
135 : }
136 :
137 38 : OGRErr OGRMutexedLayer::DeleteFeature(GIntBig nFID)
138 : {
139 76 : CPLMutexHolderOptionalLockD(m_hMutex);
140 76 : return OGRLayerDecorator::DeleteFeature(nFID);
141 : }
142 :
143 533 : const char *OGRMutexedLayer::GetName()
144 : {
145 1066 : CPLMutexHolderOptionalLockD(m_hMutex);
146 1066 : return OGRLayerDecorator::GetName();
147 : }
148 :
149 318 : OGRwkbGeometryType OGRMutexedLayer::GetGeomType()
150 : {
151 636 : CPLMutexHolderOptionalLockD(m_hMutex);
152 636 : return OGRLayerDecorator::GetGeomType();
153 : }
154 :
155 4908 : OGRFeatureDefn *OGRMutexedLayer::GetLayerDefn()
156 : {
157 9816 : CPLMutexHolderOptionalLockD(m_hMutex);
158 9816 : return OGRLayerDecorator::GetLayerDefn();
159 : }
160 :
161 55 : OGRSpatialReference *OGRMutexedLayer::GetSpatialRef()
162 : {
163 110 : CPLMutexHolderOptionalLockD(m_hMutex);
164 110 : return OGRLayerDecorator::GetSpatialRef();
165 : }
166 :
167 212 : GIntBig OGRMutexedLayer::GetFeatureCount(int bForce)
168 : {
169 424 : CPLMutexHolderOptionalLockD(m_hMutex);
170 424 : return OGRLayerDecorator::GetFeatureCount(bForce);
171 : }
172 :
173 68 : OGRErr OGRMutexedLayer::GetExtent(int iGeomField, OGREnvelope *psExtent,
174 : int bForce)
175 : {
176 136 : CPLMutexHolderOptionalLockD(m_hMutex);
177 136 : return OGRLayerDecorator::GetExtent(iGeomField, psExtent, bForce);
178 : }
179 :
180 32 : OGRErr OGRMutexedLayer::GetExtent(OGREnvelope *psExtent, int bForce)
181 : {
182 64 : CPLMutexHolderOptionalLockD(m_hMutex);
183 64 : return OGRLayerDecorator::GetExtent(psExtent, bForce);
184 : }
185 :
186 949 : int OGRMutexedLayer::TestCapability(const char *pszCapability)
187 : {
188 1898 : CPLMutexHolderOptionalLockD(m_hMutex);
189 1898 : return OGRLayerDecorator::TestCapability(pszCapability);
190 : }
191 :
192 1369 : OGRErr OGRMutexedLayer::CreateField(const OGRFieldDefn *poField, int bApproxOK)
193 : {
194 2738 : CPLMutexHolderOptionalLockD(m_hMutex);
195 2738 : return OGRLayerDecorator::CreateField(poField, bApproxOK);
196 : }
197 :
198 1 : OGRErr OGRMutexedLayer::DeleteField(int iField)
199 : {
200 2 : CPLMutexHolderOptionalLockD(m_hMutex);
201 2 : return OGRLayerDecorator::DeleteField(iField);
202 : }
203 :
204 0 : OGRErr OGRMutexedLayer::ReorderFields(int *panMap)
205 : {
206 0 : CPLMutexHolderOptionalLockD(m_hMutex);
207 0 : return OGRLayerDecorator::ReorderFields(panMap);
208 : }
209 :
210 0 : OGRErr OGRMutexedLayer::AlterFieldDefn(int iField, OGRFieldDefn *poNewFieldDefn,
211 : int nFlagsIn)
212 : {
213 0 : CPLMutexHolderOptionalLockD(m_hMutex);
214 0 : return OGRLayerDecorator::AlterFieldDefn(iField, poNewFieldDefn, nFlagsIn);
215 : }
216 :
217 0 : OGRErr OGRMutexedLayer::AlterGeomFieldDefn(
218 : int iGeomField, const OGRGeomFieldDefn *poNewGeomFieldDefn, int nFlagsIn)
219 : {
220 0 : CPLMutexHolderOptionalLockD(m_hMutex);
221 0 : return OGRLayerDecorator::AlterGeomFieldDefn(iGeomField, poNewGeomFieldDefn,
222 0 : nFlagsIn);
223 : }
224 :
225 0 : OGRErr OGRMutexedLayer::SyncToDisk()
226 : {
227 0 : CPLMutexHolderOptionalLockD(m_hMutex);
228 0 : return OGRLayerDecorator::SyncToDisk();
229 : }
230 :
231 2 : OGRStyleTable *OGRMutexedLayer::GetStyleTable()
232 : {
233 4 : CPLMutexHolderOptionalLockD(m_hMutex);
234 4 : return OGRLayerDecorator::GetStyleTable();
235 : }
236 :
237 0 : void OGRMutexedLayer::SetStyleTableDirectly(OGRStyleTable *poStyleTable)
238 : {
239 0 : CPLMutexHolderOptionalLockD(m_hMutex);
240 0 : return OGRLayerDecorator::SetStyleTableDirectly(poStyleTable);
241 : }
242 :
243 7 : void OGRMutexedLayer::SetStyleTable(OGRStyleTable *poStyleTable)
244 : {
245 14 : CPLMutexHolderOptionalLockD(m_hMutex);
246 14 : return OGRLayerDecorator::SetStyleTable(poStyleTable);
247 : }
248 :
249 8 : OGRErr OGRMutexedLayer::StartTransaction()
250 : {
251 16 : CPLMutexHolderOptionalLockD(m_hMutex);
252 16 : return OGRLayerDecorator::StartTransaction();
253 : }
254 :
255 7 : OGRErr OGRMutexedLayer::CommitTransaction()
256 : {
257 14 : CPLMutexHolderOptionalLockD(m_hMutex);
258 14 : return OGRLayerDecorator::CommitTransaction();
259 : }
260 :
261 1 : OGRErr OGRMutexedLayer::RollbackTransaction()
262 : {
263 2 : CPLMutexHolderOptionalLockD(m_hMutex);
264 2 : return OGRLayerDecorator::RollbackTransaction();
265 : }
266 :
267 116 : const char *OGRMutexedLayer::GetFIDColumn()
268 : {
269 232 : CPLMutexHolderOptionalLockD(m_hMutex);
270 232 : return OGRLayerDecorator::GetFIDColumn();
271 : }
272 :
273 35 : const char *OGRMutexedLayer::GetGeometryColumn()
274 : {
275 70 : CPLMutexHolderOptionalLockD(m_hMutex);
276 70 : return OGRLayerDecorator::GetGeometryColumn();
277 : }
278 :
279 36 : OGRErr OGRMutexedLayer::SetIgnoredFields(CSLConstList papszFields)
280 : {
281 72 : CPLMutexHolderOptionalLockD(m_hMutex);
282 72 : return OGRLayerDecorator::SetIgnoredFields(papszFields);
283 : }
284 :
285 18 : char **OGRMutexedLayer::GetMetadata(const char *pszDomain)
286 : {
287 36 : CPLMutexHolderOptionalLockD(m_hMutex);
288 36 : return OGRLayerDecorator::GetMetadata(pszDomain);
289 : }
290 :
291 8 : CPLErr OGRMutexedLayer::SetMetadata(char **papszMetadata, const char *pszDomain)
292 : {
293 16 : CPLMutexHolderOptionalLockD(m_hMutex);
294 16 : return OGRLayerDecorator::SetMetadata(papszMetadata, pszDomain);
295 : }
296 :
297 22 : const char *OGRMutexedLayer::GetMetadataItem(const char *pszName,
298 : const char *pszDomain)
299 : {
300 44 : CPLMutexHolderOptionalLockD(m_hMutex);
301 44 : return OGRLayerDecorator::GetMetadataItem(pszName, pszDomain);
302 : }
303 :
304 0 : CPLErr OGRMutexedLayer::SetMetadataItem(const char *pszName,
305 : const char *pszValue,
306 : const char *pszDomain)
307 : {
308 0 : CPLMutexHolderOptionalLockD(m_hMutex);
309 0 : return OGRLayerDecorator::SetMetadataItem(pszName, pszValue, pszDomain);
310 : }
311 :
312 8 : OGRErr OGRMutexedLayer::Rename(const char *pszNewName)
313 : {
314 16 : CPLMutexHolderOptionalLockD(m_hMutex);
315 16 : return OGRLayerDecorator::Rename(pszNewName);
316 : }
317 :
318 : #endif /* #ifndef DOXYGEN_SKIP */
|