Changeset 3341 for trunk/psLib/src/collections
- Timestamp:
- Feb 28, 2005, 1:34:10 PM (21 years ago)
- Location:
- trunk/psLib/src/collections
- Files:
-
- 3 edited
-
psMetadata.c (modified) (14 diffs)
-
psMetadata.h (modified) (10 diffs)
-
psMetadataIO.c (modified) (24 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psLib/src/collections/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 \ -
trunk/psLib/src/collections/psMetadata.h
r3264 r3341 11 11 * @author Ross Harman, MHPCC 12 12 * 13 * @version $Revision: 1.3 7$ $Name: not supported by cvs2svn $14 * @date $Date: 2005-02- 17 19:26:23$13 * @version $Revision: 1.38 $ $Name: not supported by cvs2svn $ 14 * @date $Date: 2005-02-28 23:34:10 $ 15 15 * 16 16 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 24 24 #include "psHash.h" 25 25 #include "psList.h" 26 #include "psImage.h" 27 #include "psLookupTable.h" 26 28 27 29 /// @addtogroup Metadata … … 33 35 */ 34 36 typedef enum { 35 PS_META_PRIMITIVE, ///< Primitive data. 37 PS_META_S32, ///< Primitive data. 38 PS_META_F32, ///< Primitive data. 39 PS_META_F64, ///< Primitive data. 40 PS_META_BOOL, ///< Primitive data. 36 41 PS_META_LIST, ///< List data (Stored as item.data.list). 37 42 PS_META_STR, ///< String data (Stored as item.data.V). … … 47 52 } psMetadataType; 48 53 54 #define PS_META_IS_PRIMITIVE(TYPE) \ 55 (TYPE == PS_META_S32 || \ 56 TYPE == PS_META_F32 || \ 57 TYPE == PS_META_F64 || \ 58 TYPE == PS_META_BOOL) 59 60 #define PS_META_PRIMITIVE_TYPE(METATYPE) ( \ 61 (METATYPE==PS_META_S32) ? PS_TYPE_S32 : \ 62 (METATYPE==PS_META_F32) ? PS_TYPE_F32 : \ 63 (METATYPE==PS_META_F64) ? PS_TYPE_F64 : \ 64 (METATYPE==PS_META_BOOL) ? PS_TYPE_BOOL : PS_TYPE_PTR ) 65 49 66 /** Option flags for psMetadata functions 50 67 * … … 55 72 typedef enum { 56 73 PS_META_DEFAULT = 0, ///< default behaviour (duplicate entry is an error) 57 PS_META_REPLACE ///< allow entry to be replaced74 PS_META_REPLACE = 0x10000 ///< allow entry to be replaced 58 75 } psMetadataFlags; 59 76 … … 82 99 char *name; ///< Name of metadata item. 83 100 psMetadataType type; ///< Type of metadata item. 84 psElemType pType; ///< Primitive data type85 101 union { 86 102 psBool B; ///< boolean data … … 113 129 psMetadataItem* psMetadataItemAlloc( 114 130 const char *name, ///< Name of metadata item. 115 psElemType pType, ///< Primitive type.116 131 psMetadataType type, ///< Type of metadata item. 117 132 const char *comment, ///< Comment for metadata item. 118 133 ... ///< Arguments for name formatting and metadata item data. 134 ); 135 136 psMetadataItem* psMetadataItemAllocStr( 137 const char* name, 138 const char* comment, 139 const char* value 140 ); 141 142 psMetadataItem* psMetadataItemAllocF32( 143 const char* name, 144 const char* comment, 145 psF32 value 146 ); 147 148 psMetadataItem* psMetadataItemAllocF64( 149 const char* name, 150 const char* comment, 151 psF64 value 152 ); 153 154 psMetadataItem* psMetadataItemAllocS32( 155 const char* name, 156 const char* comment, 157 psS32 value 158 ); 159 160 psMetadataItem* psMetadataItemAllocBool( 161 const char* name, 162 const char* comment, 163 psBool value 119 164 ); 120 165 … … 137 182 psMetadataItem* psMetadataItemAllocV( 138 183 const char *name, ///< Name of metadata item. 139 psElemType pType, ///< Primitive type.140 184 psMetadataType type, ///< Type of metadata item. 141 185 const char *comment, ///< Comment for metadata item. … … 161 205 */ 162 206 psBool psMetadataAddItem( 163 psMetadata* md, ///< Metadata collection to insert metadat item.164 psMetadataItem* item, ///< Metadata item to be added.165 psS32 location ///< Location to be added.207 psMetadata* md, ///< Metadata collection to insert metadat item. 208 psMetadataItem* item, ///< Metadata item to be added. 209 psS32 location ///< Location to be added. 166 210 ); 167 211 … … 173 217 */ 174 218 psBool psMetadataAdd( 175 psMetadata* md, ///< Metadata collection to insert metadat item. 176 psS32 where, ///< Location to be added. 177 const char *name, ///< Name of metadata item. 178 psElemType pType, ///< Primitive type. 179 psMetadataType type, ///< Type of metadata item. 180 const char *comment, ///< Comment for metadata item. 181 ... ///< Arguments for name formatting and metadata item data. 182 ); 219 psMetadata* md, ///< Metadata collection to insert metadat item. 220 psS32 where, ///< Location to be added. 221 const char *name, ///< Name of metadata item. 222 psMetadataType type, ///< Type of metadata item. 223 const char *comment, ///< Comment for metadata item. 224 ... ///< Arguments for name formatting and metadata item data. 225 ); 226 227 psBool psMetadataAddS32(psMetadata* md, psS32 where, const char* name, 228 const char* comment, psS32 value); 229 psBool psMetadataAddF32(psMetadata* md, psS32 where, const char* name, 230 const char* comment, psF32 value); 231 psBool psMetadataAddF64(psMetadata* md, psS32 where, const char* name, 232 const char* comment, psF64 value); 233 psBool psMetadataAddList(psMetadata* md, psS32 where, const char* name, 234 const char* comment, psList* value); 235 psBool psMetadataAddStr(psMetadata* md, psS32 where, const char* name, 236 const char* comment, const char* value); 237 psBool psMetadataAddVector(psMetadata* md, psS32 where, const char* name, 238 const char* comment, psVector* value); 239 psBool psMetadataAddImage(psMetadata* md, psS32 where, const char* name, 240 const char* comment, psImage* value); 241 psBool psMetadataAddHash(psMetadata* md, psS32 where, const char* name, 242 const char* comment, psHash* value); 243 psBool psMetadataAddLookupTable(psMetadata* md, psS32 where, const char* name, 244 const char* comment, psLookupTable* value); 245 psBool psMetadataAddUnknown(psMetadata* md, psS32 where, const char* name, 246 const char* comment, psPtr value); 247 183 248 184 249 /** Remove an item from metadata collection. -
trunk/psLib/src/collections/psMetadataIO.c
r3264 r3341 9 9 * @author Ross Harman, MHPCC 10 10 * 11 * @version $Revision: 1.2 0$ $Name: not supported by cvs2svn $12 * @date $Date: 2005-02- 17 19:26:23$11 * @version $Revision: 1.21 $ $Name: not supported by cvs2svn $ 12 * @date $Date: 2005-02-28 23:34:10 $ 13 13 * 14 14 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 101 101 /*****************************************************************************/ 102 102 103 static void p_saxEndElement(void *ctx, const xmlChar *tagName);104 static void p_psInitVectorXml(void *ctx, char *tagName);105 static void p_psInitMetadataItemXml(void *ctx, char *tagName);106 static void p_saxStartElement(void *ctx, const xmlChar *tagName, const xmlChar **atts);103 static void saxEndElement(void *ctx, const xmlChar *tagName); 104 static void initVectorXml(void *ctx, char *tagName); 105 static void initMetadataItemXml(void *ctx, char *tagName); 106 static void saxStartElement(void *ctx, const xmlChar *tagName, const xmlChar **atts); 107 107 108 108 /** Determines if a line is blank (whitespace only) or a commentline. It returns true if so. The input string … … 307 307 { 308 308 psMetadataType type; 309 psElemType pType;310 309 psBool success = true; 311 310 … … 315 314 316 315 type = metadataItem->type; 317 pType = metadataItem->pType;318 316 319 317 switch(type) { 320 case PS_META_PRIMITIVE: 321 switch(pType) { 322 case PS_TYPE_BOOL: 323 fprintf(fd, format, metadataItem->data.B); 324 break; 325 case PS_TYPE_S32: 326 fprintf(fd,format, metadataItem->data.S32); 327 break; 328 case PS_TYPE_F32: 329 fprintf(fd, format, metadataItem->data.F32); 330 break; 331 case PS_TYPE_F64: 332 fprintf(fd, format, metadataItem->data.F64); 333 break; 334 default: 335 psError(PS_ERR_BAD_PARAMETER_TYPE,true, PS_ERRORTEXT_psMetadata_METATYPE_INVALID, (int)pType); 336 success = false; 337 } 318 case PS_META_BOOL: 319 fprintf(fd, format, metadataItem->data.B); 320 break; 321 case PS_META_S32: 322 fprintf(fd,format, metadataItem->data.S32); 323 break; 324 case PS_META_F32: 325 fprintf(fd, format, metadataItem->data.F32); 326 break; 327 case PS_META_F64: 328 fprintf(fd, format, metadataItem->data.F64); 338 329 break; 339 330 case PS_META_STR: … … 419 410 switch (keyType) { 420 411 case 'I': 421 success = psMetadataAdd(output, PS_LIST_TAIL, keyName, PS_ TYPE_S32, PS_META_PRIMITIVE,412 success = psMetadataAdd(output, PS_LIST_TAIL, keyName, PS_META_S32, 422 413 keyComment, atoi(keyValue)); 423 414 break; 424 415 case 'F': 425 success = psMetadataAdd(output, PS_LIST_TAIL, keyName, PS_ TYPE_F64, PS_META_PRIMITIVE,416 success = psMetadataAdd(output, PS_LIST_TAIL, keyName, PS_META_F64, 426 417 keyComment, atof(keyValue)); 427 418 break; 428 419 case 'C': 429 success = psMetadataAdd(output, PS_LIST_TAIL, keyName, PS_ TYPE_PTR, PS_META_STR, keyComment,430 key Value);420 success = psMetadataAdd(output, PS_LIST_TAIL, keyName, PS_META_STR, 421 keyComment, keyValue); 431 422 break; 432 423 case 'L': 433 424 tempBool = (keyValue[0] == 'T') ? 1 : 0; 434 success = psMetadataAdd(output, PS_LIST_TAIL, keyName, PS_ TYPE_BOOL, PS_META_PRIMITIVE, keyComment,435 tempBool);425 success = psMetadataAdd(output, PS_LIST_TAIL, keyName, PS_META_BOOL, 426 keyComment, tempBool); 436 427 break; 437 428 case 'U': … … 460 451 char *strComment = NULL; 461 452 char *linePtr = NULL; 453 psElemType vecType = PS_TYPE_PTR; 462 454 psS32 status = 0; 463 455 psU32 lineCount = 0; … … 467 459 psVector *tempVec = NULL; 468 460 FILE *fp = NULL; 469 psElemType pType;470 461 psMetadataType mdType; 471 462 … … 535 526 } else if(!strncmp(strType, "*", 1)) { 536 527 mdType = PS_META_LIST; 537 pType = PS_TYPE_PTR;538 528 } else if(!strncmp(strType, "STR", 3)) { 539 529 mdType = PS_META_STR; 540 pType = PS_TYPE_PTR; 541 } else if(!strncmp(strType, "BOOL", 3)) { 542 mdType = PS_META_PRIMITIVE; 543 pType = PS_TYPE_BOOL; 530 } else if(!strncmp(strType, "BOOL", 4)) { 531 mdType = PS_META_BOOL; 544 532 } else if(!strncmp(strType, "S32", 3)) { 545 mdType = PS_META_PRIMITIVE; 546 pType = PS_TYPE_S32; 533 mdType = PS_META_S32; 547 534 } else if(!strncmp(strType, "F32", 3)) { 548 mdType = PS_META_PRIMITIVE; 549 pType = PS_TYPE_F32; 535 mdType = PS_META_F32; 550 536 } else if(!strncmp(strType, "F64", 3)) { 551 mdType = PS_META_PRIMITIVE; 552 pType = PS_TYPE_F64; 537 mdType = PS_META_F64; 553 538 } else { 554 539 (*nFail)++; … … 559 544 560 545 if(*strName == '@') { 546 vecType = PS_META_PRIMITIVE_TYPE(mdType); 561 547 mdType = PS_META_VEC; 562 548 } … … 604 590 switch (mdType) { 605 591 case PS_META_LIST: 606 psMetadataAdd(md, PS_LIST_TAIL, strName, pType,mdType, NULL, NULL);592 psMetadataAdd(md, PS_LIST_TAIL, strName, mdType, NULL, NULL); 607 593 break; 608 594 case PS_META_STR: 609 psMetadataAdd(md, PS_LIST_TAIL, strName, pType,mdType, strComment, strValue);595 psMetadataAdd(md, PS_LIST_TAIL, strName, mdType, strComment, strValue); 610 596 break; 611 597 case PS_META_VEC: 612 tempVec = parseVector(strValue, pType, &status);598 tempVec = parseVector(strValue, vecType, &status); 613 599 if(!status) { 614 psMetadataAdd(md, PS_LIST_TAIL, strName+1, pType, mdType, strComment, tempVec); 600 psMetadataAdd(md, PS_LIST_TAIL, strName+1, mdType, strComment, tempVec); 601 } else { 602 status = 0; 603 (*nFail)++; 604 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, 605 strType, lineCount, fileName); 606 continue; 607 } 608 psFree(tempVec); 609 break; 610 case PS_META_BOOL: 611 tempBool = parseBool(strValue, &status); 612 if(!status) { 613 psMetadataAdd(md, PS_LIST_TAIL, strName, mdType, strComment, tempBool); 615 614 } else { 616 615 status = 0; … … 621 620 } 622 621 break; 623 case PS_META_PRIMITIVE: 624 switch (pType) { 625 case PS_TYPE_BOOL: 626 tempBool = parseBool(strValue, &status); 627 if(!status) { 628 psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, strComment, tempBool); 629 } else { 630 status = 0; 631 (*nFail)++; 632 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, 633 strType, lineCount, fileName); 634 continue; 635 } 636 break; 637 case PS_TYPE_S32: 638 tempInt = (psS32)parseValue(strValue, &status); 639 if(!status) { 640 psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, strComment, tempInt); 641 } else { 642 status = 0; 643 (*nFail)++; 644 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, 645 strType, lineCount, fileName); 646 continue; 647 } 648 break; 649 case PS_TYPE_F32: 650 case PS_TYPE_F64: 651 tempDbl = parseValue(strValue, &status); 652 if(!status) { 653 psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, strComment, tempDbl); 654 } else { 655 status = 0; 656 (*nFail)++; 657 psError(PS_ERR_IO, true, 658 PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, strType, lineCount, 659 fileName); 660 continue; 661 } 662 break; 663 default: 622 case PS_META_S32: 623 tempInt = (psS32)parseValue(strValue, &status); 624 if(!status) { 625 psMetadataAdd(md, PS_LIST_TAIL, strName, mdType, strComment, tempInt); 626 } else { 627 status = 0; 664 628 (*nFail)++; 665 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FILE_TYPE_INVALID, mdType, lineCount, 629 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, 630 strType, lineCount, fileName); 631 continue; 632 } 633 break; 634 case PS_META_F32: 635 case PS_META_F64: 636 tempDbl = parseValue(strValue, &status); 637 if(!status) { 638 psMetadataAdd(md, PS_LIST_TAIL, strName, mdType, strComment, tempDbl); 639 } else { 640 status = 0; 641 (*nFail)++; 642 psError(PS_ERR_IO, true, 643 PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, strType, lineCount, 666 644 fileName); 667 645 continue; 668 } // switch646 } 669 647 break; 670 648 default: … … 682 660 } 683 661 684 static void p_saxStartElement(void *ctx, const xmlChar *tagName, const xmlChar **atts)662 static void saxStartElement(void *ctx, const xmlChar *tagName, const xmlChar **atts) 685 663 { 686 664 psU64 i = 0; … … 709 687 // Metadata containter for housing element attributes used by other SAX events 710 688 htAtts = psHashAlloc(10); 689 711 690 712 691 // Get tag name … … 745 724 746 725 // Add attributes to metadata 747 psMetadataAdd(md, PS_LIST_TAIL, "htAtts", PS_TYPE_PTR, PS_META_HASH, NULL, htAtts); 726 727 psMetadataAdd(md, PS_LIST_TAIL, "htAtts", PS_META_HASH, NULL, htAtts); 748 728 749 729 psFree(psTagName); 730 psFree(htAtts); 750 731 751 732 return; 752 733 } 753 734 754 static void p_psInitMetadataItemXml(void *ctx, char *tagName)735 static void initMetadataItemXml(void *ctx, char *tagName) 755 736 { 756 737 psBool overwrite = false; … … 760 741 psF64 tempDbl = 0.0; 761 742 psS32 tempInt = 0.0; 762 psElemType pType = PS_TYPE_PTR; 763 psMetadataType mdType = PS_META_PRIMITIVE; 743 psMetadataType mdType = PS_META_UNKNOWN; 764 744 char *fileName = NULL; 765 745 char *strName = NULL; … … 802 782 if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psString")) { 803 783 mdType = PS_META_STR; 804 pType = PS_TYPE_PTR;805 784 } else if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psBool")) { 806 mdType = PS_META_PRIMITIVE; 807 pType = PS_TYPE_U8; 785 mdType = PS_META_BOOL; 808 786 } else if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psS32")) { 809 mdType = PS_META_PRIMITIVE; 810 pType = PS_TYPE_S32; 787 mdType = PS_META_S32; 811 788 } else if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psF32")) { 812 mdType = PS_META_PRIMITIVE; 813 pType = PS_TYPE_F32; 789 mdType = PS_META_F32; 814 790 } else if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psF64")) { 815 mdType = PS_META_PRIMITIVE; 816 pType = PS_TYPE_F64; 791 mdType = PS_META_F64; 817 792 } else { 818 793 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_TYPE_INVALID_LINE_FILE, strType, lineNumber, … … 853 828 switch(mdType) { 854 829 case PS_META_LIST: 855 psMetadataAdd(md, PS_LIST_TAIL, strName, pType,mdType, NULL, NULL);830 psMetadataAdd(md, PS_LIST_TAIL, strName, mdType, NULL, NULL); 856 831 break; 857 832 case PS_META_STR: 858 psMetadataAdd(md, PS_LIST_TAIL, strName, pType,mdType, NULL, strValue);833 psMetadataAdd(md, PS_LIST_TAIL, strName, mdType, NULL, strValue); 859 834 break; 860 case PS_META_PRIMITIVE: 861 switch(pType) { 862 case PS_TYPE_BOOL: 863 tempBool = parseBool((char*)strValue, &status); 864 if(!status) { 865 psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, NULL, tempBool); 866 } else { 867 status = 0; 868 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, strType, 869 lineNumber, fileName); 870 } 871 break; 872 case PS_TYPE_S32: 873 tempInt = (psS32)parseValue((char*)strValue, &status); 874 if(!status) { 875 psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, NULL, tempInt); 876 } else { 877 status = 0; 878 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, strType, 879 lineNumber, fileName); 880 } 881 break; 882 case PS_TYPE_F32: 883 case PS_TYPE_F64: 884 tempDbl = parseValue((char*)strValue, &status); 885 if(!status) { 886 psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, NULL, tempDbl); 887 } else { 888 status = 0; 889 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, strType, 890 lineNumber, fileName); 891 } 892 break; 893 default: 894 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FILE_TYPE_INVALID, strType, lineNumber, fileName); 895 } // End switch 835 case PS_META_BOOL: 836 tempBool = parseBool((char*)strValue, &status); 837 if(!status) { 838 psMetadataAdd(md, PS_LIST_TAIL, strName, mdType, NULL, tempBool); 839 } else { 840 status = 0; 841 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, strType, 842 lineNumber, fileName); 843 } 844 break; 845 case PS_META_S32: 846 tempInt = (psS32)parseValue((char*)strValue, &status); 847 if(!status) { 848 psMetadataAdd(md, PS_LIST_TAIL, strName, mdType, NULL, tempInt); 849 } else { 850 status = 0; 851 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, strType, 852 lineNumber, fileName); 853 } 854 break; 855 case PS_META_F32: 856 case PS_META_F64: 857 tempDbl = parseValue((char*)strValue, &status); 858 if(!status) { 859 psMetadataAdd(md, PS_LIST_TAIL, strName, mdType, NULL, tempDbl); 860 } else { 861 status = 0; 862 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, strType, 863 lineNumber, fileName); 864 } 896 865 break; 897 866 default: … … 899 868 } // End switch 900 869 901 902 870 return; 903 871 } 904 872 905 873 906 static void p_psInitVectorXml(void *ctx, char *tagName)874 static void initVectorXml(void *ctx, char *tagName) 907 875 { 908 876 bool overwrite = false; … … 910 878 psU32 lineNumber = 0; 911 879 psElemType pType = PS_TYPE_PTR; 912 psMetadataType mdType = PS_META_PRIMITIVE;913 880 char *strName = NULL; 914 881 char *strType = NULL; … … 952 919 strType = psHashLookup(htAtts, "psType"); 953 920 if(strType!= NULL) { 954 if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psString")) { 955 mdType = PS_META_STR; 956 pType = PS_TYPE_PTR; 957 } else if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psBool")) { 958 mdType = PS_META_PRIMITIVE; 921 if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psBool")) { 959 922 pType = PS_TYPE_U8; 960 923 } else if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psS32")) { 961 mdType = PS_META_PRIMITIVE;962 924 pType = PS_TYPE_S32; 963 925 } else if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psF32")) { 964 mdType = PS_META_PRIMITIVE;965 926 pType = PS_TYPE_F32; 966 927 } else if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psF64")) { 967 mdType = PS_META_PRIMITIVE;968 928 pType = PS_TYPE_F64; 969 929 } else { … … 1006 966 vec = parseVector((char*)strValue, pType, &status); 1007 967 if(!status) { 1008 psMetadataAdd(md, PS_LIST_TAIL, strName+1, pType, mdType, NULL, vec);968 psMetadataAdd(md, PS_LIST_TAIL, strName+1, PS_META_VEC, NULL, vec); 1009 969 } else { 1010 970 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, strType, … … 1014 974 } 1015 975 1016 static void p_saxEndElement(void *ctx, const xmlChar *tagName)976 static void saxEndElement(void *ctx, const xmlChar *tagName) 1017 977 { 1018 978 char *psStartTagName = NULL; … … 1052 1012 // Initialize psLib structs 1053 1013 if(!strcmp(psEndTagName, "psMetadataItem")) { 1054 p_psInitMetadataItemXml(ctx, psEndTagName);1014 initMetadataItemXml(ctx, psEndTagName); 1055 1015 } else if(!strcmp(psEndTagName, "psVector")) { 1056 p_psInitVectorXml(ctx, psEndTagName);1016 initVectorXml(ctx, psEndTagName); 1057 1017 } else if(strcmp(psEndTagName, "psRoot")) { 1058 1018 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_TAG_UNKNOWN, psEndTagName); … … 1095 1055 saxHandler.startDocument = NULL; 1096 1056 saxHandler.endDocument = NULL; 1097 saxHandler.startElement = p_saxStartElement;1098 saxHandler.endElement = p_saxEndElement;1057 saxHandler.startElement = saxStartElement; 1058 saxHandler.endElement = saxEndElement; 1099 1059 saxHandler.reference = NULL; 1100 1060 saxHandler.characters = NULL;
Note:
See TracChangeset
for help on using the changeset viewer.
