LCOV - code coverage report
Current view: top level - src - datatype.c (source / functions) Hit Total Coverage
Test: Code coverage Lines: 15 15 100.0 %
Date: 2026-07-14 21:28:07 Functions: 4 4 100.0 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 12 12 100.0 %

           Branch data     Line data    Source code
       1                 :            : // Copyright 2019-2026 David Robillard <d@drobilla.net>
       2                 :            : // SPDX-License-Identifier: ISC
       3                 :            : 
       4                 :            : #include <exess/exess.h>
       5                 :            : 
       6                 :            : #include <string.h>
       7                 :            : 
       8                 :            : static const size_t xsd_len = sizeof(EXESS_XSD_URI) - 1U;
       9                 :            : 
      10                 :            : /// The full URI for supported datatypes
      11                 :            : static const char* EXESS_NONNULL const uris[EXESS_MAX_DATATYPE + 1U] = {
      12                 :            :   NULL,                               //
      13                 :            :   EXESS_XSD_URI "boolean",            //
      14                 :            :   EXESS_XSD_URI "double",             //
      15                 :            :   EXESS_XSD_URI "float",              //
      16                 :            :   EXESS_XSD_URI "long",               //
      17                 :            :   EXESS_XSD_URI "int",                //
      18                 :            :   EXESS_XSD_URI "short",              //
      19                 :            :   EXESS_XSD_URI "byte",               //
      20                 :            :   EXESS_XSD_URI "unsignedLong",       //
      21                 :            :   EXESS_XSD_URI "unsignedInt",        //
      22                 :            :   EXESS_XSD_URI "unsignedShort",      //
      23                 :            :   EXESS_XSD_URI "unsignedByte",       //
      24                 :            :   EXESS_XSD_URI "decimal",            //
      25                 :            :   EXESS_XSD_URI "integer",            //
      26                 :            :   EXESS_XSD_URI "nonPositiveInteger", //
      27                 :            :   EXESS_XSD_URI "negativeInteger",    //
      28                 :            :   EXESS_XSD_URI "nonNegativeInteger", //
      29                 :            :   EXESS_XSD_URI "positiveInteger",    //
      30                 :            :   EXESS_XSD_URI "duration",           //
      31                 :            :   EXESS_XSD_URI "yearMonthDuration",  //
      32                 :            :   EXESS_XSD_URI "dayTimeDuration",    //
      33                 :            :   EXESS_XSD_URI "dateTime",           //
      34                 :            :   EXESS_XSD_URI "dateTimeStamp",      //
      35                 :            :   EXESS_XSD_URI "time",               //
      36                 :            :   EXESS_XSD_URI "date",               //
      37                 :            :   EXESS_XSD_URI "hexBinary",          //
      38                 :            :   EXESS_XSD_URI "base64Binary",       //
      39                 :            : };
      40                 :            : 
      41                 :            : EXESS_NONBLOCKING const char*
      42                 :         94 : exess_datatype_uri(const ExessDatatype datatype)
      43                 :            : {
      44         [ +  + ]:         89 :   return (datatype > EXESS_NOTHING && datatype <= EXESS_BASE64) ? uris[datatype]
      45         [ +  + ]:        183 :                                                                 : NULL;
      46                 :            : }
      47                 :            : 
      48                 :            : EXESS_NONBLOCKING const char*
      49                 :         43 : exess_datatype_name(const ExessDatatype datatype)
      50                 :            : {
      51                 :         43 :   const char* const uri = exess_datatype_uri(datatype);
      52                 :            : 
      53         [ +  + ]:         43 :   return uri ? uri + xsd_len : NULL;
      54                 :            : }
      55                 :            : 
      56                 :            : EXESS_NONBLOCKING ExessDatatype
      57                 :         60 : exess_datatype_from_name(const char* const name)
      58                 :            : {
      59         [ +  + ]:        918 :   for (unsigned i = 1U; i <= EXESS_MAX_DATATYPE; ++i) {
      60         [ +  + ]:        910 :     if (!strcmp(name, uris[i] + xsd_len)) {
      61                 :         52 :       return (ExessDatatype)i;
      62                 :            :     }
      63                 :            :   }
      64                 :            : 
      65                 :          8 :   return EXESS_NOTHING;
      66                 :            : }
      67                 :            : 
      68                 :            : EXESS_NONBLOCKING ExessDatatype
      69                 :         30 : exess_datatype_from_uri(const char* const uri)
      70                 :            : {
      71                 :         30 :   return !strncmp(uri, EXESS_XSD_URI, xsd_len)
      72                 :         28 :            ? exess_datatype_from_name(uri + xsd_len)
      73         [ +  + ]:         58 :            : EXESS_NOTHING;
      74                 :            : }

Generated by: LCOV version 1.16