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

          Line data    Source code
       1             : /******************************************************************************
       2             :  * $Id$
       3             :  *
       4             :  * Project:  Arc/Info Coverage (E00 & Binary) Reader
       5             :  * Purpose:  Declarations for OGR wrapper classes for coverage access.
       6             :  * Author:   Frank Warmerdam, warmerdam@pobox.com
       7             :  *
       8             :  ******************************************************************************
       9             :  * Copyright (c) 2002, Frank Warmerdam
      10             :  *
      11             :  * SPDX-License-Identifier: MIT
      12             :  ****************************************************************************/
      13             : 
      14             : #ifndef OGR_AVC_H_INCLUDED
      15             : #define OGR_AVC_H_INCLUDED
      16             : 
      17             : #include "ogrsf_frmts.h"
      18             : #include "avc.h"
      19             : 
      20             : constexpr int SERIAL_ACCESS_FID = INT_MIN;
      21             : 
      22             : class OGRAVCDataSource;
      23             : 
      24             : /************************************************************************/
      25             : /*                             OGRAVCLayer                              */
      26             : /************************************************************************/
      27             : 
      28             : class OGRAVCLayer CPL_NON_FINAL : public OGRLayer
      29             : {
      30             :   protected:
      31             :     OGRFeatureDefn *poFeatureDefn;
      32             : 
      33             :     OGRAVCDataSource *poDS;
      34             : 
      35             :     AVCFileType eSectionType;
      36             : 
      37             :     bool m_bEOF = false;
      38             : 
      39             :     int SetupFeatureDefinition(const char *pszName);
      40             :     bool AppendTableDefinition(AVCTableDef *psTableDef);
      41             : 
      42             :     bool MatchesSpatialFilter(void *);
      43             :     OGRFeature *TranslateFeature(void *);
      44             : 
      45             :     bool TranslateTableFields(OGRFeature *poFeature, int nFieldBase,
      46             :                               AVCTableDef *psTableDef, AVCField *pasFields);
      47             : 
      48             :   public:
      49             :     OGRAVCLayer(AVCFileType eSectionType, OGRAVCDataSource *poDS);
      50             :     virtual ~OGRAVCLayer();
      51             : 
      52         946 :     OGRFeatureDefn *GetLayerDefn() override
      53             :     {
      54         946 :         return poFeatureDefn;
      55             :     }
      56             : 
      57             :     virtual int TestCapability(const char *) override;
      58             : };
      59             : 
      60             : /************************************************************************/
      61             : /*                         OGRAVCDataSource                             */
      62             : /************************************************************************/
      63             : 
      64             : class OGRAVCDataSource CPL_NON_FINAL : public GDALDataset
      65             : {
      66             :   protected:
      67             :     bool m_bSRSFetched = false;
      68             :     OGRSpatialReference *poSRS;
      69             :     char *pszCoverageName;
      70             : 
      71             :   public:
      72             :     OGRAVCDataSource();
      73             :     virtual ~OGRAVCDataSource();
      74             : 
      75             :     virtual OGRSpatialReference *DSGetSpatialRef();
      76             : 
      77             :     const char *GetCoverageName();
      78             : };
      79             : 
      80             : /* ==================================================================== */
      81             : /*      Binary Coverage Classes                                         */
      82             : /* ==================================================================== */
      83             : 
      84             : class OGRAVCBinDataSource;
      85             : 
      86             : /************************************************************************/
      87             : /*                            OGRAVCBinLayer                            */
      88             : /************************************************************************/
      89             : 
      90             : class OGRAVCBinLayer final : public OGRAVCLayer
      91             : {
      92             :     AVCE00Section *m_psSection;
      93             :     AVCBinFile *hFile;
      94             : 
      95             :     OGRAVCBinLayer *poArcLayer;
      96             :     bool bNeedReset;
      97             : 
      98             :     char szTableName[128];
      99             :     AVCBinFile *hTable;
     100             :     int nTableBaseField;
     101             :     int nTableAttrIndex;
     102             : 
     103             :     int nNextFID;
     104             : 
     105             :     bool FormPolygonGeometry(OGRFeature *poFeature, AVCPal *psPAL);
     106             : 
     107             :     bool CheckSetupTable();
     108             :     bool AppendTableFields(OGRFeature *poFeature);
     109             : 
     110             :   public:
     111             :     OGRAVCBinLayer(OGRAVCBinDataSource *poDS, AVCE00Section *psSectionIn);
     112             : 
     113             :     ~OGRAVCBinLayer();
     114             : 
     115             :     void ResetReading() override;
     116             :     OGRFeature *GetNextFeature() override;
     117             :     OGRFeature *GetFeature(GIntBig nFID) override;
     118             : 
     119             :     int TestCapability(const char *) override;
     120             : };
     121             : 
     122             : /************************************************************************/
     123             : /*                         OGRAVCBinDataSource                          */
     124             : /************************************************************************/
     125             : 
     126             : class OGRAVCBinDataSource final : public OGRAVCDataSource
     127             : {
     128             :     OGRLayer **papoLayers;
     129             :     int nLayers;
     130             : 
     131             :     AVCE00ReadPtr psAVC;
     132             : 
     133             :   public:
     134             :     OGRAVCBinDataSource();
     135             :     ~OGRAVCBinDataSource();
     136             : 
     137             :     int Open(const char *, int bTestOpen);
     138             : 
     139          13 :     int GetLayerCount() override
     140             :     {
     141          13 :         return nLayers;
     142             :     }
     143             : 
     144             :     OGRLayer *GetLayer(int) override;
     145             : 
     146             :     int TestCapability(const char *) override;
     147             : 
     148         220 :     AVCE00ReadPtr GetInfo()
     149             :     {
     150         220 :         return psAVC;
     151             :     }
     152             : };
     153             : 
     154             : /* ==================================================================== */
     155             : /*      E00 (ASCII) Coverage Classes                                    */
     156             : /* ==================================================================== */
     157             : 
     158             : /************************************************************************/
     159             : /*                            OGRAVCE00Layer                            */
     160             : /************************************************************************/
     161             : class OGRAVCE00Layer final : public OGRAVCLayer
     162             : {
     163             :     AVCE00Section *psSection;
     164             :     AVCE00ReadE00Ptr psRead;
     165             :     OGRAVCE00Layer *poArcLayer;
     166             :     int nFeatureCount;
     167             :     bool bNeedReset;
     168             :     bool bLastWasSequential = false;
     169             :     int nNextFID;
     170             : 
     171             :     AVCE00Section *psTableSection;
     172             :     AVCE00ReadE00Ptr psTableRead;
     173             :     char *pszTableFilename;
     174             :     int nTablePos;
     175             :     int nTableBaseField;
     176             :     int nTableAttrIndex;
     177             : 
     178             :     bool FormPolygonGeometry(OGRFeature *poFeature, AVCPal *psPAL);
     179             : 
     180             :   public:
     181             :     OGRAVCE00Layer(OGRAVCDataSource *poDS, AVCE00Section *psSectionIn);
     182             : 
     183             :     ~OGRAVCE00Layer();
     184             : 
     185             :     void ResetReading() override;
     186             :     OGRFeature *GetNextFeature() override;
     187             :     OGRFeature *GetFeature(GIntBig nFID) override;
     188             :     GIntBig GetFeatureCount(int bForce) override;
     189             :     bool CheckSetupTable(AVCE00Section *psTblSectionIn);
     190             :     bool AppendTableFields(OGRFeature *poFeature);
     191             : };
     192             : 
     193             : /************************************************************************/
     194             : /*                         OGRAVCE00DataSource                          */
     195             : /************************************************************************/
     196             : 
     197             : class OGRAVCE00DataSource final : public OGRAVCDataSource
     198             : {
     199             :     int nLayers;
     200             :     AVCE00ReadE00Ptr psE00;
     201             :     OGRAVCE00Layer **papoLayers;
     202             : 
     203             :   protected:
     204             :     int CheckAddTable(AVCE00Section *psTblSection);
     205             : 
     206             :   public:
     207             :     OGRAVCE00DataSource();
     208             :     virtual ~OGRAVCE00DataSource();
     209             : 
     210             :     int Open(const char *, int bTestOpen);
     211             : 
     212           2 :     AVCE00ReadE00Ptr GetInfo()
     213             :     {
     214           2 :         return psE00;
     215             :     }
     216             : 
     217          13 :     int GetLayerCount() override
     218             :     {
     219          13 :         return nLayers;
     220             :     }
     221             : 
     222             :     OGRLayer *GetLayer(int) override;
     223             :     int TestCapability(const char *) override;
     224             :     virtual OGRSpatialReference *DSGetSpatialRef() override;
     225             : };
     226             : 
     227             : #endif /* OGR_AVC_H_INCLUDED */

Generated by: LCOV version 1.14