Line data Source code
1 : /****************************************************************************** 2 : * 3 : * Project: Interlis 2 Translator 4 : * Purpose: Definition of classes for OGR Interlis 2 driver. 5 : * Author: Markus Schnider, Sourcepole AG 6 : * 7 : ****************************************************************************** 8 : * Copyright (c) 2004, Pirmin Kalberer, Sourcepole AG 9 : * 10 : * SPDX-License-Identifier: MIT 11 : ****************************************************************************/ 12 : 13 : #ifndef OGR_ILI2_H_INCLUDED 14 : #define OGR_ILI2_H_INCLUDED 15 : 16 : #include "ogrsf_frmts.h" 17 : #include "imdreader.h" 18 : #include "ili2reader.h" 19 : 20 : #include <string> 21 : #include <list> 22 : 23 : class OGRILI2DataSource; 24 : 25 : /************************************************************************/ 26 : /* OGRILI2Layer */ 27 : /************************************************************************/ 28 : 29 : class OGRILI2Layer final : public OGRLayer 30 : { 31 : private: 32 : OGRFeatureDefn *poFeatureDefn; 33 : GeomFieldInfos oGeomFieldInfos; 34 : std::list<OGRFeature *> listFeature; 35 : std::list<OGRFeature *>::const_iterator listFeatureIt; 36 : 37 : OGRILI2DataSource *poDS; 38 : 39 : public: 40 : OGRILI2Layer(OGRFeatureDefn *poFeatureDefn, 41 : const GeomFieldInfos &oGeomFieldInfos, 42 : OGRILI2DataSource *poDS); 43 : 44 : ~OGRILI2Layer() override; 45 : 46 : void AddFeature(OGRFeature *poFeature); 47 : 48 : void ResetReading() override; 49 : OGRFeature *GetNextFeature() override; 50 : 51 : GIntBig GetFeatureCount(int bForce = TRUE) override; 52 : 53 : using OGRLayer::GetLayerDefn; 54 : 55 7125 : const OGRFeatureDefn *GetLayerDefn() const override 56 : { 57 7125 : return poFeatureDefn; 58 : } 59 : 60 : CPLString GetIliGeomType(const char *cFieldName) 61 : { 62 : return oGeomFieldInfos[cFieldName].iliGeomType; 63 : } 64 : 65 : int TestCapability(const char *) const override; 66 : 67 : GDALDataset *GetDataset() override; 68 : }; 69 : 70 : /************************************************************************/ 71 : /* OGRILI2DataSource */ 72 : /************************************************************************/ 73 : 74 : class OGRILI2DataSource final : public GDALDataset 75 : { 76 : private: 77 : char *pszName; 78 : ImdReader *poImdReader; 79 : IILI2Reader *poReader; 80 : 81 : int nLayers; 82 : OGRILI2Layer **papoLayers; 83 : 84 : CPL_DISALLOW_COPY_ASSIGN(OGRILI2DataSource) 85 : 86 : public: 87 : OGRILI2DataSource(); 88 : ~OGRILI2DataSource() override; 89 : 90 : int Open(const char *, char **papszOpenOptions, int bTestOpen); 91 : 92 36 : int GetLayerCount() const override 93 : { 94 36 : return poReader->GetLayerCount(); 95 : } 96 : 97 : using GDALDataset::GetLayer; 98 : const OGRLayer *GetLayer(int) const override; 99 : 100 : int TestCapability(const char *) const override; 101 : }; 102 : 103 : #endif /* OGR_ILI2_H_INCLUDED */