LCOV - code coverage report
Current view: top level - ogr/ogrsf_frmts/sosi - ogrsosidriver.cpp (source / functions) Hit Total Coverage
Test: gdal_filtered.info Lines: 23 30 76.7 %
Date: 2024-11-21 22:18:42 Functions: 4 4 100.0 %

          Line data    Source code
       1             : /******************************************************************************
       2             :  *
       3             :  * Project:  SOSI Translator
       4             :  * Purpose:  Implements OGRSOSIDriver.
       5             :  * Author:   Thomas Hirsch, <thomas.hirsch statkart no>
       6             :  *
       7             :  ******************************************************************************
       8             :  * Copyright (c) 2010, Thomas Hirsch
       9             :  * Copyright (c) 2010, Even Rouault <even dot rouault at spatialys.com>
      10             :  *
      11             :  * SPDX-License-Identifier: MIT
      12             :  ****************************************************************************/
      13             : 
      14             : // Must be included before FYBA headers that mess with min() / max()
      15             : #include <mutex>
      16             : 
      17             : #include "ogr_sosi.h"
      18             : #include "ogrsosidrivercore.h"
      19             : 
      20             : static int bFYBAInit = FALSE;
      21             : static std::mutex oMutex;
      22             : 
      23             : /************************************************************************/
      24             : /*                          OGRSOSIInit()                               */
      25             : /************************************************************************/
      26             : 
      27           3 : static void OGRSOSIInit()
      28             : {
      29           6 :     std::lock_guard<std::mutex> oLock(oMutex);
      30           3 :     if (!bFYBAInit)
      31             :     {
      32           1 :         LC_Init(); /* Init FYBA */
      33           1 :         SOSIInitTypes();
      34           1 :         bFYBAInit = TRUE;
      35             :     }
      36           3 : }
      37             : 
      38             : /************************************************************************/
      39             : /*                        OGRSOSIDriverUnload()                         */
      40             : /************************************************************************/
      41             : 
      42           5 : static void OGRSOSIDriverUnload(CPL_UNUSED GDALDriver *poDriver)
      43             : {
      44             : 
      45           5 :     if (bFYBAInit)
      46             :     {
      47           0 :         LC_Close(); /* Close FYBA */
      48           0 :         SOSICleanupTypes();
      49           0 :         bFYBAInit = FALSE;
      50             :     }
      51           5 : }
      52             : 
      53             : /************************************************************************/
      54             : /*                              Open()                                  */
      55             : /************************************************************************/
      56             : 
      57           3 : static GDALDataset *OGRSOSIDriverOpen(GDALOpenInfo *poOpenInfo)
      58             : {
      59           3 :     if (OGRSOSIDriverIdentify(poOpenInfo) == FALSE)
      60           0 :         return nullptr;
      61             : 
      62           3 :     OGRSOSIInit();
      63             : 
      64           3 :     OGRSOSIDataSource *poDS = new OGRSOSIDataSource();
      65           3 :     if (!poDS->Open(poOpenInfo->pszFilename, 0))
      66             :     {
      67           0 :         delete poDS;
      68           0 :         return nullptr;
      69             :     }
      70             : 
      71           3 :     return poDS;
      72             : }
      73             : 
      74             : #ifdef WRITE_SUPPORT
      75             : /************************************************************************/
      76             : /*                              Create()                                */
      77             : /************************************************************************/
      78             : 
      79             : static GDALDataset *
      80             : OGRSOSIDriverCreate(const char *pszName, CPL_UNUSED int nBands,
      81             :                     CPL_UNUSED int nXSize, CPL_UNUSED int nYSize,
      82             :                     CPL_UNUSED GDALDataType eDT, CPL_UNUSED char **papszOptions)
      83             : {
      84             :     OGRSOSIInit();
      85             :     OGRSOSIDataSource *poDS = new OGRSOSIDataSource();
      86             :     if (!poDS->Create(pszName))
      87             :     {
      88             :         delete poDS;
      89             :         return NULL;
      90             :     }
      91             :     return poDS;
      92             : }
      93             : #endif
      94             : 
      95             : /************************************************************************/
      96             : /*                         RegisterOGRSOSI()                            */
      97             : /************************************************************************/
      98             : 
      99           9 : void RegisterOGRSOSI()
     100             : {
     101           9 :     if (GDALGetDriverByName(DRIVER_NAME) != nullptr)
     102           0 :         return;
     103             : 
     104           9 :     GDALDriver *poDriver = new GDALDriver();
     105           9 :     OGRSOSIDriverSetCommonMetadata(poDriver);
     106           9 :     poDriver->pfnOpen = OGRSOSIDriverOpen;
     107             : #ifdef WRITE_SUPPORT
     108             :     poDriver->pfnCreate = OGRSOSIDriverCreate;
     109             : #endif
     110           9 :     poDriver->pfnUnloadDriver = OGRSOSIDriverUnload;
     111             : 
     112           9 :     GetGDALDriverManager()->RegisterDriver(poDriver);
     113             : }

Generated by: LCOV version 1.14