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: 2024-11-21 22:18:42 Functions: 7 7 100.0 %

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

Generated by: LCOV version 1.14