Changeset 3381 for trunk/psLib/src/collections/psMetadataIO.c
- Timestamp:
- Mar 7, 2005, 10:58:51 AM (21 years ago)
- File:
-
- 1 edited
-
trunk/psLib/src/collections/psMetadataIO.c (modified) (16 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psLib/src/collections/psMetadataIO.c
r3341 r3381 9 9 * @author Ross Harman, MHPCC 10 10 * 11 * @version $Revision: 1.2 1$ $Name: not supported by cvs2svn $12 * @date $Date: 2005-0 2-28 23:34:10 $11 * @version $Revision: 1.22 $ $Name: not supported by cvs2svn $ 12 * @date $Date: 2005-03-07 20:58:50 $ 13 13 * 14 14 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 410 410 switch (keyType) { 411 411 case 'I': 412 success = psMetadataAdd(output, PS_LIST_TAIL, keyName, PS_META_S32, 412 success = psMetadataAdd(output, PS_LIST_TAIL, keyName, 413 PS_META_S32 | PS_META_DUPLICATE_OK, 413 414 keyComment, atoi(keyValue)); 414 415 break; 415 416 case 'F': 416 success = psMetadataAdd(output, PS_LIST_TAIL, keyName, PS_META_F64, 417 success = psMetadataAdd(output, PS_LIST_TAIL, keyName, 418 PS_META_F64 | PS_META_DUPLICATE_OK, 417 419 keyComment, atof(keyValue)); 418 420 break; 419 421 case 'C': 420 success = psMetadataAdd(output, PS_LIST_TAIL, keyName, PS_META_STR, 422 success = psMetadataAdd(output, PS_LIST_TAIL, keyName, 423 PS_META_STR | PS_META_DUPLICATE_OK, 421 424 keyComment, keyValue); 422 425 break; 423 426 case 'L': 424 427 tempBool = (keyValue[0] == 'T') ? 1 : 0; 425 success = psMetadataAdd(output, PS_LIST_TAIL, keyName, PS_META_BOOL, 428 success = psMetadataAdd(output, PS_LIST_TAIL, keyName, 429 PS_META_BOOL | PS_META_DUPLICATE_OK, 426 430 keyComment, tempBool); 427 431 break; … … 456 460 psF64 tempDbl = 0.0; 457 461 psS32 tempInt = 0.0; 458 psMetadataItem *metadataItem = NULL;459 462 psVector *tempVec = NULL; 460 463 FILE *fp = NULL; 461 464 psMetadataType mdType; 462 465 psMetadataFlags flags; 466 psBool addStatus; 463 467 464 468 // Check for nulls … … 516 520 } 517 521 522 flags = (overwrite) ? PS_META_REPLACE : PS_META_DEFAULT; 523 518 524 // Get the metadata item type 519 525 strType = getToken(&linePtr, " ", &status); … … 524 530 fileName); 525 531 continue; 526 } else if(!strncmp(strType, "*", 1)) {527 mdType = PS_META_LIST;528 } else if(!strncmp(strType, "STR", 3)) {529 mdType = PS_META_STR;530 } else if(!strncmp(strType, "BOOL", 4)) {531 mdType = PS_META_BOOL;532 } else if(!strncmp(strType, "S32", 3)) {533 mdType = PS_META_S32;534 } else if(!strncmp(strType, "F32", 3)) {535 mdType = PS_META_F32;536 } else if(!strncmp(strType, "F64", 3)) {537 mdType = PS_META_F64;538 532 } else { 539 (*nFail)++; 540 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FILE_TYPE_INVALID, strType, lineCount, 541 fileName); 542 continue; 533 char* tempStrType = strType; 534 if(*strType == '*') { 535 flags = PS_META_DUPLICATE_OK; 536 tempStrType = strType+1; 537 } 538 539 if(!strncmp(tempStrType, "STR", 3)) { 540 mdType = PS_META_STR; 541 } else if(!strncmp(tempStrType, "BOOL", 4)) { 542 mdType = PS_META_BOOL; 543 } else if(!strncmp(tempStrType, "S32", 3)) { 544 mdType = PS_META_S32; 545 } else if(!strncmp(tempStrType, "F32", 3)) { 546 mdType = PS_META_F32; 547 } else if(!strncmp(tempStrType, "F64", 3)) { 548 mdType = PS_META_F64; 549 } else { 550 (*nFail)++; 551 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FILE_TYPE_INVALID, strType, lineCount, 552 fileName); 553 continue; 554 } 543 555 } 544 556 … … 548 560 } 549 561 550 // Get the metadata item value if there is one. Lines with * don't have values. 551 if(mdType != PS_META_LIST) { 552 strValue = getToken(&linePtr, "#", &status); 553 if(strValue==NULL) { 554 (*nFail)++; 555 status = 0; 556 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FILE_ELEMENT_NULL, "value", lineCount, 557 fileName); 558 continue; 559 } 560 } 561 562 // Get the metadata item value if there is one. Not all lines will have comments, so NULL is ok. 562 // Get the metadata item value if there is one. 563 strValue = getToken(&linePtr, "#", &status); 564 if(status) { 565 (*nFail)++; 566 status = 0; 567 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FILE_ELEMENT_NULL, "comment", lineCount, 568 fileName); 569 continue; 570 } 571 if(strValue==NULL) { 572 (*nFail)++; 573 status = 0; 574 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FILE_ELEMENT_NULL, "value", lineCount, 575 fileName); 576 continue; 577 } 578 579 // Not all lines will have comments, so NULL is ok. 563 580 strComment = getToken(&linePtr,"~", &status); 564 581 if(status) { … … 570 587 } 571 588 572 /* If metadata item is found, is not a folder node, and overwrite is allowed, then remove existing573 and allow switch/case below to add new item. If overwrite is false, then report error. If found574 item is folder node, then psMetadataAdd will automatically add a new child. */575 metadataItem = psMetadataLookup(md, strName);576 if(metadataItem != NULL) {577 if(metadataItem->type!=PS_META_LIST) {578 if(overwrite) {579 psMetadataRemove(md, INT_MIN, strName);580 } else {581 (*nFail)++;582 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_OVERWRITE_ITEM, strName, lineCount,583 fileName);584 continue;585 }586 }587 }588 589 589 // Create and add metadata item to metadata and parse values 590 590 switch (mdType) { 591 case PS_META_LIST:592 psMetadataAdd(md, PS_LIST_TAIL, strName, mdType, NULL, NULL);593 break;594 591 case PS_META_STR: 595 psMetadataAdd(md, PS_LIST_TAIL, strName, mdType, strComment, strValue); 592 addStatus = psMetadataAdd(md, PS_LIST_TAIL, strName, 593 mdType | flags, 594 strComment, strValue); 596 595 break; 597 596 case PS_META_VEC: 598 597 tempVec = parseVector(strValue, vecType, &status); 599 598 if(!status) { 600 psMetadataAdd(md, PS_LIST_TAIL, strName+1, mdType, strComment, tempVec); 599 addStatus = psMetadataAdd(md, PS_LIST_TAIL, strName+1, 600 mdType | flags, 601 strComment, tempVec); 601 602 } else { 602 603 status = 0; … … 611 612 tempBool = parseBool(strValue, &status); 612 613 if(!status) { 613 psMetadataAdd(md, PS_LIST_TAIL, strName, mdType, strComment, tempBool); 614 addStatus = psMetadataAdd(md, PS_LIST_TAIL, strName, 615 mdType | flags, 616 strComment, tempBool); 614 617 } else { 615 618 status = 0; … … 623 626 tempInt = (psS32)parseValue(strValue, &status); 624 627 if(!status) { 625 psMetadataAdd(md, PS_LIST_TAIL, strName, mdType, strComment, tempInt); 628 addStatus = psMetadataAdd(md, PS_LIST_TAIL, strName, 629 mdType | flags, 630 strComment, tempInt); 626 631 } else { 627 632 status = 0; … … 636 641 tempDbl = parseValue(strValue, &status); 637 642 if(!status) { 638 psMetadataAdd(md, PS_LIST_TAIL, strName, mdType, strComment, tempDbl); 643 addStatus = psMetadataAdd(md, PS_LIST_TAIL, strName, 644 mdType | flags, 645 strComment, tempDbl); 639 646 } else { 640 647 status = 0; … … 652 659 continue; 653 660 } // switch 661 if (! addStatus) { 662 (*nFail)++; 663 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_OVERWRITE_ITEM, strName, lineCount, 664 fileName); 665 } 666 654 667 } // if ignoreLine 655 668 } // while loop … … 725 738 // Add attributes to metadata 726 739 727 psMetadataAdd(md, PS_LIST_TAIL, "htAtts", PS_META_HASH, NULL, htAtts); 740 psMetadataAdd(md, PS_LIST_TAIL, "htAtts", 741 PS_META_HASH | PS_META_DUPLICATE_OK, 742 NULL, htAtts); 728 743 729 744 psFree(psTagName); … … 828 843 switch(mdType) { 829 844 case PS_META_LIST: 830 psMetadataAdd(md, PS_LIST_TAIL, strName, mdType, NULL, NULL); 845 psMetadataAdd(md, PS_LIST_TAIL, strName, 846 mdType | PS_META_DUPLICATE_OK, 847 NULL, NULL); 831 848 break; 832 849 case PS_META_STR: 833 psMetadataAdd(md, PS_LIST_TAIL, strName, mdType, NULL, strValue); 850 psMetadataAdd(md, PS_LIST_TAIL, strName, 851 mdType | PS_META_DUPLICATE_OK, 852 NULL, strValue); 834 853 break; 835 854 case PS_META_BOOL: 836 855 tempBool = parseBool((char*)strValue, &status); 837 856 if(!status) { 838 psMetadataAdd(md, PS_LIST_TAIL, strName, mdType, NULL, tempBool); 857 psMetadataAdd(md, PS_LIST_TAIL, strName, 858 mdType | PS_META_DUPLICATE_OK, 859 NULL, tempBool); 839 860 } else { 840 861 status = 0; … … 846 867 tempInt = (psS32)parseValue((char*)strValue, &status); 847 868 if(!status) { 848 psMetadataAdd(md, PS_LIST_TAIL, strName, mdType, NULL, tempInt); 869 psMetadataAdd(md, PS_LIST_TAIL, strName, 870 mdType | PS_META_DUPLICATE_OK, 871 NULL, tempInt); 849 872 } else { 850 873 status = 0; … … 857 880 tempDbl = parseValue((char*)strValue, &status); 858 881 if(!status) { 859 psMetadataAdd(md, PS_LIST_TAIL, strName, mdType, NULL, tempDbl); 882 psMetadataAdd(md, PS_LIST_TAIL, strName, 883 mdType | PS_META_DUPLICATE_OK, 884 NULL, tempDbl); 860 885 } else { 861 886 status = 0; … … 966 991 vec = parseVector((char*)strValue, pType, &status); 967 992 if(!status) { 968 psMetadataAdd(md, PS_LIST_TAIL, strName+1, PS_META_VEC, NULL, vec); 993 psMetadataAdd(md, PS_LIST_TAIL, strName+1, 994 PS_META_VEC | PS_META_DUPLICATE_OK, 995 NULL, vec); 969 996 } else { 970 997 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, strType,
Note:
See TracChangeset
for help on using the changeset viewer.
