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