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(); 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 3877 : OGRFeatureDefn *GetLayerDefn() override 54 : { 55 3877 : return poFeatureDefn; 56 : } 57 : 58 : CPLString GetIliGeomType(const char *cFieldName) 59 : { 60 : return oGeomFieldInfos[cFieldName].iliGeomType; 61 : } 62 : 63 : int TestCapability(const char *) override; 64 : 65 : GDALDataset *GetDataset() override; 66 : }; 67 : 68 : /************************************************************************/ 69 : /* OGRILI2DataSource */ 70 : /************************************************************************/ 71 : 72 : class OGRILI2DataSource final : public GDALDataset 73 : { 74 : private: 75 : std::list<OGRLayer *> listLayer; 76 : 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 : virtual ~OGRILI2DataSource(); 89 : 90 : int Open(const char *, char **papszOpenOptions, int bTestOpen); 91 : 92 44 : int GetLayerCount() override 93 : { 94 44 : return static_cast<int>(listLayer.size()); 95 : } 96 : 97 : OGRLayer *GetLayer(int) override; 98 : 99 : int TestCapability(const char *) override; 100 : }; 101 : 102 : #endif /* OGR_ILI2_H_INCLUDED */