Changeset 6874 for trunk/psModules/src/pslib/psMetadataItemParse.c
- Timestamp:
- Apr 17, 2006, 12:00:35 PM (20 years ago)
- File:
-
- 1 edited
-
trunk/psModules/src/pslib/psMetadataItemParse.c (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psModules/src/pslib/psMetadataItemParse.c
r6872 r6874 1 1 #include <stdio.h> 2 2 #include "pslib.h" 3 4 # define PS_METADATA_ITEM_PARSE_NUMBER(INTYPE,OUTTYPE) \ 5 case PS_DATA_##INTYPE: { \ 6 return (ps##OUTTYPE)(item->data.INTYPE); } \ 3 7 4 8 psF32 psMetadataItemParseF32(psMetadataItem *item … … 6 10 { 7 11 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 double12 return (float)item->data.F64;13 case PS_DATA_S32:14 // Promote to float15 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); 16 20 default: 17 21 psError(PS_ERR_IO, true, "Item %s (%s) is not of floating point type (%x) --- treating as NaN.\n", … … 25 29 { 26 30 switch (item->type) { 27 case PS_TYPE_F64:28 return item->data.F64;29 case PS_TYPE_F32:30 // Promote to double31 return (double)item->data.F32;32 case PS_TYPE_S32:33 // Promote to double34 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); 35 39 default: 36 40 psError(PS_ERR_IO, true, "Item %s (%s) is not of double-precision floating point type (%x) " … … 61 65 } 62 66 67 # define PS_METADATA_ITEM_PARSE_STRING(TYPE,MODE) \ 68 case PS_DATA_##TYPE: { \ 69 psString value = NULL; \ 70 psStringAppend(&value, MODE, item->data.TYPE); \ 71 return value; } \ 72 63 73 psString psMetadataItemParseString(psMetadataItem *item 64 74 ) … … 67 77 case PS_DATA_STRING: 68 78 return psMemIncrRefCounter(item->data.V); 69 case PS_DATA_F32: { 70 psString value = NULL; // String to return71 psStringAppend(&value, "%f", item->data.F32);72 return value;73 }74 case PS_DATA_S32: {75 psString value = NULL; // String to return76 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 79 89 default: 80 90 psError(PS_ERR_IO, true, "Item %s (%s) is not of string type (%x) --- treating as " … … 84 94 } 85 95 96 97 # if 0 98 case PS_DATA_F32: 99 { 100 psString value = NULL; // String to return 101 psStringAppend(&value, "%f", item->data.F32); 102 return value; 103 } 104 case 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.
