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 */