LCOV - code coverage report
Current view: top level - ogr - ogrvrtgeometrytypes.cpp (source / functions) Hit Total Coverage
Test: gdal_filtered.info Lines: 24 29 82.8 %
Date: 2024-11-21 22:18:42 Functions: 2 2 100.0 %

          Line data    Source code
       1             : // SPDX-License-Identifier: MIT
       2             : // Copyright 2024, Even Rouault <even.rouault at spatialys.com>
       3             : 
       4             : #include "ogrvrtgeometrytypes.h"
       5             : 
       6             : /************************************************************************/
       7             : /*                       OGRVRTGetGeometryType()                        */
       8             : /************************************************************************/
       9             : 
      10             : #define STRINGIFY(x) x, #x
      11             : 
      12             : static const struct
      13             : {
      14             :     OGRwkbGeometryType eType;
      15             :     const char *pszName;
      16             :     bool bIsoFlags;
      17             : } asGeomTypeNames[] = {
      18             :     {STRINGIFY(wkbUnknown), false},
      19             : 
      20             :     {STRINGIFY(wkbPoint), false},
      21             :     {STRINGIFY(wkbLineString), false},
      22             :     {STRINGIFY(wkbPolygon), false},
      23             :     {STRINGIFY(wkbMultiPoint), false},
      24             :     {STRINGIFY(wkbMultiLineString), false},
      25             :     {STRINGIFY(wkbMultiPolygon), false},
      26             :     {STRINGIFY(wkbGeometryCollection), false},
      27             : 
      28             :     {STRINGIFY(wkbCircularString), true},
      29             :     {STRINGIFY(wkbCompoundCurve), true},
      30             :     {STRINGIFY(wkbCurvePolygon), true},
      31             :     {STRINGIFY(wkbMultiCurve), true},
      32             :     {STRINGIFY(wkbMultiSurface), true},
      33             :     {STRINGIFY(wkbCurve), true},
      34             :     {STRINGIFY(wkbSurface), true},
      35             :     {STRINGIFY(wkbPolyhedralSurface), true},
      36             :     {STRINGIFY(wkbTIN), true},
      37             :     {STRINGIFY(wkbTriangle), true},
      38             : 
      39             :     {STRINGIFY(wkbNone), false},
      40             :     {STRINGIFY(wkbLinearRing), false},
      41             : };
      42             : 
      43         494 : OGRwkbGeometryType OGRVRTGetGeometryType(const char *pszGType, int *pbError)
      44             : {
      45         494 :     if (pbError)
      46         494 :         *pbError = FALSE;
      47             : 
      48        1633 :     for (const auto &entry : asGeomTypeNames)
      49             :     {
      50        1632 :         if (EQUALN(pszGType, entry.pszName, strlen(entry.pszName)))
      51             :         {
      52         493 :             OGRwkbGeometryType eGeomType = entry.eType;
      53             : 
      54         493 :             if (strstr(pszGType, "25D") != nullptr ||
      55         460 :                 strstr(pszGType, "Z") != nullptr)
      56          54 :                 eGeomType = wkbSetZ(eGeomType);
      57         493 :             if (pszGType[strlen(pszGType) - 1] == 'M' ||
      58         465 :                 pszGType[strlen(pszGType) - 2] == 'M')
      59          28 :                 eGeomType = wkbSetM(eGeomType);
      60         493 :             return eGeomType;
      61             :         }
      62             :     }
      63             : 
      64           1 :     if (pbError)
      65           1 :         *pbError = TRUE;
      66           1 :     return wkbUnknown;
      67             : }
      68             : 
      69             : /************************************************************************/
      70             : /*                     OGRVRTGetSerializedGeometryType()                */
      71             : /************************************************************************/
      72             : 
      73          54 : std::string OGRVRTGetSerializedGeometryType(OGRwkbGeometryType eGeomType)
      74             : {
      75         294 :     for (const auto &entry : asGeomTypeNames)
      76             :     {
      77         294 :         if (entry.eType == wkbFlatten(eGeomType))
      78             :         {
      79         108 :             std::string osRet(entry.pszName);
      80          54 :             if (entry.bIsoFlags || OGR_GT_HasM(eGeomType))
      81             :             {
      82           0 :                 if (OGR_GT_HasZ(eGeomType))
      83             :                 {
      84           0 :                     osRet += "Z";
      85             :                 }
      86           0 :                 if (OGR_GT_HasM(eGeomType))
      87             :                 {
      88           0 :                     osRet += "M";
      89             :                 }
      90             :             }
      91          54 :             else if (OGR_GT_HasZ(eGeomType))
      92             :             {
      93          21 :                 osRet += "25D";
      94             :             }
      95          54 :             return osRet;
      96             :         }
      97             :     }
      98           0 :     return std::string();
      99             : }

Generated by: LCOV version 1.14