GDAL
ogrmutexeddatasource.h
00001 /******************************************************************************
00002  * $Id: ogrmutexeddatasource.h 36501 2016-11-25 14:09:24Z rouault $
00003  *
00004  * Project:  OpenGIS Simple Features Reference Implementation
00005  * Purpose:  Defines OGRLMutexedDataSource class
00006  * Author:   Even Rouault, even dot rouault at mines dash paris dot org
00007  *
00008  ******************************************************************************
00009  * Copyright (c) 2013, Even Rouault <even dot rouault at mines-paris dot org>
00010  *
00011  * Permission is hereby granted, free of charge, to any person obtaining a
00012  * copy of this software and associated documentation files (the "Software"),
00013  * to deal in the Software without restriction, including without limitation
00014  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
00015  * and/or sell copies of the Software, and to permit persons to whom the
00016  * Software is furnished to do so, subject to the following conditions:
00017  *
00018  * The above copyright notice and this permission notice shall be included
00019  * in all copies or substantial portions of the Software.
00020  *
00021  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
00022  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
00023  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
00024  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
00025  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
00026  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
00027  * DEALINGS IN THE SOFTWARE.
00028  ****************************************************************************/
00029 
00030 #ifndef OGRMUTEXEDDATASOURCELAYER_H_INCLUDED
00031 #define OGRMUTEXEDDATASOURCELAYER_H_INCLUDED
00032 
00033 #ifndef DOXYGEN_SKIP
00034 
00035 #include "ogrsf_frmts.h"
00036 #include "cpl_multiproc.h"
00037 #include "ogrmutexedlayer.h"
00038 #include <map>
00039 
00047 class CPL_DLL OGRMutexedDataSource : public OGRDataSource
00048 {
00049   protected:
00050     OGRDataSource *m_poBaseDataSource;
00051     int            m_bHasOwnership;
00052     CPLMutex      *m_hGlobalMutex;
00053     int            m_bWrapLayersInMutexedLayer;
00054     std::map<OGRLayer*, OGRMutexedLayer* > m_oMapLayers;
00055     std::map<OGRMutexedLayer*, OGRLayer* > m_oReverseMapLayers;
00056 
00057     OGRLayer*           WrapLayerIfNecessary(OGRLayer* poLayer);
00058 
00059   public:
00060 
00061     /* The construction of the object isn't protected by the mutex */
00062                  OGRMutexedDataSource(OGRDataSource* poBaseDataSource,
00063                                       int bTakeOwnership,
00064                                       CPLMutex* hMutexIn,
00065                                       int bWrapLayersInMutexedLayer);
00066 
00067     /* The destruction of the object isn't protected by the mutex */
00068     virtual     ~OGRMutexedDataSource();
00069 
00070     OGRDataSource*      GetBaseDataSource() { return m_poBaseDataSource; }
00071 
00072     virtual const char  *GetName() override;
00073 
00074     virtual int         GetLayerCount() override ;
00075     virtual OGRLayer    *GetLayer(int) override;
00076     virtual OGRLayer    *GetLayerByName(const char *) override;
00077     virtual OGRErr      DeleteLayer(int) override;
00078 
00079     virtual int         TestCapability( const char * ) override;
00080 
00081     virtual OGRLayer   *ICreateLayer( const char *pszName,
00082                                      OGRSpatialReference *poSpatialRef = NULL,
00083                                      OGRwkbGeometryType eGType = wkbUnknown,
00084                                      char ** papszOptions = NULL ) override;
00085     virtual OGRLayer   *CopyLayer( OGRLayer *poSrcLayer,
00086                                    const char *pszNewName,
00087                                    char **papszOptions = NULL ) override;
00088 
00089     virtual OGRStyleTable *GetStyleTable() override;
00090     virtual void        SetStyleTableDirectly( OGRStyleTable *poStyleTable ) override;
00091 
00092     virtual void        SetStyleTable(OGRStyleTable *poStyleTable) override;
00093 
00094     virtual OGRLayer *  ExecuteSQL( const char *pszStatement,
00095                                     OGRGeometry *poSpatialFilter,
00096                                     const char *pszDialect ) override;
00097     virtual void        ReleaseResultSet( OGRLayer * poResultsSet ) override;
00098 
00099     virtual void        FlushCache() override;
00100 
00101     virtual OGRErr      StartTransaction(int bForce=FALSE) override;
00102     virtual OGRErr      CommitTransaction() override;
00103     virtual OGRErr      RollbackTransaction() override;
00104 
00105     virtual char      **GetMetadata( const char * pszDomain = "" ) override;
00106     virtual CPLErr      SetMetadata( char ** papszMetadata,
00107                                      const char * pszDomain = "" ) override;
00108     virtual const char *GetMetadataItem( const char * pszName,
00109                                          const char * pszDomain = "" ) override;
00110     virtual CPLErr      SetMetadataItem( const char * pszName,
00111                                          const char * pszValue,
00112                                          const char * pszDomain = "" ) override;
00113 };
00114 
00115 #endif /* #ifndef DOXYGEN_SKIP */
00116 
00117 #endif // OGRMUTEXEDDATASOURCELAYER_H_INCLUDED

Generated for GDAL by doxygen 1.7.6.1.