Line data Source code
1 : /****************************************************************************** 2 : * 3 : * Project: OpenGIS Simple Features Reference Implementation 4 : * Purpose: Defines OGRLayerDecorator class 5 : * Author: Even Rouault, even dot rouault at spatialys.com 6 : * 7 : ****************************************************************************** 8 : * Copyright (c) 2012-2013, Even Rouault <even dot rouault at spatialys.com> 9 : * 10 : * SPDX-License-Identifier: MIT 11 : ****************************************************************************/ 12 : 13 : #ifndef OGRLAYERDECORATOR_H_INCLUDED 14 : #define OGRLAYERDECORATOR_H_INCLUDED 15 : 16 : #ifndef DOXYGEN_SKIP 17 : 18 : #include "ogrsf_frmts.h" 19 : 20 : class CPL_DLL OGRLayerDecorator : virtual public OGRLayer 21 : { 22 : CPL_DISALLOW_COPY_ASSIGN(OGRLayerDecorator) 23 : 24 : protected: 25 : OGRLayer *m_poDecoratedLayer; 26 : int m_bHasOwnership; 27 : 28 : public: 29 : OGRLayerDecorator(OGRLayer *poDecoratedLayer, int bTakeOwnership); 30 : ~OGRLayerDecorator() override; 31 : 32 : OGRGeometry *GetSpatialFilter() override; 33 : virtual OGRErr ISetSpatialFilter(int iGeomField, 34 : const OGRGeometry *) override; 35 : 36 : OGRErr SetAttributeFilter(const char *) override; 37 : 38 : void ResetReading() override; 39 : OGRFeature *GetNextFeature() override; 40 : OGRErr SetNextByIndex(GIntBig nIndex) override; 41 : OGRFeature *GetFeature(GIntBig nFID) override; 42 : OGRErr ISetFeature(OGRFeature *poFeature) override; 43 : OGRErr ICreateFeature(OGRFeature *poFeature) override; 44 : OGRErr IUpsertFeature(OGRFeature *poFeature) override; 45 : OGRErr DeleteFeature(GIntBig nFID) override; 46 : OGRErr IUpdateFeature(OGRFeature *poFeature, int nUpdatedFieldsCount, 47 : const int *panUpdatedFieldsIdx, 48 : int nUpdatedGeomFieldsCount, 49 : const int *panUpdatedGeomFieldsIdx, 50 : bool bUpdateStyleString) override; 51 : 52 : GDALDataset *GetDataset() override; 53 : virtual bool GetArrowStream(struct ArrowArrayStream *out_stream, 54 : CSLConstList papszOptions = nullptr) override; 55 : 56 : const char *GetName() const override; 57 : OGRwkbGeometryType GetGeomType() const override; 58 : using OGRLayer::GetLayerDefn; 59 : const OGRFeatureDefn *GetLayerDefn() const override; 60 : 61 : const OGRSpatialReference *GetSpatialRef() const override; 62 : 63 : GIntBig GetFeatureCount(int bForce = TRUE) override; 64 : OGRErr IGetExtent(int iGeomField, OGREnvelope *psExtent, 65 : bool bForce = true) override; 66 : OGRErr IGetExtent3D(int iGeomField, OGREnvelope3D *psExtent, 67 : bool bForce = true) override; 68 : 69 : int TestCapability(const char *) const override; 70 : 71 : virtual OGRErr CreateField(const OGRFieldDefn *poField, 72 : int bApproxOK = TRUE) override; 73 : OGRErr DeleteField(int iField) override; 74 : OGRErr ReorderFields(int *panMap) override; 75 : virtual OGRErr AlterFieldDefn(int iField, OGRFieldDefn *poNewFieldDefn, 76 : int nFlags) override; 77 : virtual OGRErr 78 : AlterGeomFieldDefn(int iGeomField, 79 : const OGRGeomFieldDefn *poNewGeomFieldDefn, 80 : int nFlags) override; 81 : 82 : virtual OGRErr CreateGeomField(const OGRGeomFieldDefn *poField, 83 : int bApproxOK = TRUE) override; 84 : 85 : OGRErr SyncToDisk() override; 86 : 87 : OGRStyleTable *GetStyleTable() override; 88 : void SetStyleTableDirectly(OGRStyleTable *poStyleTable) override; 89 : 90 : void SetStyleTable(OGRStyleTable *poStyleTable) override; 91 : 92 : OGRErr StartTransaction() override; 93 : OGRErr CommitTransaction() override; 94 : OGRErr RollbackTransaction() override; 95 : 96 : const char *GetFIDColumn() const override; 97 : const char *GetGeometryColumn() const override; 98 : 99 : OGRErr SetIgnoredFields(CSLConstList papszFields) override; 100 : 101 : char **GetMetadata(const char *pszDomain = "") override; 102 : CPLErr SetMetadata(char **papszMetadata, 103 : const char *pszDomain = "") override; 104 : virtual const char *GetMetadataItem(const char *pszName, 105 : const char *pszDomain = "") override; 106 : CPLErr SetMetadataItem(const char *pszName, const char *pszValue, 107 : const char *pszDomain = "") override; 108 : OGRErr Rename(const char *pszNewName) override; 109 : 110 347 : OGRLayer *GetBaseLayer() const 111 : { 112 347 : return m_poDecoratedLayer; 113 : } 114 : }; 115 : 116 : #endif /* #ifndef DOXYGEN_SKIP */ 117 : 118 : #endif // OGRLAYERDECORATOR_H_INCLUDED