IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 4817


Ignore:
Timestamp:
Aug 18, 2005, 1:41:45 PM (21 years ago)
Author:
drobbin
Message:

bug 506 - psMetadataLookupMD, LookupString, Print folded in (prototype code)

Location:
trunk/psLib/src/types
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/psLib/src/types/psMetadata.c

    r4788 r4817  
    1212*  @author Ross Harman, MHPCC
    1313*
    14 *  @version $Revision: 1.75 $ $Name: not supported by cvs2svn $
    15 *  @date $Date: 2005-08-16 21:06:33 $
     14*  @version $Revision: 1.76 $ $Name: not supported by cvs2svn $
     15*  @date $Date: 2005-08-18 23:41:45 $
    1616*
    1717*  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
     
    762762    return oldValue;
    763763}
     764
     765psMetadata *psMetadataLookupMD(bool *status, const
     766                               psMetadata *md,
     767                               const char *key)
     768{
     769    psMetadataItem *item = psMetadataLookup((psMetadata*)md, key); // The metadata with instruments
     770    psMetadata *value = NULL;  // The value to return
     771    if (!item) {
     772        // The given key isn't in the metadata
     773        if (status) {
     774            *status = false;
     775        } else {
     776            psError(PS_ERR_IO, true, "Couldn't find %s in the metadata.\n");
     777        }
     778    } else if (item->type != PS_META_META) {
     779        // The value at the key isn't metadata
     780        if (status) {
     781            *status = false;
     782        } else {
     783            psLogMsg(__func__, PS_LOG_WARN, "%s isn't of type PS_META_META, as expected.\n");
     784        }
     785        value = NULL;
     786    } else {
     787        // We have the requested metadata
     788        if (status) {
     789            *status = true;
     790        }
     791        value = item->data.md; // The requested metadata
     792    }
     793    return value;
     794}
     795
     796
     797char *psMetadataLookupString(bool *status,
     798                             const psMetadata *md,
     799                             const char *key)
     800{
     801    psMetadataItem *item = psMetadataLookup((psMetadata*)md, key); // The metadata with instruments
     802    char *value = NULL;   // The value to return
     803    if (!item) {
     804        // The given key isn't in the metadata
     805        if (status) {
     806            *status = false;
     807        } else {
     808            psError(PS_ERR_IO, true, "Couldn't find %s in the metadata.\n");
     809        }
     810    } else if (item->type != PS_META_STR) {
     811        // The value at the key isn't of the desired type
     812        if (status) {
     813            *status = false;
     814        } else {
     815            psLogMsg(__func__, PS_LOG_WARN, "%s isn't of type PS_META_STR, as expected.\n");
     816        }
     817        value = NULL;
     818    } else {
     819        // We have the requested metadata
     820        if (status) {
     821            *status = true;
     822        }
     823        value = item->data.V; // The requested metadata
     824    }
     825    return value;
     826}
     827
     828
     829void psMetadataPrint(psMetadata *md,
     830                     int level)
     831{
     832    psMetadataIterator *iter = psMetadataIteratorAlloc(md, PS_LIST_HEAD, NULL); // Iterator
     833    psMetadataItem *item = NULL; // Item from metadata
     834    while ( (item = psMetadataGetAndIncrement(iter)) ) {
     835        // Indent...
     836        for (int i = 0; i < level; i++) {
     837            printf(" ");
     838        }
     839        printf("%s", item->name);
     840        if (item->comment && strlen(item->comment) > 0) {
     841            printf(" (%s)", item->comment);
     842        }
     843        printf(": ");
     844        switch (item->type) {
     845        case PS_META_STR:
     846            printf("%s", (char*)(item->data.V));
     847            break;
     848        case PS_META_BOOL:
     849            if (item->data.B) {
     850                printf("True");
     851            } else {
     852                printf("False");
     853            }
     854            break;
     855        case PS_META_S32:
     856            printf("%d", item->data.S32);
     857            break;
     858        case PS_META_F32:
     859            printf("%f", item->data.F32);
     860            break;
     861        case PS_META_F64:
     862            printf("%f", item->data.F64);
     863            break;
     864        case PS_META_META:
     865            printf("\n");
     866            psMetadataPrint(item->data.V, level + 1);
     867            break;
     868        default:
     869            psError(PS_ERR_IO, false, "Non-printable metadata type: %x\n", item->type);
     870        }
     871        printf("\n");
     872    }
     873    psFree(iter);
     874
     875    return;
     876}
     877
     878
  • trunk/psLib/src/types/psMetadata.h

    r4788 r4817  
    1111*  @author Ross Harman, MHPCC
    1212*
    13 *  @version $Revision: 1.57 $ $Name: not supported by cvs2svn $
    14 *  @date $Date: 2005-08-16 21:06:33 $
     13*  @version $Revision: 1.58 $ $Name: not supported by cvs2svn $
     14*  @date $Date: 2005-08-18 23:41:45 $
    1515*
    1616*  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
     
    613613);
    614614
     615/** Find an item in the metadata collection based on key name and return its metadata value.
     616 *
     617 *  Items may be found in the metadata by providing a key. If the key is
     618 *  non-unique, the value of the first item is returned. If the item is not found, zero is
     619 *  returned.
     620 *
     621 *  @return psMetadata*:        Value of metadata item.
     622 */
     623psMetadata *psMetadataLookupMD(
     624    bool *status,                      ///< Status of lookup.
     625    const psMetadata *md,              ///< Metadata collection to lookup metadata item.
     626    const char *key                    ///< Name of metadata key.
     627);
     628
     629/** Find an item in the metadata collection based on key name and return its string value.
     630 *
     631 *  Items may be found in the metadata by providing a key. If the key is
     632 *  non-unique, the value of the first item is returned. If the item is not found, zero is
     633 *  returned.
     634 *
     635 *  @return char*:           Value of metadata item.
     636 */
     637char *psMetadataLookupString(
     638    bool *status,                      ///< Status of lookup.
     639    const psMetadata *md,              ///< Metadata collection to lookup metadata item.
     640    const char *key                    ///< Name of metadata key.
     641);
     642
     643/** Print metadata collection to screen      */
     644void psMetadataPrint(
     645    psMetadata *md,                    ///< Metadata collection to print.
     646    int level                          ///< the level of metadata items.
     647);
     648
    615649/// @}
    616650
Note: See TracChangeset for help on using the changeset viewer.