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

          Line data    Source code
       1             : /******************************************************************************
       2             :  *
       3             :  * Project:  FlatGeobuf driver
       4             :  * Purpose:  GeometryReader class declarations.
       5             :  * Author:   Björn Harrtell <bjorn at wololo dot org>
       6             :  *
       7             :  ******************************************************************************
       8             :  * Copyright (c) 2018-2019, Björn Harrtell <bjorn at wololo dot org>
       9             :  *
      10             :  * SPDX-License-Identifier: MIT
      11             :  ****************************************************************************/
      12             : 
      13             : #ifndef FLATGEOBUF_GEOMETRYREADER_H_INCLUDED
      14             : #define FLATGEOBUF_GEOMETRYREADER_H_INCLUDED
      15             : 
      16             : #include "feature_generated.h"
      17             : #include "ogr_p.h"
      18             : 
      19             : namespace ogr_flatgeobuf
      20             : {
      21             : 
      22             : class GeometryReader
      23             : {
      24             :   private:
      25             :     const FlatGeobuf::Geometry *m_geometry;
      26             :     const FlatGeobuf::GeometryType m_geometryType;
      27             :     const bool m_hasZ;
      28             :     const bool m_hasM;
      29             : 
      30             :     const double *m_xy = nullptr;
      31             :     uint32_t m_xylength = 0;
      32             :     uint32_t m_length = 0;
      33             :     uint32_t m_offset = 0;
      34             : 
      35             :     OGRPoint *readPoint();
      36             :     OGRMultiPoint *readMultiPoint();
      37             :     OGRErr readSimpleCurve(OGRSimpleCurve *c);
      38             :     OGRMultiLineString *readMultiLineString();
      39             :     OGRPolygon *readPolygon();
      40             :     OGRMultiPolygon *readMultiPolygon();
      41             :     OGRGeometryCollection *readGeometryCollection();
      42             :     OGRCompoundCurve *readCompoundCurve();
      43             :     OGRCurvePolygon *readCurvePolygon();
      44             :     OGRMultiCurve *readMultiCurve();
      45             :     OGRMultiSurface *readMultiSurface();
      46             :     OGRPolyhedralSurface *readPolyhedralSurface();
      47             :     OGRTriangulatedSurface *readTIN();
      48             :     OGRTriangle *readTriangle();
      49             : 
      50          76 :     OGRGeometry *readPart(const FlatGeobuf::Geometry *part)
      51             :     {
      52          76 :         return GeometryReader(part, m_hasZ, m_hasM).read();
      53             :     }
      54             : 
      55          44 :     OGRGeometry *readPart(const FlatGeobuf::Geometry *part,
      56             :                           const FlatGeobuf::GeometryType geometryType)
      57             :     {
      58          44 :         return GeometryReader(part, geometryType, m_hasZ, m_hasM).read();
      59             :     }
      60             : 
      61         551 :     template <class T> T *readSimpleCurve(const bool halfLength = false)
      62             :     {
      63         551 :         if (halfLength)
      64          58 :             m_length = m_length / 2;
      65         551 :         const auto csc = new T();
      66         551 :         if (readSimpleCurve(csc) != OGRERR_NONE)
      67             :         {
      68           0 :             delete csc;
      69           0 :             return nullptr;
      70             :         }
      71         551 :         return csc;
      72             :     }
      73             : 
      74             :   public:
      75         733 :     GeometryReader(const FlatGeobuf::Geometry *geometry,
      76             :                    const FlatGeobuf::GeometryType geometryType, const bool hasZ,
      77             :                    const bool hasM)
      78         733 :         : m_geometry(geometry), m_geometryType(geometryType), m_hasZ(hasZ),
      79         733 :           m_hasM(hasM)
      80             :     {
      81         733 :     }
      82             : 
      83          76 :     GeometryReader(const FlatGeobuf::Geometry *geometry, const bool hasZ,
      84             :                    const bool hasM)
      85         152 :         : m_geometry(geometry), m_geometryType(geometry->type()), m_hasZ(hasZ),
      86          76 :           m_hasM(hasM)
      87             :     {
      88          76 :     }
      89             : 
      90             :     OGRGeometry *read();
      91             : };
      92             : 
      93             : }  // namespace ogr_flatgeobuf
      94             : 
      95             : #endif /* ndef FLATGEOBUF_GEOMETRYREADER_H_INCLUDED */

Generated by: LCOV version 1.14