LCOV - code coverage report
Current view: top level - ogr/ogrsf_frmts/ili - imdreader.h (source / functions) Hit Total Coverage
Test: gdal_filtered.info Lines: 54 55 98.2 %
Date: 2024-11-21 22:18:42 Functions: 11 11 100.0 %

          Line data    Source code
       1             : /******************************************************************************
       2             :  * $Id$
       3             :  *
       4             :  * Project:  Interlis 1/2 Translator
       5             :  * Purpose:  IlisMeta model reader.
       6             :  * Author:   Pirmin Kalberer, Sourcepole AG
       7             :  *
       8             :  ******************************************************************************
       9             :  * Copyright (c) 2014, Pirmin Kalberer, Sourcepole AG
      10             :  *
      11             :  * SPDX-License-Identifier: MIT
      12             :  ****************************************************************************/
      13             : 
      14             : #ifndef IMDREADER_H_INCLUDED
      15             : #define IMDREADER_H_INCLUDED
      16             : 
      17             : #include "cpl_vsi.h"
      18             : #include "cpl_error.h"
      19             : #include "ogr_feature.h"
      20             : #include <list>
      21             : #include <map>
      22             : 
      23             : class GeomFieldInfo
      24             : {
      25             :     OGRFeatureDefn *geomTable; /* separate geometry table for Ili 1 */
      26             :   public:
      27             :     CPLString iliGeomType;
      28             : 
      29          74 :     GeomFieldInfo() : geomTable(nullptr)
      30             :     {
      31          74 :     }
      32             : 
      33         208 :     ~GeomFieldInfo()
      34         208 :     {
      35         208 :         if (geomTable)
      36          63 :             geomTable->Release();
      37         208 :     }
      38             : 
      39         134 :     GeomFieldInfo(const GeomFieldInfo &other)
      40         134 :     {
      41         134 :         geomTable = other.geomTable;
      42         134 :         if (geomTable)
      43          47 :             geomTable->Reference();
      44         134 :         iliGeomType = other.iliGeomType;
      45         134 :     }
      46             : 
      47             :     GeomFieldInfo &operator=(const GeomFieldInfo &other)
      48             :     {
      49             :         if (this != &other)
      50             :         {
      51             :             if (geomTable)
      52             :                 geomTable->Release();
      53             :             geomTable = other.geomTable;
      54             :             if (geomTable)
      55             :                 geomTable->Reference();
      56             :             iliGeomType = other.iliGeomType;
      57             :         }
      58             :         return *this;
      59             :     }
      60             : 
      61          50 :     OGRFeatureDefn *GetGeomTableDefnRef() const
      62             :     {
      63          50 :         return geomTable;
      64             :     }
      65             : 
      66          16 :     void SetGeomTableDefn(OGRFeatureDefn *geomTableIn)
      67             :     {
      68          16 :         CPLAssert(geomTable == nullptr);
      69          16 :         geomTable = geomTableIn;
      70          16 :         if (geomTable)
      71          16 :             geomTable->Reference();
      72          16 :     }
      73             : };
      74             : 
      75             : typedef std::map<CPLString, GeomFieldInfo>
      76             :     GeomFieldInfos; /* key: geom field name, value: ILI geom field info */
      77             : typedef std::map<CPLString, CPLString>
      78             :     StructFieldInfos; /* key: struct field name, value: struct table */
      79             : 
      80             : class FeatureDefnInfo
      81             : {
      82             :     OGRFeatureDefn *poTableDefn;
      83             : 
      84             :   public:
      85             :     GeomFieldInfos poGeomFieldInfos;
      86             :     StructFieldInfos poStructFieldInfos;
      87             : 
      88         660 :     FeatureDefnInfo() : poTableDefn(nullptr)
      89             :     {
      90         660 :     }
      91             : 
      92         746 :     ~FeatureDefnInfo()
      93         746 :     {
      94         746 :         if (poTableDefn)
      95         475 :             poTableDefn->Release();
      96         746 :     }
      97             : 
      98          86 :     FeatureDefnInfo(const FeatureDefnInfo &other)
      99          86 :     {
     100          86 :         poTableDefn = other.poTableDefn;
     101          86 :         if (poTableDefn)
     102          86 :             poTableDefn->Reference();
     103          86 :         poGeomFieldInfos = other.poGeomFieldInfos;
     104          86 :         poStructFieldInfos = other.poStructFieldInfos;
     105          86 :     }
     106             : 
     107           4 :     FeatureDefnInfo &operator=(const FeatureDefnInfo &other)
     108             :     {
     109           4 :         if (this != &other)
     110             :         {
     111           4 :             if (poTableDefn)
     112           0 :                 poTableDefn->Release();
     113           4 :             poTableDefn = other.poTableDefn;
     114           4 :             if (poTableDefn)
     115           4 :                 poTableDefn->Reference();
     116           4 :             poGeomFieldInfos = other.poGeomFieldInfos;
     117           4 :             poStructFieldInfos = other.poStructFieldInfos;
     118             :         }
     119           4 :         return *this;
     120             :     }
     121             : 
     122         209 :     OGRFeatureDefn *GetTableDefnRef() const
     123             :     {
     124         209 :         return poTableDefn;
     125             :     }
     126             : 
     127         385 :     void SetTableDefn(OGRFeatureDefn *poTableDefnIn)
     128             :     {
     129         385 :         CPLAssert(poTableDefn == nullptr);
     130         385 :         poTableDefn = poTableDefnIn;
     131         385 :         if (poTableDefn)
     132         385 :             poTableDefn->Reference();
     133         385 :     }
     134             : };
     135             : 
     136             : typedef std::list<FeatureDefnInfo> FeatureDefnInfos;
     137             : 
     138             : class IliModelInfo
     139             : {
     140             :   public:
     141             :     CPLString name;
     142             :     CPLString version;
     143             :     CPLString uri;
     144             : };
     145             : 
     146             : typedef std::list<IliModelInfo> IliModelInfos;
     147             : 
     148             : class ImdReader
     149             : {
     150             :   public:           // TODO(schwehr): Private?
     151             :     int iliVersion; /* 1 or 2 */
     152             :     IliModelInfos modelInfos;
     153             :     CPLString mainModelName;
     154             :     CPLString mainBasketName;
     155             :     CPLString mainTopicName;
     156             :     FeatureDefnInfos featureDefnInfos;
     157             :     char codeBlank;
     158             :     char codeUndefined;
     159             :     char codeContinue;
     160             : 
     161             :   public:
     162             :     explicit ImdReader(int iliVersion);
     163             :     ~ImdReader();
     164             :     void ReadModel(const char *pszFilename);
     165             :     FeatureDefnInfo GetFeatureDefnInfo(const char *pszLayerName);
     166             : };
     167             : 
     168             : #endif /* IMDREADER_H_INCLUDED */

Generated by: LCOV version 1.14