LCOV - code coverage report
Current view: top level - frmts/wms - minidriver.cpp (source / functions) Hit Total Coverage
Test: gdal_filtered.info Lines: 28 33 84.8 %
Date: 2025-07-08 21:33:46 Functions: 7 8 87.5 %

          Line data    Source code
       1             : /******************************************************************************
       2             :  *
       3             :  * Project:  WMS Client Driver
       4             :  * Purpose:  WMSMiniDriverManager implementation.
       5             :  * Author:   Adam Nowacki, nowak@xpam.de
       6             :  *
       7             :  ******************************************************************************
       8             :  *
       9             :  * Copyright (c) 2007, Adam Nowacki
      10             :  *               2016, Lucian Plesea
      11             :  *
      12             :  * A single global MiniDriverManager exists, containing factories for all
      13             :  *possible types of WMS minidrivers.  Minidriver object factories get registered
      14             :  *in wmsdriver.cpp, during the WMS driver registration with GDAL
      15             :  *
      16             :  * SPDX-License-Identifier: MIT
      17             :  ****************************************************************************/
      18             : 
      19             : #include "wmsdriver.h"
      20             : 
      21             : class WMSMiniDriverManager
      22             : {
      23             :   public:
      24          10 :     WMSMiniDriverManager()
      25          10 :     {
      26          10 :     }
      27             : 
      28          10 :     ~WMSMiniDriverManager()
      29          10 :     {
      30          10 :         erase();
      31          10 :     }
      32             : 
      33             :   public:
      34             :     void Register(WMSMiniDriverFactory *mdf);
      35             :     // Clean up the minidriver factories
      36             :     void erase();
      37             :     WMSMiniDriverFactory *Find(const CPLString &name);
      38             : 
      39             :   protected:
      40             :     std::vector<WMSMiniDriverFactory *> m_mdfs{};
      41             : 
      42             :     CPL_DISALLOW_COPY_ASSIGN(WMSMiniDriverManager)
      43             : };
      44             : 
      45             : // Called by WMS driver deregister, also by destructor
      46          10 : void WMSMiniDriverManager::erase()
      47             : {
      48         130 :     for (size_t i = 0; i < m_mdfs.size(); i++)
      49         120 :         delete m_mdfs[i];
      50          10 :     m_mdfs.clear();
      51          10 : }
      52             : 
      53         470 : WMSMiniDriverFactory *WMSMiniDriverManager::Find(const CPLString &name)
      54             : {
      55        2213 :     for (size_t i = 0; i < m_mdfs.size(); i++)
      56        2093 :         if (EQUAL(name.c_str(), m_mdfs[i]->m_name))
      57         350 :             return m_mdfs[i];
      58         120 :     return nullptr;
      59             : }
      60             : 
      61         120 : void WMSMiniDriverManager::Register(WMSMiniDriverFactory *mdf)
      62             : {
      63             :     // Prevent duplicates
      64         120 :     if (!Find(mdf->m_name))
      65         120 :         m_mdfs.push_back(mdf);
      66             :     else  // Register takes ownership of factories, so it removes the duplicate
      67           0 :         delete mdf;
      68         120 : }
      69             : 
      70             : // global object containing minidriver factories
      71             : static WMSMiniDriverManager g_mini_driver_manager;
      72             : 
      73             : // If a matching factory is found in the global minidriver manager, it returns a
      74             : // new minidriver object
      75         350 : WMSMiniDriver *NewWMSMiniDriver(const CPLString &name)
      76             : {
      77         350 :     const WMSMiniDriverFactory *factory = g_mini_driver_manager.Find(name);
      78         350 :     if (factory == nullptr)
      79           0 :         return nullptr;
      80         350 :     return factory->New();
      81             : }
      82             : 
      83             : // Registers a minidriver factory with the global minidriver manager
      84         120 : void WMSRegisterMiniDriverFactory(WMSMiniDriverFactory *mdf)
      85             : {
      86         120 :     g_mini_driver_manager.Register(mdf);
      87         120 : }
      88             : 
      89           0 : void WMSDeregisterMiniDrivers(CPL_UNUSED GDALDriver *)
      90             : {
      91           0 :     g_mini_driver_manager.erase();
      92           0 : }

Generated by: LCOV version 1.14