OGR
ogrmutexeddatasource.h
1/******************************************************************************
2 * $Id$
3 *
4 * Project: OpenGIS Simple Features Reference Implementation
5 * Purpose: Defines OGRLMutexedDataSource class
6 * Author: Even Rouault, even dot rouault at mines dash paris dot org
7 *
8 ******************************************************************************
9 * Copyright (c) 2013, Even Rouault <even dot rouault at mines-paris dot org>
10 *
11 * Permission is hereby granted, free of charge, to any person obtaining a
12 * copy of this software and associated documentation files (the "Software"),
13 * to deal in the Software without restriction, including without limitation
14 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
15 * and/or sell copies of the Software, and to permit persons to whom the
16 * Software is furnished to do so, subject to the following conditions:
17 *
18 * The above copyright notice and this permission notice shall be included
19 * in all copies or substantial portions of the Software.
20 *
21 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
22 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
24 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
26 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
27 * DEALINGS IN THE SOFTWARE.
28 ****************************************************************************/
29
30#ifndef OGRMUTEXEDDATASOURCELAYER_H_INCLUDED
31#define OGRMUTEXEDDATASOURCELAYER_H_INCLUDED
32
33#ifndef DOXYGEN_SKIP
34
35#include "ogrsf_frmts.h"
36#include "cpl_multiproc.h"
37#include "ogrmutexedlayer.h"
38#include <map>
39
47class CPL_DLL OGRMutexedDataSource : public OGRDataSource
48{
49 protected:
50 OGRDataSource *m_poBaseDataSource;
51 int m_bHasOwnership;
52 CPLMutex *m_hGlobalMutex;
53 int m_bWrapLayersInMutexedLayer;
54 std::map<OGRLayer*, OGRMutexedLayer* > m_oMapLayers;
55 std::map<OGRMutexedLayer*, OGRLayer* > m_oReverseMapLayers;
56
57 OGRLayer* WrapLayerIfNecessary(OGRLayer* poLayer);
58
59 public:
60
61 /* The construction of the object isn't protected by the mutex */
62 OGRMutexedDataSource(OGRDataSource* poBaseDataSource,
63 int bTakeOwnership,
64 CPLMutex* hMutexIn,
65 int bWrapLayersInMutexedLayer);
66
67 /* The destruction of the object isn't protected by the mutex */
68 virtual ~OGRMutexedDataSource();
69
70 OGRDataSource* GetBaseDataSource() { return m_poBaseDataSource; }
71
72 virtual const char *GetName() override;
73
74 virtual int GetLayerCount() override ;
75 virtual OGRLayer *GetLayer(int) override;
76 virtual OGRLayer *GetLayerByName(const char *) override;
77 virtual OGRErr DeleteLayer(int) override;
78
79 virtual int TestCapability( const char * ) override;
80
81 virtual OGRLayer *ICreateLayer( const char *pszName,
82 OGRSpatialReference *poSpatialRef = nullptr,
84 char ** papszOptions = nullptr ) override;
85 virtual OGRLayer *CopyLayer( OGRLayer *poSrcLayer,
86 const char *pszNewName,
87 char **papszOptions = nullptr ) override;
88
89 virtual OGRStyleTable *GetStyleTable() override;
90 virtual void SetStyleTableDirectly( OGRStyleTable *poStyleTable ) override;
91
92 virtual void SetStyleTable(OGRStyleTable *poStyleTable) override;
93
94 virtual OGRLayer * ExecuteSQL( const char *pszStatement,
95 OGRGeometry *poSpatialFilter,
96 const char *pszDialect ) override;
97 virtual void ReleaseResultSet( OGRLayer * poResultsSet ) override;
98
99 virtual void FlushCache() override;
100
101 virtual OGRErr StartTransaction(int bForce=FALSE) override;
102 virtual OGRErr CommitTransaction() override;
103 virtual OGRErr RollbackTransaction() override;
104
105 virtual char **GetMetadata( const char * pszDomain = "" ) override;
106 virtual CPLErr SetMetadata( char ** papszMetadata,
107 const char * pszDomain = "" ) override;
108 virtual const char *GetMetadataItem( const char * pszName,
109 const char * pszDomain = "" ) override;
110 virtual CPLErr SetMetadataItem( const char * pszName,
111 const char * pszValue,
112 const char * pszDomain = "" ) override;
113};
114
115#endif /* #ifndef DOXYGEN_SKIP */
116
117#endif // OGRMUTEXEDDATASOURCELAYER_H_INCLUDED
Definition: ogrsf_frmts.h:316
Definition: ogr_geometry.h:287
Definition: ogrsf_frmts.h:71
Definition: ogr_spatialref.h:146
Definition: ogr_featurestyle.h:85
CPLErr
Definition: cpl_error.h:53
OGRwkbGeometryType
Definition: ogr_core.h:318
@ wkbUnknown
Definition: ogr_core.h:319
int OGRErr
Definition: ogr_core.h:290

Generated for GDAL by doxygen 1.9.3.