LCOV - code coverage report
Current view: top level - ogr/ogrsf_frmts/vdv - ogr_vdv.h (source / functions) Hit Total Coverage
Test: gdal_filtered.info Lines: 19 19 100.0 %
Date: 2025-01-18 12:42:00 Functions: 7 7 100.0 %

          Line data    Source code
       1             : /******************************************************************************
       2             :  *
       3             :  * Project:  VDV Translator
       4             :  * Purpose:  Implements OGRVDVDriver.
       5             :  * Author:   Even Rouault, even.rouault at spatialys.com
       6             :  *
       7             :  ******************************************************************************
       8             :  * Copyright (c) 2015, Even Rouault <even.rouault at spatialys.com>
       9             :  *
      10             :  * SPDX-License-Identifier: MIT
      11             :  ****************************************************************************/
      12             : 
      13             : #ifndef OGR_VDV_H_INCLUDED
      14             : #define OGR_VDV_H_INCLUDED
      15             : 
      16             : #include "ogrsf_frmts.h"
      17             : #include <vector>
      18             : #include <map>
      19             : 
      20             : class OGRVDVDataSource;
      21             : 
      22             : /************************************************************************/
      23             : /*                        OGRIDFDataSource                              */
      24             : /************************************************************************/
      25             : 
      26             : class OGRIDFDataSource final : public GDALDataset
      27             : {
      28             :     CPLString m_osFilename;
      29             :     VSILFILE *m_fpL;
      30             :     bool m_bHasParsed;
      31             :     GDALDataset *m_poTmpDS;
      32             :     bool m_bDestroyTmpDS = false;
      33             : 
      34             :     void Parse();
      35             : 
      36             :   public:
      37             :     explicit OGRIDFDataSource(const char *pszFilename, VSILFILE *fpL);
      38             :     virtual ~OGRIDFDataSource();
      39             : 
      40             :     virtual int GetLayerCount() override;
      41             :     virtual OGRLayer *GetLayer(int) override;
      42             :     virtual int TestCapability(const char *pszCap) override;
      43             : };
      44             : 
      45             : /************************************************************************/
      46             : /*                          OGRVDVLayer                                 */
      47             : /************************************************************************/
      48             : 
      49             : class OGRVDVLayer final : public OGRLayer
      50             : {
      51             :     GDALDataset *m_poDS = nullptr;
      52             :     VSILFILE *m_fpL;
      53             :     bool m_bOwnFP;
      54             :     bool m_bRecodeFromLatin1;
      55             :     vsi_l_offset m_nStartOffset;
      56             :     vsi_l_offset m_nCurOffset;
      57             :     GIntBig m_nTotalFeatureCount;
      58             :     GIntBig m_nFID;
      59             :     OGRFeatureDefn *m_poFeatureDefn;
      60             :     bool m_bEOF;
      61             :     int m_iLongitudeVDV452;
      62             :     int m_iLatitudeVDV452;
      63             : 
      64             :   public:
      65             :     OGRVDVLayer(GDALDataset *poDS, const CPLString &osTableName, VSILFILE *fpL,
      66             :                 bool bOwnFP, bool bRecodeFromLatin1, vsi_l_offset nStartOffset);
      67             :     virtual ~OGRVDVLayer();
      68             : 
      69             :     virtual void ResetReading() override;
      70             :     virtual OGRFeature *GetNextFeature() override;
      71             :     virtual GIntBig GetFeatureCount(int bForce) override;
      72             : 
      73        1404 :     virtual OGRFeatureDefn *GetLayerDefn() override
      74             :     {
      75        1404 :         return m_poFeatureDefn;
      76             :     }
      77             : 
      78             :     virtual int TestCapability(const char *pszCap) override;
      79             : 
      80           4 :     GDALDataset *GetDataset() override
      81             :     {
      82           4 :         return m_poDS;
      83             :     }
      84             : 
      85          70 :     void SetFeatureCount(GIntBig nTotalFeatureCount)
      86             :     {
      87          70 :         m_nTotalFeatureCount = nTotalFeatureCount;
      88          70 :     }
      89             : };
      90             : 
      91             : class OGRVDV452Field
      92             : {
      93             :   public:
      94             :     CPLString osEnglishName;
      95             :     CPLString osGermanName;
      96             :     CPLString osType;
      97             :     int nWidth;
      98             : 
      99        1617 :     OGRVDV452Field() : nWidth(0)
     100             :     {
     101        1617 :     }
     102             : };
     103             : 
     104             : class OGRVDV452Table
     105             : {
     106             :   public:
     107             :     CPLString osEnglishName;
     108             :     CPLString osGermanName;
     109             :     std::vector<OGRVDV452Field> aosFields;
     110             : };
     111             : 
     112             : class OGRVDV452Tables
     113             : {
     114             :   public:
     115             :     std::vector<OGRVDV452Table *> aosTables;
     116             :     std::map<CPLString, OGRVDV452Table *> oMapEnglish;
     117             :     std::map<CPLString, OGRVDV452Table *> oMapGerman;
     118             : 
     119         121 :     OGRVDV452Tables()
     120         121 :     {
     121         121 :     }
     122             : 
     123         121 :     ~OGRVDV452Tables()
     124         121 :     {
     125         359 :         for (size_t i = 0; i < aosTables.size(); i++)
     126         238 :             delete aosTables[i];
     127         121 :     }
     128             : };
     129             : 
     130             : /************************************************************************/
     131             : /*                          OGRVDVWriterLayer                           */
     132             : /************************************************************************/
     133             : 
     134             : class OGRVDVWriterLayer final : public OGRLayer
     135             : {
     136             :     OGRVDVDataSource *m_poDS;
     137             :     OGRFeatureDefn *m_poFeatureDefn;
     138             :     bool m_bWritePossible;
     139             :     VSILFILE *m_fpL;
     140             :     bool m_bOwnFP;
     141             :     GIntBig m_nFeatureCount;
     142             :     OGRVDV452Table *m_poVDV452Table;
     143             :     CPLString m_osVDV452Lang;
     144             :     bool m_bProfileStrict;
     145             :     int m_iLongitudeVDV452;
     146             :     int m_iLatitudeVDV452;
     147             : 
     148             :     bool WriteSchemaIfNeeded();
     149             : 
     150             :   public:
     151             :     OGRVDVWriterLayer(OGRVDVDataSource *poDS, const char *pszName,
     152             :                       VSILFILE *fpL, bool bOwnFP,
     153             :                       OGRVDV452Table *poVDV452Table = nullptr,
     154             :                       const CPLString &osVDV452Lang = "",
     155             :                       bool bProfileStrict = false);
     156             :     virtual ~OGRVDVWriterLayer();
     157             : 
     158             :     virtual void ResetReading() override;
     159             :     virtual OGRFeature *GetNextFeature() override;
     160             : 
     161         511 :     virtual OGRFeatureDefn *GetLayerDefn() override
     162             :     {
     163         511 :         return m_poFeatureDefn;
     164             :     }
     165             : 
     166             :     virtual int TestCapability(const char *pszCap) override;
     167             :     virtual OGRErr CreateField(const OGRFieldDefn *poFieldDefn,
     168             :                                int bApproxOK = TRUE) override;
     169             :     virtual OGRErr ICreateFeature(OGRFeature *poFeature) override;
     170             :     virtual GIntBig GetFeatureCount(int bForce = TRUE) override;
     171             : 
     172             :     GDALDataset *GetDataset() override;
     173             : 
     174             :     void StopAsCurrentLayer();
     175             : };
     176             : 
     177             : /************************************************************************/
     178             : /*                        OGRVDVDataSource                              */
     179             : /************************************************************************/
     180             : 
     181             : class OGRVDVDataSource final : public GDALDataset
     182             : {
     183             :     CPLString m_osFilename;
     184             :     VSILFILE *m_fpL;
     185             :     bool m_bUpdate;
     186             :     bool m_bSingleFile;
     187             :     bool m_bNew;
     188             :     bool m_bLayersDetected;
     189             :     int m_nLayerCount;
     190             :     OGRLayer **m_papoLayers;
     191             :     OGRVDVWriterLayer *m_poCurrentWriterLayer;
     192             :     bool m_bMustWriteEof;
     193             :     bool m_bVDV452Loaded;
     194             :     OGRVDV452Tables m_oVDV452Tables;
     195             : 
     196             :     void DetectLayers();
     197             : 
     198             :   public:
     199             :     OGRVDVDataSource(const char *pszFilename, VSILFILE *fpL, bool bUpdate,
     200             :                      bool bSingleFile, bool bNew);
     201             :     virtual ~OGRVDVDataSource();
     202             : 
     203             :     virtual int GetLayerCount() override;
     204             :     virtual OGRLayer *GetLayer(int) override;
     205             : 
     206             :     OGRLayer *ICreateLayer(const char *pszName,
     207             :                            const OGRGeomFieldDefn *poGeomFieldDefn,
     208             :                            CSLConstList papszOptions) override;
     209             : 
     210             :     virtual int TestCapability(const char *pszCap) override;
     211             : 
     212             :     void SetCurrentWriterLayer(OGRVDVWriterLayer *poLayer);
     213             : 
     214             :     static GDALDataset *Open(GDALOpenInfo *poOpenInfo);
     215             :     static GDALDataset *Create(const char *pszName, int /*nXSize*/,
     216             :                                int /*nYSize*/, int /*nBands*/,
     217             :                                GDALDataType /*eType*/, char **papszOptions);
     218             : };
     219             : 
     220             : #endif /* ndef OGR_VDV_H_INCLUDED */

Generated by: LCOV version 1.14