LCOV - code coverage report
Current view: top level - ogr/ogrsf_frmts/ntf - ntf_codelist.cpp (source / functions) Hit Total Coverage
Test: gdal_filtered.info Lines: 0 45 0.0 %
Date: 2024-11-25 13:07:18 Functions: 0 3 0.0 %

          Line data    Source code
       1             : /******************************************************************************
       2             :  *
       3             :  * Project:  NTF Translator
       4             :  * Purpose:  NTFCodeList class implementation.
       5             :  * Author:   Frank Warmerdam, warmerdam@pobox.com
       6             :  *
       7             :  ******************************************************************************
       8             :  * Copyright (c) 2001, Frank Warmerdam
       9             :  *
      10             :  * SPDX-License-Identifier: MIT
      11             :  ****************************************************************************/
      12             : 
      13             : #include <algorithm>
      14             : #include <stdarg.h>
      15             : #include "ntf.h"
      16             : #include "cpl_conv.h"
      17             : #include "cpl_string.h"
      18             : 
      19             : /************************************************************************/
      20             : /*                             NTFCodeList                              */
      21             : /************************************************************************/
      22             : 
      23           0 : NTFCodeList::NTFCodeList(NTFRecord *poRecord)
      24           0 :     : nNumCode(std::max(0, atoi(poRecord->GetField(20, 22)))),
      25           0 :       papszCodeVal(static_cast<char **>(CPLMalloc(sizeof(char *) * nNumCode))),
      26           0 :       papszCodeDes(static_cast<char **>(CPLMalloc(sizeof(char *) * nNumCode)))
      27             : {
      28             : 
      29           0 :     CPLAssert(EQUAL(poRecord->GetField(1, 2), "42"));
      30             : 
      31           0 :     snprintf(szValType, sizeof(szValType), "%s", poRecord->GetField(13, 14));
      32           0 :     snprintf(szFInter, sizeof(szFInter), "%s", poRecord->GetField(15, 19));
      33             : 
      34           0 :     const int nRecordLen = poRecord->GetLength();
      35           0 :     const char *pszText = poRecord->GetData() + 22;
      36           0 :     int iThisField = 0;
      37           0 :     for (; nRecordLen > 22 && *pszText != '\0' && iThisField < nNumCode;
      38             :          iThisField++)
      39             :     {
      40           0 :         char szVal[128] = {};
      41           0 :         int iLen = 0;
      42           0 :         while (iLen < static_cast<int>(sizeof(szVal)) - 1 && *pszText != '\\' &&
      43           0 :                *pszText != '\0')
      44             :         {
      45           0 :             szVal[iLen++] = *(pszText++);
      46             :         }
      47           0 :         szVal[iLen] = '\0';
      48             : 
      49           0 :         if (*pszText == '\\')
      50           0 :             pszText++;
      51             : 
      52           0 :         iLen = 0;
      53           0 :         char szDes[128] = {};
      54           0 :         while (iLen < static_cast<int>(sizeof(szDes)) - 1 && *pszText != '\\' &&
      55           0 :                *pszText != '\0')
      56             :         {
      57           0 :             szDes[iLen++] = *(pszText++);
      58             :         }
      59           0 :         szDes[iLen] = '\0';
      60             : 
      61           0 :         if (*pszText == '\\')
      62           0 :             pszText++;
      63             : 
      64           0 :         papszCodeVal[iThisField] = CPLStrdup(szVal);
      65           0 :         papszCodeDes[iThisField] = CPLStrdup(szDes);
      66             :     }
      67             : 
      68           0 :     if (iThisField < nNumCode)
      69             :     {
      70           0 :         nNumCode = iThisField;
      71           0 :         CPLDebug("NTF", "Didn't get all the expected fields from a CODELIST.");
      72             :     }
      73           0 : }
      74             : 
      75             : /************************************************************************/
      76             : /*                            ~NTFCodeList()                            */
      77             : /************************************************************************/
      78             : 
      79           0 : NTFCodeList::~NTFCodeList()
      80             : 
      81             : {
      82           0 :     for (int i = 0; i < nNumCode; i++)
      83             :     {
      84           0 :         CPLFree(papszCodeVal[i]);
      85           0 :         CPLFree(papszCodeDes[i]);
      86             :     }
      87             : 
      88           0 :     CPLFree(papszCodeVal);
      89           0 :     CPLFree(papszCodeDes);
      90           0 : }
      91             : 
      92             : /************************************************************************/
      93             : /*                               Lookup()                               */
      94             : /************************************************************************/
      95             : 
      96           0 : const char *NTFCodeList::Lookup(const char *pszCode)
      97             : 
      98             : {
      99           0 :     for (int i = 0; i < nNumCode; i++)
     100             :     {
     101           0 :         if (EQUAL(pszCode, papszCodeVal[i]))
     102           0 :             return papszCodeDes[i];
     103             :     }
     104             : 
     105           0 :     return nullptr;
     106             : }

Generated by: LCOV version 1.14