IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Feb 28, 2005, 1:34:10 PM (21 years ago)
Author:
desonia
Message:

Changes to psMetadata to match latest SDRS.

File:
1 edited

Legend:

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

    r3286 r3341  
    1212*  @author Ross Harman, MHPCC
    1313*
    14 *  @version $Revision: 1.52 $ $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 $
    1616*
    1717*  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
     
    8080    psFree(metadataItem->name);
    8181    psFree(metadataItem->comment);
    82     if (type != PS_META_PRIMITIVE) {
     82    if (! PS_META_IS_PRIMITIVE(type)) {
    8383        psFree(metadataItem->data.V);
    8484    }
     
    9898/*****************************************************************************/
    9999
    100 psMetadataItem* psMetadataItemAlloc(const char *name, psElemType pType, psMetadataType type,
     100psMetadataItem* psMetadataItemAlloc(const char *name, psMetadataType type,
    101101                                    const char *comment, ...)
    102102{
     
    108108
    109109    // Call metadata item allocation
    110     metadataItem = psMetadataItemAllocV(name, pType, type, comment, argPtr);
     110    metadataItem = psMetadataItemAllocV(name, type, comment, argPtr);
    111111
    112112    // Clean up stack after variable arguement has been used
     
    116116}
    117117
    118 psMetadataItem* psMetadataItemAllocV(const char *name, psElemType pType, psMetadataType type,
     118#define METADATAITEM_ALLOC_TYPE(NAME,TYPE,METATYPE) \
     119psMetadataItem* psMetadataItemAlloc##NAME(const char* name, \
     120        const char* comment, \
     121        TYPE value) \
     122{ \
     123    return psMetadataItemAlloc(name, METATYPE, comment, value); \
     124}
     125
     126METADATAITEM_ALLOC_TYPE(Str,const char*,PS_META_STR)
     127METADATAITEM_ALLOC_TYPE(F32,psF32,PS_META_F32)
     128METADATAITEM_ALLOC_TYPE(F64,psF64,PS_META_F64)
     129METADATAITEM_ALLOC_TYPE(S32,psS32,PS_META_S32)
     130METADATAITEM_ALLOC_TYPE(Bool,psBool,PS_META_BOOL)
     131
     132psMetadataItem* psMetadataItemAllocV(const char *name, psMetadataType type,
    119133                                     const char *comment, va_list argPtr)
    120134{
     
    145159    // Set metadata item type
    146160    metadataItem->type = type;
    147     metadataItem->pType = pType;
    148161
    149162    // Allocate and set metadata item name
     
    153166    // Set metadata item value
    154167    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);
    174179        break;
    175180    case PS_META_STR:
     
    186191    case PS_META_UNKNOWN:
    187192        // 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));
    189194        break;
    190195    default:
     
    256261
    257262            // 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);
    259264            newFolderEntry->data.list = psListAlloc(NULL);
    260265
     
    328333}
    329334
    330 psBool psMetadataAdd(psMetadata *md, psS32 where, const char *name, psElemType pType,
     335psBool psMetadataAdd(psMetadata *md, psS32 where, const char *name,
    331336                     psMetadataType type, const char *comment, ...)
    332337{
     
    335340
    336341    va_start(argPtr, comment);
    337     metadataItem = psMetadataItemAllocV(name, pType, type, comment, argPtr);
     342    metadataItem = psMetadataItemAllocV(name, type, comment, argPtr);
    338343    va_end(argPtr);
    339344
     
    348353    return true;
    349354}
     355
     356#define METADATA_ADD_TYPE(NAME,TYPE,METATYPE) \
     357psBool 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
     362METADATA_ADD_TYPE(S32,psS32,PS_META_S32)
     363METADATA_ADD_TYPE(F32,psF32,PS_META_F32)
     364METADATA_ADD_TYPE(F64,psF64,PS_META_F64)
     365METADATA_ADD_TYPE(List,psList*,PS_META_LIST)
     366METADATA_ADD_TYPE(Str,const char*,PS_META_STR)
     367METADATA_ADD_TYPE(Vector,psVector*,PS_META_VEC)
     368METADATA_ADD_TYPE(Image,psImage*,PS_META_IMG)
     369METADATA_ADD_TYPE(Hash,psHash*,PS_META_HASH)
     370METADATA_ADD_TYPE(LookupTable,psLookupTable*,PS_META_LOOKUPTABLE)
     371METADATA_ADD_TYPE(Unknown,void*,PS_META_UNKNOWN)
    350372
    351373psBool psMetadataRemove(psMetadata *md, psS32 where, const char *key)
     
    435457    }
    436458
    437     if(metadataItem->type == PS_META_PRIMITIVE && metadataItem->pType != PS_TYPE_PTR) {
     459    if(PS_META_IS_PRIMITIVE(metadataItem->type)) {
    438460        if (status) {
    439461            *status = false;
    440462        }
    441463        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);
    445466        return NULL;
    446467    } else {
     
    467488    } \
    468489    \
    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; \
    491503        } \
    492     } else { \
     504        break; \
     505    default: \
     506        /* if you get to this point, the value is not a number. */ \
    493507        if (status) { \
    494508            *status = false; \
    495509        } \
     510        break; \
    496511    } \
    497512    \
Note: See TracChangeset for help on using the changeset viewer.