LCOV - code coverage report
Current view: top level - ogr/ogrsf_frmts/nas - nasreaderp.h (source / functions) Hit Total Coverage
Test: gdal_filtered.info Lines: 13 20 65.0 %
Date: 2024-11-21 22:18:42 Functions: 6 9 66.7 %

          Line data    Source code
       1             : /******************************************************************************
       2             :  * $Id$
       3             :  *
       4             :  * Project:  NAS Reader
       5             :  * Purpose:  Private Declarations for OGR NAS Reader code.
       6             :  * Author:   Frank Warmerdam, warmerdam@pobox.com
       7             :  *
       8             :  ******************************************************************************
       9             :  * Copyright (c) 2008, Frank Warmerdam
      10             :  * Copyright (c) 2010-2013, Even Rouault <even dot rouault at spatialys.com>
      11             :  *
      12             :  * SPDX-License-Identifier: MIT
      13             :  ****************************************************************************/
      14             : 
      15             : #ifndef CPL_NASREADERP_H_INCLUDED
      16             : #define CPL_NASREADERP_H_INCLUDED
      17             : 
      18             : #include "xercesc_headers.h"
      19             : #include "ogr_xerces.h"
      20             : 
      21             : #include "gmlreader.h"
      22             : #include "gmlreaderp.h"
      23             : #include "ogr_api.h"
      24             : #include "ogr_geometry.h"
      25             : #include "cpl_string.h"
      26             : #include <list>
      27             : 
      28             : IGMLReader *CreateNASReader();
      29             : 
      30             : class NASReader;
      31             : 
      32             : CPL_C_START
      33             : OGRGeometryH OGR_G_CreateFromGML3(const char *pszGML);
      34             : CPL_C_END
      35             : 
      36             : /************************************************************************/
      37             : /*                              NASHandler                              */
      38             : /************************************************************************/
      39             : class NASHandler final : public DefaultHandler
      40             : {
      41             :     NASReader *m_poReader;
      42             : 
      43             :     char *m_pszCurField;
      44             : 
      45             :     char *m_pszGeometry;
      46             :     int m_nGeomAlloc;
      47             :     int m_nGeomLen;
      48             : 
      49             :     int m_nGeometryDepth;
      50             :     int m_nGeometryPropertyIndex;
      51             :     bool IsGeometryElement(const char *);
      52             : 
      53             :     int m_nDepth;
      54             :     int m_nDepthFeature;
      55             :     bool m_bIgnoreFeature;
      56             : 
      57             :     CPLString m_osDeleteContext;
      58             :     CPLString m_osTypeName;
      59             :     CPLString m_osReplacingFID;
      60             :     CPLString m_osSafeToIgnore;
      61             :     CPLString m_osUpdatePropertyName;
      62             :     CPLString m_osUpdateEnds;
      63             :     CPLString m_osFeatureId;
      64             :     std::list<CPLString> m_UpdateOccasions;
      65             : 
      66             :     CPLString m_osElementName;
      67             :     CPLString m_osCharacters;
      68             : 
      69             :     const Locator *m_Locator;
      70             : 
      71             :     int m_nEntityCounter = 0;
      72             : 
      73             :   public:
      74             :     explicit NASHandler(NASReader *poReader);
      75             :     virtual ~NASHandler();
      76             : 
      77             :     void startElement(const XMLCh *const uri, const XMLCh *const localname,
      78             :                       const XMLCh *const qname,
      79             :                       const Attributes &attrs) override;
      80             :     void endElement(const XMLCh *const uri, const XMLCh *const localname,
      81             :                     const XMLCh *const qname) override;
      82             : #if XERCES_VERSION_MAJOR >= 3
      83             :     void characters(const XMLCh *const chars, const XMLSize_t length) override;
      84             : #else
      85             :     void characters(const XMLCh *const chars, const unsigned int length);
      86             : #endif
      87             : 
      88             :     void fatalError(const SAXParseException &) override;
      89             : 
      90             :     void startEntity(const XMLCh *const name) override;
      91             : 
      92             :     void setDocumentLocator(const Locator *locator) override;
      93             : 
      94             :     CPLString GetAttributes(const Attributes *attr);
      95             : };
      96             : 
      97             : /************************************************************************/
      98             : /*                             GMLReadState                             */
      99             : /************************************************************************/
     100             : 
     101             : // for now, use existing gmlreadstate.
     102             : #ifdef notdef
     103             : class GMLReadState
     104             : {
     105             :     void RebuildPath();
     106             : 
     107             :   public:
     108             :     GMLReadState();
     109             :     ~GMLReadState();
     110             : 
     111             :     void PushPath(const char *pszElement);
     112             :     void PopPath();
     113             : 
     114             :     int MatchPath(const char *pszPathInput);
     115             : 
     116             :     const char *GetPath() const
     117             :     {
     118             :         return m_pszPath;
     119             :     }
     120             : 
     121             :     const char *GetLastComponent() const;
     122             : 
     123             :     GMLFeature *m_poFeature;
     124             :     GMLReadState *m_poParentState;
     125             : 
     126             :     char *m_pszPath;  // element path ... | as separator.
     127             : 
     128             :     int m_nPathLength;
     129             :     char **m_papszPathComponents;
     130             : };
     131             : #endif
     132             : 
     133             : /************************************************************************/
     134             : /*                              NASReader                               */
     135             : /************************************************************************/
     136             : 
     137             : class NASReader final : public IGMLReader
     138             : {
     139             :   private:
     140             :     bool m_bClassListLocked;
     141             : 
     142             :     int m_nClassCount;
     143             :     GMLFeatureClass **m_papoClass;
     144             : 
     145             :     char *m_pszFilename;
     146             : 
     147             :     NASHandler *m_poNASHandler;
     148             :     SAX2XMLReader *m_poSAXReader;
     149             :     bool m_bReadStarted;
     150             :     bool m_bXercesInitialized;
     151             :     XMLPScanToken m_oToFill;
     152             : 
     153             :     GMLReadState *m_poState;
     154             : 
     155             :     GMLFeature *m_poCompleteFeature;
     156             :     VSILFILE *m_fp;
     157             :     InputSource *m_GMLInputSource;
     158             : 
     159             :     bool SetupParser();
     160             :     void CleanupParser();
     161             : 
     162             :     char *m_pszFilteredClassName;
     163             :     bool m_bStopParsing = false;
     164             : 
     165             :   public:
     166             :     NASReader();
     167             :     virtual ~NASReader();
     168             : 
     169           9 :     bool IsClassListLocked() const override
     170             :     {
     171           9 :         return m_bClassListLocked;
     172             :     }
     173             : 
     174           5 :     void SetClassListLocked(bool bFlag) override
     175             :     {
     176           5 :         m_bClassListLocked = bFlag;
     177           5 :     }
     178             : 
     179             :     void SetSourceFile(const char *pszFilename) override;
     180             :     const char *GetSourceFileName() override;
     181             : 
     182          53 :     int GetClassCount() const override
     183             :     {
     184          53 :         return m_nClassCount;
     185             :     }
     186             : 
     187             :     GMLFeatureClass *GetClass(int i) const override;
     188             :     GMLFeatureClass *GetClass(const char *pszName) const override;
     189             : 
     190             :     int AddClass(GMLFeatureClass *poClass) override;
     191             :     void ClearClasses() override;
     192             : 
     193             :     GMLFeature *NextFeature() override;
     194             : 
     195             :     bool LoadClasses(const char *pszFile = nullptr) override;
     196             :     bool SaveClasses(const char *pszFile = nullptr) override;
     197             : 
     198             :     bool PrescanForSchema(bool bGetExtents = true,
     199             :                           bool bOnlyDetectSRS = false) override;
     200             :     bool PrescanForTemplate() override;
     201             :     void ResetReading() override;
     202             : 
     203             :     bool ParseXSD(const char * /* pszFile */)
     204             :     {
     205             :         return false;
     206             :     }
     207             : 
     208             :     bool ResolveXlinks(const char *pszFile, bool *pbOutIsTempFile,
     209             :                        char **papszSkip = nullptr,
     210             :                        const bool bStrict = false) override;
     211             : 
     212             :     bool HugeFileResolver(const char *pszFile, bool bSqliteIsTempFile,
     213             :                           int iSqliteCacheMB) override;
     214             : 
     215             :     // ---
     216             : 
     217        1402 :     GMLReadState *GetState() const
     218             :     {
     219        1402 :         return m_poState;
     220             :     }
     221             : 
     222             :     void PopState();
     223             :     void PushState(GMLReadState *);
     224             : 
     225             :     bool IsFeatureElement(const char *pszElement);
     226             :     bool IsAttributeElement(const char *pszElement, const Attributes &attrs);
     227             : 
     228             :     void PushFeature(const char *pszElement, const Attributes &attrs);
     229             : 
     230             :     void SetFeaturePropertyDirectly(const char *pszElement, char *pszValue);
     231             : 
     232           0 :     void StopParsing()
     233             :     {
     234           0 :         m_bStopParsing = true;
     235           0 :     }
     236             : 
     237           1 :     bool HasStoppedParsing() override
     238             :     {
     239           1 :         return m_bStopParsing;
     240             :     }
     241             : 
     242             :     int GetAttributeElementIndex(const char *pszElement, int nLen,
     243             :                                  const char *pszAttrKey);
     244             :     void DealWithAttributes(const char *pszElement, int nLenName,
     245             :                             const Attributes &attrs);
     246             : 
     247           0 :     virtual const char *GetGlobalSRSName() override
     248             :     {
     249           0 :         return nullptr;
     250             :     }
     251             : 
     252           0 :     virtual bool CanUseGlobalSRSName() override
     253             :     {
     254           0 :         return false;
     255             :     }
     256             : 
     257             :     bool SetFilteredClassName(const char *pszClassName) override;
     258             : 
     259          11 :     const char *GetFilteredClassName() override
     260             :     {
     261          11 :         return m_pszFilteredClassName;
     262             :     }
     263             : 
     264             :     static OGRGeometry *ConvertGeometry(OGRGeometry *);
     265             : };
     266             : 
     267             : #endif /* CPL_NASREADERP_H_INCLUDED */

Generated by: LCOV version 1.14