13#ifndef OGRMUTEXEDDATASOURCELAYER_H_INCLUDED
14#define OGRMUTEXEDDATASOURCELAYER_H_INCLUDED
19#include "cpl_multiproc.h"
20#include "ogrmutexedlayer.h"
30class CPL_DLL OGRMutexedDataSource final :
public GDALDataset
35 GDALDataset *m_poBaseDataSource =
nullptr;
36 int m_bHasOwnership =
false;
37 CPLMutex *m_hGlobalMutex =
nullptr;
38 int m_bWrapLayersInMutexedLayer =
false;
39 std::map<OGRLayer *, OGRMutexedLayer *> m_oMapLayers{};
40 std::map<OGRMutexedLayer *, OGRLayer *> m_oReverseMapLayers{};
42 OGRLayer *WrapLayerIfNecessary(OGRLayer *poLayer);
46 OGRMutexedDataSource(GDALDataset *poBaseDataSource,
int bTakeOwnership,
47 CPLMutex *hMutexIn,
int bWrapLayersInMutexedLayer);
50 ~OGRMutexedDataSource()
override;
52 GDALDataset *GetBaseDataSource()
54 return m_poBaseDataSource;
57 int GetLayerCount()
const override;
59 const OGRLayer *GetLayer(
int)
const override;
60 OGRLayer *GetLayerByName(
const char *)
override;
61 OGRErr DeleteLayer(
int)
override;
62 bool IsLayerPrivate(
int iLayer)
const override;
64 int TestCapability(
const char *)
const override;
66 virtual OGRLayer *ICreateLayer(
const char *pszName,
67 const OGRGeomFieldDefn *poGeomFieldDefn,
69 virtual OGRLayer *CopyLayer(OGRLayer *poSrcLayer,
const char *pszNewName,
72 OGRStyleTable *GetStyleTable()
override;
73 void SetStyleTableDirectly(OGRStyleTable *poStyleTable)
override;
75 void SetStyleTable(OGRStyleTable *poStyleTable)
override;
77 OGRLayer *ExecuteSQL(
const char *pszStatement, OGRGeometry *poSpatialFilter,
78 const char *pszDialect)
override;
79 void ReleaseResultSet(OGRLayer *poResultsSet)
override;
81 CPLErr FlushCache(
bool bAtClosing)
override;
83 OGRErr StartTransaction(
int bForce = FALSE)
override;
84 OGRErr CommitTransaction()
override;
85 OGRErr RollbackTransaction()
override;
87 CSLConstList GetMetadata(
const char *pszDomain =
"")
override;
89 const char *pszDomain =
"")
override;
90 virtual const char *GetMetadataItem(
const char *pszName,
91 const char *pszDomain =
"")
override;
92 CPLErr SetMetadataItem(
const char *pszName,
const char *pszValue,
93 const char *pszDomain =
"")
override;
95 virtual std::vector<std::string>
96 GetFieldDomainNames(
CSLConstList papszOptions =
nullptr)
const override;
97 virtual const OGRFieldDomain *
98 GetFieldDomain(
const std::string &name)
const override;
100 virtual bool AddFieldDomain(std::unique_ptr<OGRFieldDomain> &&domain,
101 std::string &failureReason)
override;
102 virtual bool DeleteFieldDomain(
const std::string &name,
103 std::string &failureReason)
override;
104 virtual bool UpdateFieldDomain(std::unique_ptr<OGRFieldDomain> &&domain,
105 std::string &failureReason)
override;
107 std::vector<std::string>
108 GetRelationshipNames(
CSLConstList papszOptions =
nullptr)
const override;
110 const GDALRelationship *
111 GetRelationship(
const std::string &name)
const override;
113 std::shared_ptr<GDALGroup> GetRootGroup()
const override;
A set of associated raster bands, usually from one file.
Definition gdal_dataset.h:77
virtual const OGRLayer * GetLayer(int iLayer) const
Fetch a layer by index.
Definition gdaldataset.cpp:8125
CPLErr
Error category / error level.
Definition cpl_error.h:45
#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
int OGRErr
Type for a OGR error.
Definition ogr_core.h:388
Classes related to registration of format support, and opening datasets.