IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Apr 17, 2006, 12:00:35 PM (20 years ago)
Author:
magnier
Message:

variety of small changes related to inconsistencies between psModules and psLib

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/psModules/src/pslib/psMetadataItemParse.c

    r6872 r6874  
    11#include <stdio.h>
    22#include "pslib.h"
     3
     4# define PS_METADATA_ITEM_PARSE_NUMBER(INTYPE,OUTTYPE) \
     5case PS_DATA_##INTYPE: { \
     6    return (ps##OUTTYPE)(item->data.INTYPE); } \
    37
    48psF32 psMetadataItemParseF32(psMetadataItem *item
     
    610{
    711    switch (item->type) {
    8     case PS_DATA_F32:
    9         return item->data.F32;
    10     case PS_DATA_F64:
    11         // Assume it's OK to truncate to floating point from double
    12         return (float)item->data.F64;
    13     case PS_DATA_S32:
    14         // Promote to float
    15         return (float)item->data.S32;
     12        PS_METADATA_ITEM_PARSE_NUMBER (F32, F32);
     13        PS_METADATA_ITEM_PARSE_NUMBER (F64, F32);
     14        PS_METADATA_ITEM_PARSE_NUMBER (S8,  F32);
     15        PS_METADATA_ITEM_PARSE_NUMBER (S16, F32);
     16        PS_METADATA_ITEM_PARSE_NUMBER (S32, F32);
     17        PS_METADATA_ITEM_PARSE_NUMBER (U8,  F32);
     18        PS_METADATA_ITEM_PARSE_NUMBER (U16, F32);
     19        PS_METADATA_ITEM_PARSE_NUMBER (U32, F32);
    1620    default:
    1721        psError(PS_ERR_IO, true, "Item %s (%s) is not of floating point type (%x) --- treating as NaN.\n",
     
    2529{
    2630    switch (item->type) {
    27     case PS_TYPE_F64:
    28         return item->data.F64;
    29     case PS_TYPE_F32:
    30         // Promote to double
    31         return (double)item->data.F32;
    32     case PS_TYPE_S32:
    33         // Promote to double
    34         return (double)item->data.S32;
     31        PS_METADATA_ITEM_PARSE_NUMBER (F32, F64);
     32        PS_METADATA_ITEM_PARSE_NUMBER (F64, F64);
     33        PS_METADATA_ITEM_PARSE_NUMBER (S8,  F64);
     34        PS_METADATA_ITEM_PARSE_NUMBER (S16, F64);
     35        PS_METADATA_ITEM_PARSE_NUMBER (S32, F64);
     36        PS_METADATA_ITEM_PARSE_NUMBER (U8,  F64);
     37        PS_METADATA_ITEM_PARSE_NUMBER (U16, F64);
     38        PS_METADATA_ITEM_PARSE_NUMBER (U32, F64);
    3539    default:
    3640        psError(PS_ERR_IO, true, "Item %s (%s) is not of double-precision floating point type (%x) "
     
    6165}
    6266
     67# define PS_METADATA_ITEM_PARSE_STRING(TYPE,MODE) \
     68case PS_DATA_##TYPE: { \
     69    psString value = NULL; \
     70    psStringAppend(&value, MODE, item->data.TYPE); \
     71    return value; } \
     72
    6373psString psMetadataItemParseString(psMetadataItem *item
    6474                                  )
     
    6777    case PS_DATA_STRING:
    6878        return psMemIncrRefCounter(item->data.V);
    69     case PS_DATA_F32: {
    70             psString value = NULL;    // String to return
    71             psStringAppend(&value, "%f", item->data.F32);
    72             return value;
    73         }
    74     case PS_DATA_S32: {
    75             psString value = NULL;    // String to return
    76             psStringAppend(&value, "%d", item->data.S32);
    77             return value;
    78         }
     79
     80        PS_METADATA_ITEM_PARSE_STRING(F32, "%f");
     81        PS_METADATA_ITEM_PARSE_STRING(F64, "%f");
     82        PS_METADATA_ITEM_PARSE_STRING(S8,  "%d");
     83        PS_METADATA_ITEM_PARSE_STRING(S16, "%d");
     84        PS_METADATA_ITEM_PARSE_STRING(S32, "%d");
     85        PS_METADATA_ITEM_PARSE_STRING(U8,  "%d");
     86        PS_METADATA_ITEM_PARSE_STRING(U16, "%d");
     87        PS_METADATA_ITEM_PARSE_STRING(U32, "%d");
     88
    7989    default:
    8090        psError(PS_ERR_IO, true, "Item %s (%s) is not of string type (%x) --- treating as "
     
    8494}
    8595
     96
     97# if 0
     98case PS_DATA_F32:
     99{
     100psString value = NULL;    // String to return
     101psStringAppend(&value, "%f", item->data.F32);
     102    return value;
     103}
     104case PS_DATA_S32:
     105{
     106    psString value = NULL;    // String to return
     107    psStringAppend(&value, "%d", item->data.S32);
     108    return value;
     109}
     110# endif
Note: See TracChangeset for help on using the changeset viewer.