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 14 71.4 %
Date: 2024-05-06 22:33:47 Functions: 5 7 71.4 %

          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             :  * Permission is hereby granted, free of charge, to any person obtaining a
      12             :  * copy of this software and associated documentation files (the "Software"),
      13             :  * to deal in the Software without restriction, including without limitation
      14             :  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
      15             :  * and/or sell copies of the Software, and to permit persons to whom the
      16             :  * Software is furnished to do so, subject to the following conditions:
      17             :  *
      18             :  * The above copyright notice and this permission notice shall be included
      19             :  * in all copies or substantial portions of the Software.
      20             :  *
      21             :  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
      22             :  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
      23             :  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
      24             :  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
      25             :  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
      26             :  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
      27             :  * DEALINGS IN THE SOFTWARE.
      28             :  ****************************************************************************/
      29             : 
      30             : #ifndef OGR_AVC_H_INCLUDED
      31             : #define OGR_AVC_H_INCLUDED
      32             : 
      33             : #include "ogrsf_frmts.h"
      34             : #include "avc.h"
      35             : 
      36             : constexpr int SERIAL_ACCESS_FID = INT_MIN;
      37             : 
      38             : class OGRAVCDataSource;
      39             : 
      40             : /************************************************************************/
      41             : /*                             OGRAVCLayer                              */
      42             : /************************************************************************/
      43             : 
      44             : class OGRAVCLayer CPL_NON_FINAL : public OGRLayer
      45             : {
      46             :   protected:
      47             :     OGRFeatureDefn *poFeatureDefn;
      48             : 
      49             :     OGRAVCDataSource *poDS;
      50             : 
      51             :     AVCFileType eSectionType;
      52             : 
      53             :     bool m_bEOF = false;
      54             : 
      55             :     int SetupFeatureDefinition(const char *pszName);
      56             :     bool AppendTableDefinition(AVCTableDef *psTableDef);
      57             : 
      58             :     bool MatchesSpatialFilter(void *);
      59             :     OGRFeature *TranslateFeature(void *);
      60             : 
      61             :     bool TranslateTableFields(OGRFeature *poFeature, int nFieldBase,
      62             :                               AVCTableDef *psTableDef, AVCField *pasFields);
      63             : 
      64             :   public:
      65             :     OGRAVCLayer(AVCFileType eSectionType, OGRAVCDataSource *poDS);
      66             :     virtual ~OGRAVCLayer();
      67             : 
      68         946 :     OGRFeatureDefn *GetLayerDefn() override
      69             :     {
      70         946 :         return poFeatureDefn;
      71             :     }
      72             : 
      73             :     virtual int TestCapability(const char *) override;
      74             : };
      75             : 
      76             : /************************************************************************/
      77             : /*                         OGRAVCDataSource                             */
      78             : /************************************************************************/
      79             : 
      80             : class OGRAVCDataSource CPL_NON_FINAL : public OGRDataSource
      81             : {
      82             :   protected:
      83             :     bool m_bSRSFetched = false;
      84             :     OGRSpatialReference *poSRS;
      85             :     char *pszCoverageName;
      86             : 
      87             :   public:
      88             :     OGRAVCDataSource();
      89             :     virtual ~OGRAVCDataSource();
      90             : 
      91             :     virtual OGRSpatialReference *DSGetSpatialRef();
      92             : 
      93             :     const char *GetCoverageName();
      94             : };
      95             : 
      96             : /* ==================================================================== */
      97             : /*      Binary Coverage Classes                                         */
      98             : /* ==================================================================== */
      99             : 
     100             : class OGRAVCBinDataSource;
     101             : 
     102             : /************************************************************************/
     103             : /*                            OGRAVCBinLayer                            */
     104             : /************************************************************************/
     105             : 
     106             : class OGRAVCBinLayer final : public OGRAVCLayer
     107             : {
     108             :     AVCE00Section *m_psSection;
     109             :     AVCBinFile *hFile;
     110             : 
     111             :     OGRAVCBinLayer *poArcLayer;
     112             :     bool bNeedReset;
     113             : 
     114             :     char szTableName[128];
     115             :     AVCBinFile *hTable;
     116             :     int nTableBaseField;
     117             :     int nTableAttrIndex;
     118             : 
     119             :     int nNextFID;
     120             : 
     121             :     bool FormPolygonGeometry(OGRFeature *poFeature, AVCPal *psPAL);
     122             : 
     123             :     bool CheckSetupTable();
     124             :     bool AppendTableFields(OGRFeature *poFeature);
     125             : 
     126             :   public:
     127             :     OGRAVCBinLayer(OGRAVCBinDataSource *poDS, AVCE00Section *psSectionIn);
     128             : 
     129             :     ~OGRAVCBinLayer();
     130             : 
     131             :     void ResetReading() override;
     132             :     OGRFeature *GetNextFeature() override;
     133             :     OGRFeature *GetFeature(GIntBig nFID) override;
     134             : 
     135             :     int TestCapability(const char *) override;
     136             : };
     137             : 
     138             : /************************************************************************/
     139             : /*                         OGRAVCBinDataSource                          */
     140             : /************************************************************************/
     141             : 
     142             : class OGRAVCBinDataSource final : public OGRAVCDataSource
     143             : {
     144             :     OGRLayer **papoLayers;
     145             :     int nLayers;
     146             : 
     147             :     char *pszName;
     148             : 
     149             :     AVCE00ReadPtr psAVC;
     150             : 
     151             :   public:
     152             :     OGRAVCBinDataSource();
     153             :     ~OGRAVCBinDataSource();
     154             : 
     155             :     int Open(const char *, int bTestOpen);
     156             : 
     157           0 :     const char *GetName() override
     158             :     {
     159           0 :         return pszName;
     160             :     }
     161             : 
     162          13 :     int GetLayerCount() override
     163             :     {
     164          13 :         return nLayers;
     165             :     }
     166             : 
     167             :     OGRLayer *GetLayer(int) override;
     168             : 
     169             :     int TestCapability(const char *) override;
     170             : 
     171         220 :     AVCE00ReadPtr GetInfo()
     172             :     {
     173         220 :         return psAVC;
     174             :     }
     175             : };
     176             : 
     177             : /* ==================================================================== */
     178             : /*      E00 (ASCII) Coverage Classes                                    */
     179             : /* ==================================================================== */
     180             : 
     181             : /************************************************************************/
     182             : /*                            OGRAVCE00Layer                            */
     183             : /************************************************************************/
     184             : class OGRAVCE00Layer final : public OGRAVCLayer
     185             : {
     186             :     AVCE00Section *psSection;
     187             :     AVCE00ReadE00Ptr psRead;
     188             :     OGRAVCE00Layer *poArcLayer;
     189             :     int nFeatureCount;
     190             :     bool bNeedReset;
     191             :     bool bLastWasSequential = false;
     192             :     int nNextFID;
     193             : 
     194             :     AVCE00Section *psTableSection;
     195             :     AVCE00ReadE00Ptr psTableRead;
     196             :     char *pszTableFilename;
     197             :     int nTablePos;
     198             :     int nTableBaseField;
     199             :     int nTableAttrIndex;
     200             : 
     201             :     bool FormPolygonGeometry(OGRFeature *poFeature, AVCPal *psPAL);
     202             : 
     203             :   public:
     204             :     OGRAVCE00Layer(OGRAVCDataSource *poDS, AVCE00Section *psSectionIn);
     205             : 
     206             :     ~OGRAVCE00Layer();
     207             : 
     208             :     void ResetReading() override;
     209             :     OGRFeature *GetNextFeature() override;
     210             :     OGRFeature *GetFeature(GIntBig nFID) override;
     211             :     GIntBig GetFeatureCount(int bForce) override;
     212             :     bool CheckSetupTable(AVCE00Section *psTblSectionIn);
     213             :     bool AppendTableFields(OGRFeature *poFeature);
     214             : };
     215             : 
     216             : /************************************************************************/
     217             : /*                         OGRAVCE00DataSource                          */
     218             : /************************************************************************/
     219             : 
     220             : class OGRAVCE00DataSource final : public OGRAVCDataSource
     221             : {
     222             :     int nLayers;
     223             :     char *pszName;
     224             :     AVCE00ReadE00Ptr psE00;
     225             :     OGRAVCE00Layer **papoLayers;
     226             : 
     227             :   protected:
     228             :     int CheckAddTable(AVCE00Section *psTblSection);
     229             : 
     230             :   public:
     231             :     OGRAVCE00DataSource();
     232             :     virtual ~OGRAVCE00DataSource();
     233             : 
     234             :     int Open(const char *, int bTestOpen);
     235             : 
     236           2 :     AVCE00ReadE00Ptr GetInfo()
     237             :     {
     238           2 :         return psE00;
     239             :     }
     240             : 
     241           0 :     const char *GetName() override
     242             :     {
     243           0 :         return pszName;
     244             :     }
     245             : 
     246          13 :     int GetLayerCount() override
     247             :     {
     248          13 :         return nLayers;
     249             :     }
     250             : 
     251             :     OGRLayer *GetLayer(int) override;
     252             :     int TestCapability(const char *) override;
     253             :     virtual OGRSpatialReference *DSGetSpatialRef() override;
     254             : };
     255             : 
     256             : #endif /* OGR_AVC_H_INCLUDED */

Generated by: LCOV version 1.14