IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Jan 13, 2005, 10:48:59 AM (22 years ago)
Author:
desonia
Message:

fixed some small bugs in psMetadataLookup and psMetadataItemPrint.

File:
1 edited

Legend:

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

    r2971 r2973  
    1212*  @author Ross Harman, MHPCC
    1313*
    14 *  @version $Revision: 1.44 $ $Name: not supported by cvs2svn $
    15 *  @date $Date: 2005-01-13 19:50:44 $
     14*  @version $Revision: 1.45 $ $Name: not supported by cvs2svn $
     15*  @date $Date: 2005-01-13 20:48:59 $
    1616*
    1717*  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    421421void* psMetadataLookupPtr(psMetadata *md, const char *key, psU32 *status)
    422422{
    423     void *value = NULL;
    424     psElemType pType;
    425423    psMetadataItem *metadataItem = NULL;
    426424
     425    if (status) {
     426        *status = 0;
     427    }
    427428
    428429    metadataItem = psMetadataLookup(md, key);
    429430    if(metadataItem == NULL) {
    430         *status = 1;
    431         return value;
    432     }
    433 
    434     pType = metadataItem->pType;
    435     value = metadataItem->data.V;
    436     if(pType != PS_TYPE_PTR) {
    437         psError(PS_ERR_BAD_PARAMETER_VALUE, true, PS_ERRORTEXT_psMetadata_METATYPE_MISMATCH, pType,
     431        if (status) {
     432            *status = 1;
     433        }
     434        return NULL;
     435    }
     436
     437    if(metadataItem->type == PS_META_PRIMITIVE && metadataItem->pType != PS_TYPE_PTR) {
     438        if (status) {
     439            *status = 1;
     440        }
     441        psError(PS_ERR_BAD_PARAMETER_VALUE, true,
     442                PS_ERRORTEXT_psMetadata_METATYPE_MISMATCH,
     443                metadataItem->pType,
    438444                PS_TYPE_PTR);
    439     }
    440 
    441     return value;
    442 }
    443 
    444 psS32 psMetadataLookupS32(psMetadata *md, const char *key, psU32 *status)
    445 {
    446     psS32 value = 0;
    447     psElemType pType;
    448     psMetadataItem *metadataItem = NULL;
    449 
    450 
    451     metadataItem = psMetadataLookup(md, key);
    452     if(metadataItem == NULL) {
    453         *status = 1;
    454         return value;
    455     }
    456 
    457     pType = metadataItem->pType;
    458     value = metadataItem->data.S32;
    459     if(pType != PS_TYPE_S32) {
    460         psError(PS_ERR_BAD_PARAMETER_VALUE, true, PS_ERRORTEXT_psMetadata_METATYPE_MISMATCH, pType,
    461                 PS_TYPE_S32);
    462     }
    463 
    464     return value;
    465 }
    466 
    467 psF32 psMetadataLookupF32(psMetadata *md, const char *key, psU32 *status)
    468 {
    469     psF32 value = 0.0;
    470     psElemType pType;
    471     psMetadataItem *metadataItem = NULL;
    472 
    473 
    474     metadataItem = psMetadataLookup(md, key);
    475     if(metadataItem == NULL) {
    476         *status = 1;
    477         return value;
    478     }
    479 
    480     pType = metadataItem->pType;
    481     value = metadataItem->data.F32;
    482     if(pType != PS_TYPE_F32) {
    483         psError(PS_ERR_BAD_PARAMETER_VALUE, true, PS_ERRORTEXT_psMetadata_METATYPE_MISMATCH, pType,
    484                 PS_TYPE_F32);
    485     }
    486 
    487     return value;
    488 }
    489 
    490 psF64 psMetadataLookupF64(psMetadata *md, const char *key, psU32 *status)
    491 {
    492     psF64 value = 0.0;
    493     psElemType pType;
    494     psMetadataItem *metadataItem = NULL;
    495 
    496 
    497     metadataItem = psMetadataLookup(md, key);
    498     if(metadataItem == NULL) {
    499         *status = 1;
    500         return value;
    501     }
    502 
    503     pType = metadataItem->pType;
    504     value = metadataItem->data.F64;
    505     if(pType != PS_TYPE_F64) {
    506         psError(PS_ERR_BAD_PARAMETER_VALUE, true, PS_ERRORTEXT_psMetadata_METATYPE_MISMATCH, pType,
    507                 PS_TYPE_F64);
    508     }
    509 
    510     return value;
    511 }
     445        return NULL;
     446    } else {
     447        return metadataItem->data.V;
     448    }
     449}
     450
     451#define psMetadataLookupNumTYPE(TYPE) \
     452ps##TYPE psMetadataLookup##TYPE(psMetadata *md, const char *key, psU32 *status) \
     453{ \
     454    psMetadataItem *metadataItem = NULL; \
     455    \
     456    if (status) { \
     457        *status = 0; \
     458    } \
     459    \
     460    metadataItem = psMetadataLookup(md, key); \
     461    if(metadataItem == NULL) { \
     462        if (status) { \
     463            *status = 1; \
     464        } \
     465        return 0; \
     466    } \
     467    \
     468    if (metadataItem->type == PS_META_PRIMITIVE) { \
     469        switch (metadataItem->pType) { \
     470        case PS_TYPE_S32: \
     471            return metadataItem->data.S32; \
     472        case PS_TYPE_F32: \
     473            return metadataItem->data.F32; \
     474        case PS_TYPE_F64: \
     475            return metadataItem->data.F64; \
     476        case PS_TYPE_BOOL: \
     477            if (metadataItem->data.B) { \
     478                return 1; \
     479            } \
     480            return 0; \
     481        default: \
     482            break; \
     483        } \
     484    } \
     485    \
     486    /* if you get to this point, the value is not a number. */ \
     487    if (status) { \
     488        *status = 1; \
     489    } \
     490    \
     491    return 0; \
     492}
     493
     494psMetadataLookupNumTYPE(F32)
     495psMetadataLookupNumTYPE(F64)
     496psMetadataLookupNumTYPE(S32)
    512497
    513498psMetadataItem* psMetadataGet(psMetadata *md, psS32 where)
Note: See TracChangeset for help on using the changeset viewer.