Changeset 3341 for trunk/psLib/src/astronomy/psMetadata.c
- Timestamp:
- Feb 28, 2005, 1:34:10 PM (21 years ago)
- File:
-
- 1 edited
-
trunk/psLib/src/astronomy/psMetadata.c (modified) (14 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psLib/src/astronomy/psMetadata.c
r3286 r3341 12 12 * @author Ross Harman, MHPCC 13 13 * 14 * @version $Revision: 1.5 2$ $Name: not supported by cvs2svn $15 * @date $Date: 2005-02- 18 22:17:20 $14 * @version $Revision: 1.53 $ $Name: not supported by cvs2svn $ 15 * @date $Date: 2005-02-28 23:34:10 $ 16 16 * 17 17 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 80 80 psFree(metadataItem->name); 81 81 psFree(metadataItem->comment); 82 if ( type != PS_META_PRIMITIVE) {82 if (! PS_META_IS_PRIMITIVE(type)) { 83 83 psFree(metadataItem->data.V); 84 84 } … … 98 98 /*****************************************************************************/ 99 99 100 psMetadataItem* psMetadataItemAlloc(const char *name, ps ElemType pType, psMetadataType type,100 psMetadataItem* psMetadataItemAlloc(const char *name, psMetadataType type, 101 101 const char *comment, ...) 102 102 { … … 108 108 109 109 // Call metadata item allocation 110 metadataItem = psMetadataItemAllocV(name, pType,type, comment, argPtr);110 metadataItem = psMetadataItemAllocV(name, type, comment, argPtr); 111 111 112 112 // Clean up stack after variable arguement has been used … … 116 116 } 117 117 118 psMetadataItem* psMetadataItemAllocV(const char *name, psElemType pType, psMetadataType type, 118 #define METADATAITEM_ALLOC_TYPE(NAME,TYPE,METATYPE) \ 119 psMetadataItem* psMetadataItemAlloc##NAME(const char* name, \ 120 const char* comment, \ 121 TYPE value) \ 122 { \ 123 return psMetadataItemAlloc(name, METATYPE, comment, value); \ 124 } 125 126 METADATAITEM_ALLOC_TYPE(Str,const char*,PS_META_STR) 127 METADATAITEM_ALLOC_TYPE(F32,psF32,PS_META_F32) 128 METADATAITEM_ALLOC_TYPE(F64,psF64,PS_META_F64) 129 METADATAITEM_ALLOC_TYPE(S32,psS32,PS_META_S32) 130 METADATAITEM_ALLOC_TYPE(Bool,psBool,PS_META_BOOL) 131 132 psMetadataItem* psMetadataItemAllocV(const char *name, psMetadataType type, 119 133 const char *comment, va_list argPtr) 120 134 { … … 145 159 // Set metadata item type 146 160 metadataItem->type = type; 147 metadataItem->pType = pType;148 161 149 162 // Allocate and set metadata item name … … 153 166 // Set metadata item value 154 167 switch(type) { 155 case PS_META_PRIMITIVE: 156 switch(pType) { 157 case PS_TYPE_BOOL: 158 metadataItem->data.B = (psBool)va_arg(argPtr, psS32); 159 break; 160 case PS_TYPE_S32: 161 metadataItem->data.S32 = (psS32)va_arg(argPtr, psS32); 162 break; 163 case PS_TYPE_F32: 164 metadataItem->data.F32 = (psF32)va_arg(argPtr, psF64); 165 break; 166 case PS_TYPE_F64: 167 metadataItem->data.F64 = (psF64)va_arg(argPtr, psF64); 168 break; 169 default: 170 psError(PS_ERR_BAD_PARAMETER_VALUE, true, PS_ERRORTEXT_psMetadata_METATYPE_INVALID, type); 171 psFree(metadataItem); 172 metadataItem = NULL; 173 } 168 case PS_META_BOOL: 169 metadataItem->data.B = (psBool)va_arg(argPtr, psS32); 170 break; 171 case PS_META_S32: 172 metadataItem->data.S32 = (psS32)va_arg(argPtr, psS32); 173 break; 174 case PS_META_F32: 175 metadataItem->data.F32 = (psF32)va_arg(argPtr, psF64); 176 break; 177 case PS_META_F64: 178 metadataItem->data.F64 = (psF64)va_arg(argPtr, psF64); 174 179 break; 175 180 case PS_META_STR: … … 186 191 case PS_META_UNKNOWN: 187 192 // Copy of input data not performed due to variability of data types 188 metadataItem->data.V = va_arg(argPtr, psPtr);193 metadataItem->data.V = psMemIncrRefCounter(va_arg(argPtr, psPtr)); 189 194 break; 190 195 default: … … 256 261 257 262 // Leaf node replaces another leaf. Make new folder node and add leaves. 258 newFolderEntry = psMetadataItemAlloc(key, PS_ TYPE_PTR, PS_META_LIST, NULL, NULL);263 newFolderEntry = psMetadataItemAlloc(key, PS_META_LIST, NULL, NULL); 259 264 newFolderEntry->data.list = psListAlloc(NULL); 260 265 … … 328 333 } 329 334 330 psBool psMetadataAdd(psMetadata *md, psS32 where, const char *name, psElemType pType,335 psBool psMetadataAdd(psMetadata *md, psS32 where, const char *name, 331 336 psMetadataType type, const char *comment, ...) 332 337 { … … 335 340 336 341 va_start(argPtr, comment); 337 metadataItem = psMetadataItemAllocV(name, pType,type, comment, argPtr);342 metadataItem = psMetadataItemAllocV(name, type, comment, argPtr); 338 343 va_end(argPtr); 339 344 … … 348 353 return true; 349 354 } 355 356 #define METADATA_ADD_TYPE(NAME,TYPE,METATYPE) \ 357 psBool psMetadataAdd##NAME(psMetadata* md, psS32 where, const char* name, \ 358 const char* comment, TYPE value) { \ 359 return psMetadataAdd(md,where,name, METATYPE,comment,value); \ 360 } 361 362 METADATA_ADD_TYPE(S32,psS32,PS_META_S32) 363 METADATA_ADD_TYPE(F32,psF32,PS_META_F32) 364 METADATA_ADD_TYPE(F64,psF64,PS_META_F64) 365 METADATA_ADD_TYPE(List,psList*,PS_META_LIST) 366 METADATA_ADD_TYPE(Str,const char*,PS_META_STR) 367 METADATA_ADD_TYPE(Vector,psVector*,PS_META_VEC) 368 METADATA_ADD_TYPE(Image,psImage*,PS_META_IMG) 369 METADATA_ADD_TYPE(Hash,psHash*,PS_META_HASH) 370 METADATA_ADD_TYPE(LookupTable,psLookupTable*,PS_META_LOOKUPTABLE) 371 METADATA_ADD_TYPE(Unknown,void*,PS_META_UNKNOWN) 350 372 351 373 psBool psMetadataRemove(psMetadata *md, psS32 where, const char *key) … … 435 457 } 436 458 437 if( metadataItem->type == PS_META_PRIMITIVE && metadataItem->pType != PS_TYPE_PTR) {459 if(PS_META_IS_PRIMITIVE(metadataItem->type)) { 438 460 if (status) { 439 461 *status = false; 440 462 } 441 463 psError(PS_ERR_BAD_PARAMETER_VALUE, true, 442 PS_ERRORTEXT_psMetadata_METATYPE_MISMATCH, 443 metadataItem->pType, 444 PS_TYPE_PTR); 464 PS_ERRORTEXT_psMetadata_METATYPE_INVALID, 465 metadataItem->type); 445 466 return NULL; 446 467 } else { … … 467 488 } \ 468 489 \ 469 if (metadataItem->type == PS_META_PRIMITIVE) { \ 470 switch (metadataItem->pType) { \ 471 case PS_TYPE_S32: \ 472 value = (ps##TYPE)metadataItem->data.S32; \ 473 break; \ 474 case PS_TYPE_F32: \ 475 value = (ps##TYPE)metadataItem->data.F32; \ 476 break; \ 477 case PS_TYPE_F64: \ 478 value = (ps##TYPE)metadataItem->data.F64; \ 479 break; \ 480 case PS_TYPE_BOOL: \ 481 if (metadataItem->data.B) { \ 482 value = 1; \ 483 } \ 484 break; \ 485 default: \ 486 /* if you get to this point, the value is not a number. */ \ 487 if (status) { \ 488 *status = false; \ 489 } \ 490 break; \ 490 switch (metadataItem->type) { \ 491 case PS_META_S32: \ 492 value = (ps##TYPE)metadataItem->data.S32; \ 493 break; \ 494 case PS_META_F32: \ 495 value = (ps##TYPE)metadataItem->data.F32; \ 496 break; \ 497 case PS_META_F64: \ 498 value = (ps##TYPE)metadataItem->data.F64; \ 499 break; \ 500 case PS_META_BOOL: \ 501 if (metadataItem->data.B) { \ 502 value = 1; \ 491 503 } \ 492 } else { \ 504 break; \ 505 default: \ 506 /* if you get to this point, the value is not a number. */ \ 493 507 if (status) { \ 494 508 *status = false; \ 495 509 } \ 510 break; \ 496 511 } \ 497 512 \
Note:
See TracChangeset
for help on using the changeset viewer.
