LCOV - code coverage report
Current view: top level - frmts/pcidsk/sdk/core - pcidsk_pubutils.cpp (source / functions) Hit Total Coverage
Test: gdal_filtered.info Lines: 72 140 51.4 %
Date: 2024-11-21 22:18:42 Functions: 4 5 80.0 %

          Line data    Source code
       1             : /******************************************************************************
       2             :  *
       3             :  * Purpose:  Various public (documented) utility functions.
       4             :  *
       5             :  ******************************************************************************
       6             :  * Copyright (c) 2009
       7             :  * PCI Geomatics, 90 Allstate Parkway, Markham, Ontario, Canada.
       8             :  *
       9             :  * SPDX-License-Identifier: MIT
      10             :  ****************************************************************************/
      11             : #include "pcidsk_config.h"
      12             : #include "pcidsk_types.h"
      13             : #include "pcidsk_exception.h"
      14             : #include "core/pcidsk_utils.h"
      15             : #include <cstdlib>
      16             : #include <cstring>
      17             : 
      18             : using namespace PCIDSK;
      19             : 
      20             : /************************************************************************/
      21             : /*                            DataTypeSize()                            */
      22             : /************************************************************************/
      23             : 
      24             : /**
      25             :  * Return size of data type.
      26             :  *
      27             :  * Note that type CHN_BIT exists to represent one bit backed data from
      28             :  * bitmap segments, but because the return of this functions is measured
      29             :  * in bytes, the size of a CHN_BIT pixel cannot be properly returned (one
      30             :  * eighth of a byte), so "1" is returned instead.
      31             :  *
      32             :  * @param chan_type the channel type enumeration value.
      33             :  *
      34             :  * @return the size of the passed data type in bytes, or zero for unknown
      35             :  * values.
      36             :  */
      37             : 
      38        3010 : int PCIDSK::DataTypeSize( eChanType chan_type )
      39             : 
      40             : {
      41        3010 :     switch( chan_type )
      42             :     {
      43        1106 :       case CHN_8U:
      44        1106 :         return 1;
      45         159 :       case CHN_16S:
      46         159 :         return 2;
      47         380 :       case CHN_16U:
      48         380 :         return 2;
      49         111 :       case CHN_32S:
      50         111 :         return 4;
      51         111 :       case CHN_32U:
      52         111 :         return 4;
      53         159 :       case CHN_32R:
      54         159 :         return 4;
      55         111 :       case CHN_64S:
      56         111 :         return 8;
      57         111 :       case CHN_64U:
      58         111 :         return 8;
      59         111 :       case CHN_64R:
      60         111 :         return 8;
      61         111 :       case CHN_C16U:
      62         111 :         return 4;
      63         159 :       case CHN_C16S:
      64         159 :         return 4;
      65         111 :       case CHN_C32U:
      66         111 :         return 8;
      67         111 :       case CHN_C32S:
      68         111 :         return 8;
      69         159 :       case CHN_C32R:
      70         159 :         return 8;
      71           0 :       case CHN_BIT:
      72           0 :         return 1; // not really accurate!
      73           0 :       default:
      74           0 :         return 0;
      75             :     }
      76             : }
      77             : 
      78             : /************************************************************************/
      79             : /*                            DataTypeName()                            */
      80             : /************************************************************************/
      81             : 
      82             : /**
      83             :  * Return name for the data type.
      84             :  *
      85             :  * The returned values are suitable for display to people, and matches
      86             :  * the portion of the name after the underscore (i.e. "8U" for CHN_8U.
      87             :  *
      88             :  * @param chan_type the channel type enumeration value to be translated.
      89             :  *
      90             :  * @return a string representing the data type.
      91             :  */
      92             : 
      93         131 : const char * PCIDSK::DataTypeName( eChanType chan_type )
      94             : 
      95             : {
      96         131 :     switch( chan_type )
      97             :     {
      98          92 :       case CHN_8U:
      99          92 :         return "8U";
     100           5 :       case CHN_16S:
     101           5 :         return "16S";
     102          19 :       case CHN_16U:
     103          19 :         return "16U";
     104           0 :       case CHN_32S:
     105           0 :         return "32S";
     106           0 :       case CHN_32U:
     107           0 :         return "32U";
     108           5 :       case CHN_32R:
     109           5 :         return "32R";
     110           0 :       case CHN_64S:
     111           0 :         return "64S";
     112           0 :       case CHN_64U:
     113           0 :         return "64U";
     114           0 :       case CHN_64R:
     115           0 :         return "64R";
     116           0 :       case CHN_C16U:
     117           0 :         return "C16U";
     118           5 :       case CHN_C16S:
     119           5 :         return "C16S";
     120           0 :       case CHN_C32U:
     121           0 :         return "C32U";
     122           0 :       case CHN_C32S:
     123           0 :         return "C32S";
     124           5 :       case CHN_C32R:
     125           5 :         return "C32R";
     126           0 :       case CHN_BIT:
     127           0 :         return "BIT";
     128           0 :       default:
     129           0 :         return "UNK";
     130             :     }
     131             : }
     132             : 
     133             : /************************************************************************/
     134             : /*                      GetDataTypeFromName()                           */
     135             : /************************************************************************/
     136             : 
     137             : /**
     138             :  * @brief Return the segment type code based on the contents of type_name
     139             :  *
     140             :  * @param pszDataType the type name, as a string
     141             :  *
     142             :  * @return the channel type code
     143             :  */
     144         388 : eChanType PCIDSK::GetDataTypeFromName(const char * pszDataType)
     145             : {
     146         388 :     if (strstr(pszDataType, "8U") != nullptr)
     147         265 :         return CHN_8U;
     148         123 :     if (strstr(pszDataType, "C16U") != nullptr)
     149           0 :         return CHN_C16U;
     150         123 :     if (strstr(pszDataType, "C16S") != nullptr)
     151           9 :         return CHN_C16S;
     152         114 :     if (strstr(pszDataType, "C32U") != nullptr)
     153           0 :         return CHN_C32U;
     154         114 :     if (strstr(pszDataType, "C32S") != nullptr)
     155           0 :         return CHN_C32S;
     156         114 :     if (strstr(pszDataType, "C32R") != nullptr)
     157           9 :         return CHN_C32R;
     158         105 :     if (strstr(pszDataType, "16U") != nullptr)
     159          87 :         return CHN_16U;
     160          18 :     if (strstr(pszDataType, "16S") != nullptr)
     161           9 :         return CHN_16S;
     162           9 :     if (strstr(pszDataType, "32U") != nullptr)
     163           0 :         return CHN_32U;
     164           9 :     if (strstr(pszDataType, "32S") != nullptr)
     165           0 :         return CHN_32S;
     166           9 :     if (strstr(pszDataType, "32R") != nullptr)
     167           9 :         return CHN_32R;
     168           0 :     if (strstr(pszDataType, "64U") != nullptr)
     169           0 :         return CHN_64U;
     170           0 :     if (strstr(pszDataType, "64S") != nullptr)
     171           0 :         return CHN_64S;
     172           0 :     if (strstr(pszDataType, "64R") != nullptr)
     173           0 :         return CHN_64R;
     174           0 :     if (strstr(pszDataType, "BIT") != nullptr)
     175           0 :         return CHN_BIT;
     176             : 
     177           0 :     return CHN_UNKNOWN;
     178             : }
     179             : 
     180             : /************************************************************************/
     181             : /*                       IsDataTypeComplex()                           */
     182             : /************************************************************************/
     183             : 
     184             : /**
     185             :  * @brief Return whether or not the data type is complex
     186             :  *
     187             :  * @param type the type
     188             :  *
     189             :  * @return true if the data type is complex, false otherwise
     190             :  */
     191           0 : bool PCIDSK::IsDataTypeComplex(eChanType type)
     192             : {
     193           0 :     switch(type)
     194             :     {
     195           0 :     case CHN_C32R:
     196             :     case CHN_C32U:
     197             :     case CHN_C32S:
     198             :     case CHN_C16U:
     199             :     case CHN_C16S:
     200           0 :         return true;
     201           0 :     default:
     202           0 :         return false;
     203             :     }
     204             : }
     205             : 
     206             : /************************************************************************/
     207             : /*                          SegmentTypeName()                           */
     208             : /************************************************************************/
     209             : 
     210             : /**
     211             :  * Return name for segment type.
     212             :  *
     213             :  * Returns a short name for the segment type code passed in.  This is normally
     214             :  * the portion of the enumeration name that comes after the underscore - i.e.
     215             :  * "BIT" for SEG_BIT.
     216             :  *
     217             :  * @param type the segment type code.
     218             :  *
     219             :  * @return the string for the segment type.
     220             :  */
     221             : 
     222        4111 : const char * PCIDSK::SegmentTypeName( int type )
     223             : {
     224        4111 :     switch( type )
     225             :     {
     226           0 :       case SEG_BIT:
     227           0 :         return "BIT";
     228        3547 :       case SEG_VEC:
     229        3547 :         return "VEC";
     230           0 :       case SEG_SIG:
     231           0 :         return "SIG";
     232           0 :       case SEG_TEX:
     233           0 :         return "TEX";
     234         238 :       case SEG_GEO:
     235         238 :         return "GEO";
     236           0 :       case SEG_ORB:
     237           0 :         return "ORB";
     238           0 :       case SEG_LUT:
     239           0 :         return "LUT";
     240           4 :       case SEG_PCT:
     241           4 :         return "PCT";
     242           0 :       case SEG_BLUT:
     243           0 :         return "BLUT";
     244           0 :       case SEG_BPCT:
     245           0 :         return "BPCT";
     246           0 :       case SEG_BIN:
     247           0 :         return "BIN";
     248           0 :       case SEG_ARR:
     249           0 :         return "ARR";
     250         322 :       case SEG_SYS:
     251         322 :         return "SYS";
     252           0 :       case SEG_GCPOLD:
     253           0 :         return "GCPOLD";
     254           0 :       case SEG_GCP2:
     255           0 :         return "GCP2";
     256           0 :       default:
     257           0 :         return "UNKNOWN";
     258             :     }
     259             : }

Generated by: LCOV version 1.14