IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 2607


Ignore:
Timestamp:
Dec 3, 2004, 1:19:07 PM (22 years ago)
Author:
harman
Message:

Updates for version 10 of SDRS

Location:
trunk/psLib
Files:
37 edited

Legend:

Unmodified
Added
Removed
  • trunk/psLib/src/astro/psTime.c

    r2515 r2607  
    1010 *  @author Ross Harman, MHPCC
    1111 *
    12  *  @version $Revision: 1.45 $ $Name: not supported by cvs2svn $
    13  *  @date $Date: 2004-11-29 18:41:07 $
     12 *  @version $Revision: 1.46 $ $Name: not supported by cvs2svn $
     13 *  @date $Date: 2004-12-03 23:15:00 $
    1414 *
    1515 *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    196196    psS32 j = 0;
    197197    psS32 numTables = 0;
     198    psU32 nFail = 0;
    198199    psVector *tablesFrom = NULL;
    199200    psVector *tablesTo = NULL;
     
    205206
    206207    // Read time config file
    207     if(psMetadataParseConfig(&timeMetadata, fileName, true) < 0) {
     208    timeMetadata = psMetadataParseConfig(timeMetadata, &nFail, fileName, true);
     209    if(timeMetadata == NULL) {
     210        return false;
     211    } else if(nFail != 0) {
    208212        return false;
    209213    }
     
    298302            if(metadataNamesPtr != NULL) {
    299303                psMetadataAdd(timeMetadata, PS_LIST_TAIL, strcat(metadataTableNames[j], "Table"),
    300                               PS_META_LOOKUPTABLE, NULL, table);
     304                              PS_TYPE_PTR, PS_META_LOOKUPTABLE, NULL, table);
    301305                foundTable = true;
    302306            } else if(foundTable==false && j==numTables-1) {
  • trunk/psLib/src/astronomy/psAstronomyErrors.dat

    r2301 r2607  
    3333psCoord_OFFSET_MODE_UNKNOWN            Specified offset mode, 0x%x, is not supported.
    3434#
    35 psAstrometry_NONLINEAR_TRANSFORM       The %s transfrom is not linear.  Only linear transforms are supported. 
     35psAstrometry_NONLINEAR_TRANSFORM       The %s transfrom is not linear.  Only linear transforms are supported.
    3636#
    3737psMetadata_METATYPE_INVALID            Specified psMetadataType, %d, is not supported.
     
    5050psMetadataIO_FITS_METATYPE_INVALID     Specified FITS metadata type, %c, is not supported.
    5151psMetadataIO_ADD_FAILED                Failed to add metadata item, %s.
    52 psMetadataIO_FILE_OPEN_FAILED          Failed to open file '%s'.  Check if it exists and it has the proper permissions.
    53 psMetadataIO_FILE_MULTIPLE_CHAR        More than one '%c' character not allowed.  Found on line %d of %s.
    54 psMetadataIO_FILE_ELEMENT_NULL         Failed to read a metadata %s on line %d of %s.
    55 psMetadataIO_FILE_TYPE_INVALID         Metadata type '%s', found on line %d of %s, is not invalid.
    56 psMetadataIO_OVERWRITE_ITEM            Duplicate Metadata item, %s, found on line %d of %s.  Overwrite not allowed.
    57 psMetadataIO_PARSE_FAILED              Failed to parse the value '%s' of metadata item %s, type %s, on line %d of %s.
     52psMetadataIO_FILE_OPEN_FAILED          Failed to open file '%s'. Check if it exists and it has the proper permissions.
     53psMetadataIO_FILE_MULTIPLE_CHAR        More than one '%c' character not allowed.  Found on line %u of %s.
     54psMetadataIO_FILE_ELEMENT_NULL         Failed to read a metadata %s on line %u of %s.
     55psMetadataIO_FILE_TYPE_INVALID         Metadata type '%s', found on line %u of %s, is not invalid.
     56psMetadataIO_OVERWRITE_ITEM            Duplicate Metadata item, %s, found on line %u of %s.  Overwrite not allowed.
     57psMetadataIO_PARSE_FAILED              Failed to parse the value '%s' of metadata item %s, type %s, on line %u of %s.
     58psMetadataIO_NO_NAME                   Failed to find key 'name' in table on line %u of %s.
     59psMetadataIO_TYPE_INVALID_LINE_FILE    Specified type, %s, is not supported on line %u of %s.
     60psMetadataIO_TAG_MISMATCH              Start tag, %s and end tag, %s do not agree.
     61psMetadataIO_TAG_UNKNOWN               Invalid end tag name, %s.
    5862
    59 
  • trunk/psLib/src/astronomy/psAstronomyErrors.h

    r2521 r2607  
    77 *  @author Robert DeSonia, MHPCC
    88 *
    9  *  @version $Revision: 1.6 $ $Name: not supported by cvs2svn $
    10  *  @date $Date: 2004-11-30 00:25:50 $
     9 *  @version $Revision: 1.7 $ $Name: not supported by cvs2svn $
     10 *  @date $Date: 2004-12-03 23:14:13 $
    1111 *
    1212 *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    2323 *     $2  The error text (rest of the line in psAstronomyErrors.dat)
    2424 *     $n  The order of the source line in psAstronomyErrors.dat (comments excluded)
    25  * 
     25 *
    2626 * DO NOT EDIT THE LINES BETWEEN //~Start and //~End!  ANY CHANGES WILL BE OVERWRITTEN.
    2727 */
     
    6666#define PS_ERRORTEXT_psMetadata_FIND_INDEX_FAILED "Could not find metadata item at index %d."
    6767#define PS_ERRORTEXT_psMetadataIO_TYPE_INVALID "Specified type, %d, is not supported."
    68 #define PS_ERRORTEXT_psMetadataIO_TYPE_INVALID_LINE_FILE "Specified type, %s, is not supported on line %lld of %s"
    6968#define PS_ERRORTEXT_psMetadataIO_EXTNUM_NOTPOSITIVE "Specified extension number, %d, is invalid.  Value must be positive if no extension name is given."
    7069#define PS_ERRORTEXT_psMetadataIO_FITS_METATYPE_INVALID "Specified FITS metadata type, %c, is not supported."
    7170#define PS_ERRORTEXT_psMetadataIO_ADD_FAILED "Failed to add metadata item, %s."
    7271#define PS_ERRORTEXT_psMetadataIO_FILE_OPEN_FAILED "Failed to open file '%s'. Check if it exists and it has the proper permissions."
    73 #define PS_ERRORTEXT_psMetadataIO_FILE_MULTIPLE_CHAR "More than one '%c' character not allowed.  Found on line %d of %s."
    74 #define PS_ERRORTEXT_psMetadataIO_FILE_ELEMENT_NULL "Failed to read a metadata %s on line %lld of %s."
    75 #define PS_ERRORTEXT_psMetadataIO_FILE_TYPE_INVALID "Metadata type '%s', found on line %lld of %s, is not invalid."
    76 #define PS_ERRORTEXT_psMetadataIO_OVERWRITE_ITEM "Duplicate Metadata item, %s, found on line %lld of %s.  Overwrite not allowed."
    77 #define PS_ERRORTEXT_psMetadataIO_PARSE_FAILED "Failed to parse the value '%s' of metadata item %s, type %s, on line %lld of %s."
    78 #define PS_ERRORTEXT_psMetadataIO_NO_NAME "Couldn't find XML name attribute on line %lld of %s."
    79 #define PS_ERRORTEXT_psMetadataIO_TAG_MISMATCH "Start and end tag names don't agree, start tag, %s end tag, %s"
    80 #define PS_ERRORTEXT_psMetadataIO_TAG_UNKNOWN "Unknown tag name, %s"
     72#define PS_ERRORTEXT_psMetadataIO_FILE_MULTIPLE_CHAR "More than one '%c' character not allowed.  Found on line %u of %s."
     73#define PS_ERRORTEXT_psMetadataIO_FILE_ELEMENT_NULL "Failed to read a metadata %s on line %u of %s."
     74#define PS_ERRORTEXT_psMetadataIO_FILE_TYPE_INVALID "Metadata type '%s', found on line %u of %s, is not invalid."
     75#define PS_ERRORTEXT_psMetadataIO_OVERWRITE_ITEM "Duplicate Metadata item, %s, found on line %u of %s.  Overwrite not allowed."
     76#define PS_ERRORTEXT_psMetadataIO_PARSE_FAILED "Failed to parse the value '%s' of metadata item %s, type %s, on line %u of %s."
     77#define PS_ERRORTEXT_psMetadataIO_NO_NAME "Failed to find key 'name' in table on line %u of %s."
     78#define PS_ERRORTEXT_psMetadataIO_TYPE_INVALID_LINE_FILE "Specified type, %s, is not supported on line %u of %s."
     79#define PS_ERRORTEXT_psMetadataIO_TAG_MISMATCH "Start tag, %s and end tag, %s do not agree."
     80#define PS_ERRORTEXT_psMetadataIO_TAG_UNKNOWN "Invalid end tag name, %s."
    8181//~End
    8282
  • trunk/psLib/src/astronomy/psMetadata.c

    r2521 r2607  
    1212*  @author Ross Harman, MHPCC
    1313*
    14 *  @version $Revision: 1.38 $ $Name: not supported by cvs2svn $
    15 *  @date $Date: 2004-11-30 00:26:53 $
     14*  @version $Revision: 1.39 $ $Name: not supported by cvs2svn $
     15*  @date $Date: 2004-12-03 23:14:28 $
    1616*
    1717*  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    8080    psFree(metadataItem->name);
    8181    psFree(metadataItem->comment);
    82     psFree(metadataItem->items);
    83     if (type == PS_META_STR || type == PS_META_VEC || type == PS_META_IMG || type == PS_META_LOOKUPTABLE ||
    84             type == PS_META_JPEG || type == PS_META_PNG || type == PS_META_ASTROM || type == PS_META_UNKNOWN ||
    85             type == PS_META_HASH) {
     82    if (type != PS_META_PRIMITIVE) {
    8683        psFree(metadataItem->data.V);
    8784    }
     
    10198/*****************************************************************************/
    10299
    103 psMetadataItem* psMetadataItemAlloc(const char *name, psMetadataType type, const char *comment, ...)
     100psMetadataItem* psMetadataItemAlloc(const char *name, psElemType pType, psMetadataType type,
     101                                    const char *comment, ...)
    104102{
    105103    va_list argPtr;
     
    110108
    111109    // Call metadata item allocation
    112     metadataItem = psMetadataItemAllocV(name, type, comment, argPtr);
     110    metadataItem = psMetadataItemAllocV(name, pType, type, comment, argPtr);
    113111
    114112    // Clean up stack after variable arguement has been used
     
    118116}
    119117
    120 psMetadataItem* psMetadataItemAllocV(const char *name, psMetadataType type, const char *comment,
    121                                      va_list argPtr)
    122 {
    123     psVector *vecIn = NULL;
    124     psVector *vecOut = NULL;
     118psMetadataItem* psMetadataItemAllocV(const char *name, psElemType pType, psMetadataType type,
     119                                     const char *comment, va_list argPtr)
     120{
    125121    psMetadataItem* metadataItem = NULL;
    126122
     
    129125
    130126    // Allocate metadata item
    131     metadataItem = (psMetadataItem* ) psAlloc(sizeof(psMetadataItem));
     127    metadataItem = (psMetadataItem*) psAlloc(sizeof(psMetadataItem));
     128    metadataItem->data.V = NULL;
    132129
    133130    // Set deallocator
     
    148145    // Set metadata item type
    149146    metadataItem->type = type;
    150     metadataItem->data.V = NULL;
    151 
    152     // Allocate metadata items with same name.
    153     metadataItem->items = psListAlloc(NULL);
     147    metadataItem->pType = pType;
    154148
    155149    // Allocate and set metadata item name
     
    158152
    159153    // Set metadata item value
    160     switch (type) {
    161     case PS_META_ITEM_SET:
    162         break;
    163     case PS_META_BOOL:
    164         metadataItem->data.B = (psBool)va_arg(argPtr, psS32);
    165         break;
    166     case PS_META_S32:
    167         metadataItem->data.S32 = (psS32)va_arg(argPtr, psS32);
    168         break;
    169     case PS_META_F32:
    170         metadataItem->data.F32 = (psF32)va_arg(argPtr, psF64);
    171         break;
    172     case PS_META_F64:
    173         metadataItem->data.F64 = va_arg(argPtr, psF64);
     154    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        }
    174174        break;
    175175    case PS_META_STR:
     176        // Perform copy of input strings
    176177        metadataItem->data.V = psStringNCopy(va_arg(argPtr, char *), MAX_STRING_LENGTH);
    177178        break;
     179    case PS_META_LIST:
    178180    case PS_META_VEC:
    179         vecIn = (psVector*)va_arg(argPtr, psVector*);
    180         vecOut = psVectorAlloc(vecIn->nalloc, vecIn->type.type);
    181         memcpy(vecOut->data.V, vecIn->data.V, vecIn->nalloc*PSELEMTYPE_SIZEOF(vecIn->type.type));
    182         metadataItem->data.V = vecOut;
    183         break;
     181    case PS_META_HASH:
    184182    case PS_META_LOOKUPTABLE:
    185         metadataItem->data.V = va_arg(argPtr, psLookupTable*); // Deep copy of input data not performed
    186         break;
    187     case PS_META_HASH:
    188         metadataItem->data.V = va_arg(argPtr, psHash*); // Deep copy of input data not performed
    189         break;
    190     case PS_META_IMG:
    191183    case PS_META_JPEG:
    192184    case PS_META_PNG:
    193185    case PS_META_ASTROM:
    194186    case PS_META_UNKNOWN:
     187        // Copy of input data not performed due to variability of data types
     188        metadataItem->data.V = va_arg(argPtr, psPtr);
     189        break;
    195190    default:
    196191        psError(PS_ERR_BAD_PARAMETER_VALUE, true, PS_ERRORTEXT_psMetadata_METATYPE_INVALID, type);
     
    209204
    210205    // Allocate metadata
    211     metadata = (psMetadata* ) psAlloc(sizeof(psMetadata));
     206    metadata = (psMetadata*) psAlloc(sizeof(psMetadata));
    212207    // Set deallocator
    213208    p_psMemSetDeallocator(metadata, (psFreeFcn) metadataFree);
    214209
    215210    // Allocate metadata's internal containers
    216     list = (psList* ) psListAlloc(NULL);
    217     table = (psHash* ) psHashAlloc(10);
     211    list = (psList*) psListAlloc(NULL);
     212    table = (psHash*) psHashAlloc(10);
    218213
    219214    metadata->list = list;
     
    223218}
    224219
    225 psBool psMetadataAddItem( psMetadata *restrict md, psMetadataItem *restrict metadataItem, psS32 location )
     220psBool psMetadataAddItem(psMetadata *restrict md, psMetadataItem *restrict metadataItem, psS32 location)
    226221{
    227222    char * key = NULL;
     
    230225    psMetadataItem *existingEntry = NULL;
    231226    psMetadataItem *newFolderEntry = NULL;
    232     psMetadataType newType = PS_META_ITEM_SET;
     227    psMetadataType newType;
    233228
    234229    PS_PTR_CHECK_NULL(md,NULL);
     
    247242    if(existingEntry != NULL) {
    248243
    249         if(existingEntry->type == PS_META_ITEM_SET) {
     244        if(existingEntry->type == PS_META_LIST) {
     245
     246            if(existingEntry->data.list == NULL) {
     247                existingEntry->data.list = psListAlloc(NULL);
     248            }
    250249
    251250            // Add leaf node to existing folder node
    252             if(!psListAdd(existingEntry->items, PS_LIST_TAIL, metadataItem)) {
    253                 psError(PS_ERR_UNKNOWN,false,
    254                         PS_ERRORTEXT_psMetadata_ADD_LIST_FAILED,
    255                         metadataItem->name );
    256                 return false;
    257             }
    258         } else if(existingEntry->type != PS_META_ITEM_SET && newType!= PS_META_ITEM_SET) {
     251            if(!psListAdd(existingEntry->data.list, PS_LIST_TAIL, metadataItem)) {
     252                psError(PS_ERR_UNKNOWN, false, PS_ERRORTEXT_psMetadata_ADD_LIST_FAILED, metadataItem->name);
     253                return false;
     254            }
     255        } else if(existingEntry->type != PS_META_LIST && newType!= PS_META_LIST) {
    259256
    260257            // Leaf node replaces another leaf. Make new folder node and add leaves.
    261             newFolderEntry = psMetadataItemAlloc(key, PS_META_ITEM_SET, NULL, NULL);
    262 
    263             if(!psListAdd(newFolderEntry->items, PS_LIST_TAIL, existingEntry)) {
    264                 psError(PS_ERR_UNKNOWN,false,
    265                         PS_ERRORTEXT_psMetadata_ADD_LIST_FAILED,
    266                         key);
     258            newFolderEntry = psMetadataItemAlloc(key, PS_TYPE_PTR, PS_META_LIST, NULL, NULL);
     259            newFolderEntry->data.list = psListAlloc(NULL);
     260
     261            if(!psListAdd(newFolderEntry->data.list, PS_LIST_TAIL, existingEntry)) {
     262                psError(PS_ERR_UNKNOWN,false, PS_ERRORTEXT_psMetadata_ADD_LIST_FAILED,key);
    267263                psFree(newFolderEntry);
    268264                return false;
    269265            }
    270266
    271             if(!psListAdd(newFolderEntry->items, PS_LIST_TAIL, metadataItem)) {
    272                 psError(PS_ERR_UNKNOWN,false,
    273                         PS_ERRORTEXT_psMetadata_ADD_LIST_FAILED,
    274                         key);
     267            if(!psListAdd(newFolderEntry->data.list, PS_LIST_TAIL, metadataItem)) {
     268                psError(PS_ERR_UNKNOWN,false, PS_ERRORTEXT_psMetadata_ADD_LIST_FAILED,key);
    275269                psFree(newFolderEntry);
    276270                return false;
     
    278272
    279273            if(!psHashRemove(mdTable, key)) {
    280                 psError(PS_ERR_UNKNOWN,false,
    281                         PS_ERRORTEXT_psMetadata_REMOVE_TABLE_FAILED,
    282                         key);
     274                psError(PS_ERR_UNKNOWN,false,PS_ERRORTEXT_psMetadata_REMOVE_TABLE_FAILED,key);
    283275                psFree(newFolderEntry);
    284276                return false;
     
    286278
    287279            if(!psHashAdd(mdTable, key, newFolderEntry)) {
    288                 psError(PS_ERR_UNKNOWN,false,
    289                         PS_ERRORTEXT_psMetadata_ADD_TABLE_FAILED,
    290                         key);
     280                psError(PS_ERR_UNKNOWN,false,PS_ERRORTEXT_psMetadata_ADD_TABLE_FAILED,key);
    291281                psFree(newFolderEntry);
    292282                return false;
     
    298288
    299289            // Folder node replaces leaf or folder node - Put old node into new folder and remove from table
    300             if(!psListAdd(metadataItem->items, PS_LIST_TAIL, existingEntry)) {
    301                 psError(PS_ERR_UNKNOWN,false,
    302                         PS_ERRORTEXT_psMetadata_ADD_LIST_FAILED,
    303                         key);
     290            if(metadataItem->data.list == NULL) {
     291                metadataItem->data.list = psListAlloc(NULL);
     292            }
     293
     294            if(!psListAdd(metadataItem->data.list, PS_LIST_TAIL, existingEntry)) {
     295                psError(PS_ERR_UNKNOWN,false,PS_ERRORTEXT_psMetadata_ADD_LIST_FAILED,key);
    304296                return false;
    305297            }
    306298
    307299            if(!psHashRemove(mdTable, key)) {
    308                 psError(PS_ERR_UNKNOWN,false,
    309                         PS_ERRORTEXT_psMetadata_REMOVE_TABLE_FAILED,
    310                         key);
     300                psError(PS_ERR_UNKNOWN,false,PS_ERRORTEXT_psMetadata_REMOVE_TABLE_FAILED,key);
    311301                return false;
    312302            }
    313303
    314304            if(!psHashAdd(mdTable, key, metadataItem)) {
    315                 psError(PS_ERR_UNKNOWN,false,
    316                         PS_ERRORTEXT_psMetadata_ADD_TABLE_FAILED,
    317                         key);
     305                psError(PS_ERR_UNKNOWN,false,PS_ERRORTEXT_psMetadata_ADD_TABLE_FAILED,key);
    318306                return false;
    319307            }
     
    323311        // Node doesn't exist - Add new metadata item to metadata collection's hash
    324312        if(!psHashAdd(mdTable, key, metadataItem)) {
    325             psError(PS_ERR_UNKNOWN,false,
    326                     PS_ERRORTEXT_psMetadata_ADD_TABLE_FAILED,
    327                     key);
     313            psError(PS_ERR_UNKNOWN,false,PS_ERRORTEXT_psMetadata_ADD_TABLE_FAILED,key);
    328314            return false;
    329315        }
     
    331317
    332318    // Add items to metadata collection's list, even if they have the same metadata item names. Folder nodes
    333     // (PS_META_ITEM_SET metadata items) are not added, since the metadata list is flat.
    334     if(metadataItem->type != PS_META_ITEM_SET) {
     319    // (PS_META_LIST metadata items) are not added, since the metadata list is flat.
     320    if(metadataItem->type != PS_META_LIST) {
    335321        if(!psListAdd(mdList, location, metadataItem)) {
    336             psError(PS_ERR_UNKNOWN,false,
    337                     PS_ERRORTEXT_psMetadata_ADD_COLLECTION_FAILED,
    338                     key);
     322            psError(PS_ERR_UNKNOWN,false,PS_ERRORTEXT_psMetadata_ADD_COLLECTION_FAILED,key);
    339323            return false;
    340324        }
     
    344328}
    345329
    346 psBool psMetadataAdd(psMetadata* restrict md, psS32 where, const char *name, psMetadataType type,
    347                      const char *comment, ...)
     330psBool psMetadataAdd(psMetadata* restrict md, psS32 where, const char *name, psElemType pType,
     331                     psMetadataType type, const char *comment, ...)
    348332{
    349333    va_list argPtr;
     
    351335
    352336    va_start(argPtr, comment);
    353     metadataItem = psMetadataItemAllocV(name, type, comment, argPtr);
     337    metadataItem = psMetadataItemAllocV(name, pType, type, comment, argPtr);
    354338    va_end(argPtr);
    355339
    356340    if (!psMetadataAddItem(md, metadataItem, where)) {
    357         psError(PS_ERR_UNKNOWN,false,
    358                 PS_ERRORTEXT_psMetadata_ADD_FAILED);
     341        psError(PS_ERR_UNKNOWN,false,PS_ERRORTEXT_psMetadata_ADD_FAILED);
    359342        psFree(metadataItem);
    360343        return false;
     
    368351psBool psMetadataRemove(psMetadata* restrict md, psS32 where, const char *restrict key)
    369352{
    370     psS32 numChildren = 0;
    371353    psList* mdList = NULL;
     354    psList* entryList = NULL;
    372355    psHash* mdTable = NULL;
    373356    psMetadataItem* entry = NULL;
     
    386369
    387370        // Remove by key name
    388         entry = (psMetadataItem* ) psHashLookup(mdTable, key);
     371        entry = (psMetadataItem*)psHashLookup(mdTable, key);
    389372        if (entry == NULL) {
    390             psError(PS_ERR_BAD_PARAMETER_VALUE, true,
    391                     PS_ERRORTEXT_psMetadata_FIND_FAILED,
    392                     key);
     373            psError(PS_ERR_BAD_PARAMETER_VALUE, true, PS_ERRORTEXT_psMetadata_FIND_FAILED, key);
    393374            return false;
    394375        }
    395376
    396         numChildren = entry->items->size;
    397         if (entry->type == PS_META_ITEM_SET && numChildren > 0) {
     377        if (entry->type == PS_META_LIST) {
    398378
    399379            // Table entry has children. Entry and children must be removed from metadata collection's list
    400             psListSetIterator(entry->items, PS_LIST_HEAD);
    401             entryChild = psListGetCurrent(entry->items);
    402             while (entryChild != NULL) {
     380            psListSetIterator(entryList, PS_LIST_HEAD);
     381            entryChild = psListGetCurrent(entryList);
     382            while(entryChild != NULL) {
    403383                if (!psListRemove(mdList, PS_LIST_UNKNOWN, entryChild)) {
    404                     psError(PS_ERR_UNKNOWN,false,
    405                             PS_ERRORTEXT_psMetadata_REMOVE_LIST_FAILED,
    406                             key);
     384                    psError(PS_ERR_UNKNOWN, false, PS_ERRORTEXT_psMetadata_REMOVE_LIST_FAILED, key);
    407385                    return false;
    408386                }
    409                 entryChild = psListGetNext(entry->items);
     387                entryChild = psListGetNext(entryList);
    410388            }
    411389        } else {
     
    413391            // Table entry has no children. Remove entry from metadata collection's list
    414392            if (!psListRemove(mdList, PS_LIST_UNKNOWN, entry)) {
    415                 psError(PS_ERR_UNKNOWN,false,
    416                         PS_ERRORTEXT_psMetadata_REMOVE_LIST_FAILED,
    417                         key);
     393                psError(PS_ERR_UNKNOWN, false, PS_ERRORTEXT_psMetadata_REMOVE_LIST_FAILED, key);
    418394                return false;
    419395            }
     
    421397        // Remove entry from metadata collection's table
    422398        if (!psHashRemove(mdTable, key)) {
    423             psError(PS_ERR_UNKNOWN,false,
    424                     PS_ERRORTEXT_psMetadata_REMOVE_TABLE_FAILED,
    425                     key);
     399            psError(PS_ERR_UNKNOWN, false, PS_ERRORTEXT_psMetadata_REMOVE_TABLE_FAILED, key);
    426400            return false;
    427401        }
     
    431405        entry = psListGet(mdList, where);
    432406        if (entry == NULL) {
    433             psError(PS_ERR_BAD_PARAMETER_VALUE, true,
    434                     PS_ERRORTEXT_psMetadata_FIND_INDEX_FAILED,
    435                     where);
     407            psError(PS_ERR_BAD_PARAMETER_VALUE, true, PS_ERRORTEXT_psMetadata_FIND_INDEX_FAILED, where);
    436408            return false;
    437409        }
    438410
    439411        key = entry->name;
    440         if (key == NULL) {
    441             psError(PS_ERR_BAD_PARAMETER_VALUE, true,
    442                     PS_ERRORTEXT_psMetadata_REMOVE_LIST_INDEX_FAILED,
    443                     where);
     412        if(key == NULL) {
     413            psError(PS_ERR_BAD_PARAMETER_VALUE, true, PS_ERRORTEXT_psMetadata_REMOVE_LIST_INDEX_FAILED, where);
    444414            return false;
    445415        }
     
    463433    mdTable = md->table;
    464434
    465     entry = (psMetadataItem* ) psHashLookup(mdTable, key);
     435    entry = (psMetadataItem*)psHashLookup(mdTable, key);
    466436    if (entry == NULL) {
    467437        return NULL;
     
    478448    PS_PTR_CHECK_NULL(md->list,NULL);
    479449
    480     entry = (psMetadataItem* ) psListGet(md->list, where);
     450    entry = (psMetadataItem*) psListGet(md->list, where);
    481451    if (entry == NULL) {
    482         psError(PS_ERR_BAD_PARAMETER_VALUE, true,
    483                 PS_ERRORTEXT_psMetadata_FIND_INDEX_FAILED,
    484                 where);
     452        psError(PS_ERR_BAD_PARAMETER_VALUE, true, PS_ERRORTEXT_psMetadata_FIND_INDEX_FAILED, where);
    485453        return NULL;
    486454    }
  • trunk/psLib/src/astronomy/psMetadata.h

    r2521 r2607  
    1111*  @author Ross Harman, MHPCC
    1212*
    13 *  @version $Revision: 1.26 $ $Name: not supported by cvs2svn $
    14 *  @date $Date: 2004-11-30 00:27:14 $
     13*  @version $Revision: 1.27 $ $Name: not supported by cvs2svn $
     14*  @date $Date: 2004-12-03 23:14:34 $
    1515*
    1616*  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    3333 */
    3434typedef enum {
    35     PS_META_ITEM_SET = 0,              ///< Null. Metadata is in psMetadataItem.items
    36     PS_META_BOOL,                      ///< Boolean data.
    37     PS_META_S32,                       ///< Signed 32-bit integer data.
    38     PS_META_F32,                       ///< Single-precision float data.
    39     PS_META_F64,                       ///< Double-precision float data.
    40     PS_META_STR,                       ///< String data (Stored in as psPtr ).
    41     PS_META_VEC,                       ///< Vector data (Stored in as psPtr ).
    42     PS_META_HASH,                      ///< Hash data (Stored in as psPtr ).
    43     PS_META_IMG,                       ///< Image data (Stored in as psPtr ).
    44     PS_META_LOOKUPTABLE,               ///< Lookup table data (Stored as void *).
    45     PS_META_JPEG,                      ///< JPEG data (Stored in as psPtr ).
    46     PS_META_PNG,                       ///< PNG data (Stored in as psPtr ).
    47     PS_META_ASTROM,                    ///< Astrometric coefficients (Stored in as psPtr ).
    48     PS_META_UNKNOWN,                   ///< Other data (Stored in as psPtr ).
     35    PS_META_PRIMITIVE,                 ///< Primitive data.
     36    PS_META_LIST,                      ///< List data (Stored as item.data.list).
     37    PS_META_STR,                       ///< String data (Stored as item.data.V).
     38    PS_META_VEC,                       ///< Vector data (Stored as item.data.V).
     39    PS_META_IMG,                       ///< Image data (Stored as item.data.V).
     40    PS_META_HASH,                      ///< Hash data (Stored as item.data.V).
     41    PS_META_LOOKUPTABLE,               ///< Lookup table data (Stored as item.data.V).
     42    PS_META_JPEG,                      ///< JPEG data (Stored as item.data.V).
     43    PS_META_PNG,                       ///< PNG data (Stored as item.data.V).
     44    PS_META_ASTROM,                    ///< Astrometric coefficients (Stored as item.data.V).
     45    PS_META_UNKNOWN,                   ///< Other data (Stored as item.data.V).
    4946    PS_META_NTYPE                      ///< Number of types. Must be last.
    5047} psMetadataType;
    51 
    52 /** Metadata item data structure.
    53  *
    54  * Struct for maintaining metadata items of varying types. It also contains
    55  * information about the item name, flags, comments, and other items with the same name.
    56  */
    57 typedef struct psMetadataItem
    58 {
    59     const psS32 id;                      ///< Unique ID for metadata item.
    60     char *restrict name;               ///< Name of metadata item.
    61     psMetadataType type;               ///< Type of metadata item.
    62     union {
    63         psBool B;                        ///< boolean data
    64         psS32 S32;                     ///< Signed 32-bit integer data.
    65         psF32 F32;                     ///< Single-precision float data.
    66         psF64 F64;                     ///< Double-precision float data.
    67         psPtr V;                       ///< Pointer to other type of data.
    68     } data;                            ///< Union for data types.
    69     char *comment;                     ///< Optional comment ("", not NULL).
    70     psList* restrict items;            ///< List of psMetadataItems with same name.
    71 }
    72 psMetadataItem;
    7348
    7449/** Metadata data structure.
     
    8560}
    8661psMetadata;
     62
     63/** Metadata item data structure.
     64 *
     65 * Struct for maintaining metadata items of varying types. It also contains
     66 * information about the item name, flags, comments, and other items with the same name.
     67 */
     68typedef struct psMetadataItem
     69{
     70    const psS32 id;                    ///< Unique ID for metadata item.
     71    char *name;                        ///< Name of metadata item.
     72    psMetadataType type;               ///< Type of metadata item.
     73    psElemType pType;                  ///< Primitive data type
     74    union {
     75        psBool B;                      ///< boolean data
     76        psS32 S32;                     ///< Signed 32-bit integer data.
     77        psF32 F32;                     ///< Single-precision float data.
     78        psF64 F64;                     ///< Double-precision float data.
     79        psList *list;                  ///< List data.
     80        psMetadata *md;                ///< Metadata data.
     81        psPtr V;                       ///< Pointer to other type of data.
     82    } data;                            ///< Union for data types.
     83    char *comment;                     ///< Optional comment ("", not NULL).
     84}
     85psMetadataItem;
    8786
    8887/** Create a metadata item.
     
    103102psMetadataItem* psMetadataItemAlloc(
    104103    const char *name,                  ///< Name of metadata item.
     104    psElemType pType,                  ///< Primitive type.
    105105    psMetadataType type,               ///< Type of metadata item.
    106106    const char *comment,               ///< Comment for metadata item.
     
    125125psMetadataItem* psMetadataItemAllocV(
    126126    const char *name,                  ///< Name of metadata item.
     127    psElemType pType,                  ///< Primitive type.
    127128    psMetadataType type,               ///< Type of metadata item.
    128129    const char *comment,               ///< Comment for metadata item.
     
    149150    psMetadata* restrict md,           ///< Metadata collection to insert metadat item.
    150151    psMetadataItem* restrict item,     ///< Metadata item to be added.
    151     psS32 location                       ///< Location to be added.
     152    psS32 location                     ///< Location to be added.
    152153);
    153154
     
    160161psBool psMetadataAdd(
    161162    psMetadata* restrict md,           ///< Metadata collection to insert metadat item.
    162     psS32 where,                         ///< Location to be added.
     163    psS32 where,                       ///< Location to be added.
    163164    const char *name,                  ///< Name of metadata item.
     165    psElemType pType,                  ///< Primitive type.
    164166    psMetadataType type,               ///< Type of metadata item.
    165167    const char *comment,               ///< Comment for metadata item.
     
    179181psBool psMetadataRemove(
    180182    psMetadata* restrict md,           ///< Metadata collection to insert metadat item.
    181     psS32 where,                         ///< Location to be removed.
     183    psS32 where,                       ///< Location to be removed.
    182184    const char *restrict key           ///< Name of metadata key.
    183185);
     
    205207psMetadataItem* psMetadataGet(
    206208    psMetadata* restrict md,           ///< Metadata collection to insert metadat item.
    207     psS32 where                          ///< Location to be retrieved.
     209    psS32 where                        ///< Location to be retrieved.
    208210);
    209211
     
    217219psBool psMetadataSetIterator(
    218220    psMetadata* restrict md,           ///< Metadata collection to iterate.
    219     psS32 where                          ///< Location of iterator.
     221    psS32 where                        ///< Location of iterator.
    220222);
    221223
     
    229231    psMetadata* restrict md,           ///< Metadata collection to iterate.
    230232    const char *restrict match,        ///< Beginning of key name.
    231     psS32 which                          ///< Iterator to be used.
     233    psS32 which                        ///< Iterator to be used.
    232234);
    233235
     
    241243    psMetadata* restrict md,           ///< Metadata collection to iterate.
    242244    const char *restrict match,        ///< Beginning of key name.
    243     psS32 which                          ///< Iterator to be used.
     245    psS32 which                        ///< Iterator to be used.
    244246);
    245247
  • trunk/psLib/src/astronomy/psMetadataIO.c

    r2525 r2607  
    99*  @author Ross Harman, MHPCC
    1010*
    11 *  @version $Revision: 1.12 $ $Name: not supported by cvs2svn $
    12 *  @date $Date: 2004-11-30 01:09:14 $
     11*  @version $Revision: 1.13 $ $Name: not supported by cvs2svn $
     12*  @date $Date: 2004-12-03 23:14:40 $
    1313*
    1414*  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    6060/** Free and null temporary variables used by config file parser */
    6161#define CLEAR_TEMPS()                                                                                        \
    62 if(strName) {                                                                                            \
    63     psFree(strName);                                                                                     \
    64     strName = NULL;                                                                                      \
    65 }                                                                                                        \
    66 if(strType) {                                                                                            \
    67     psFree(strType);                                                                                     \
    68     strType = NULL;                                                                                      \
    69 }                                                                                                        \
    70 if(strValue) {                                                                                           \
    71     psFree(strValue);                                                                                    \
    72     strValue = NULL;                                                                                     \
    73 }                                                                                                        \
    74 if(strComment) {                                                                                         \
    75     psFree(strComment);                                                                                  \
    76     strComment = NULL;                                                                                   \
    77 }                                                                                                        \
    78 if(tempVec) {                                                                                            \
    79     psFree(tempVec);                                                                                     \
    80     tempVec = NULL;                                                                                      \
     62if(strName) {                                                                                                \
     63    psFree(strName);                                                                                         \
     64    strName = NULL;                                                                                          \
     65}                                                                                                            \
     66if(strType) {                                                                                                \
     67    psFree(strType);                                                                                         \
     68    strType = NULL;                                                                                          \
     69}                                                                                                            \
     70if(strValue) {                                                                                               \
     71    psFree(strValue);                                                                                        \
     72    strValue = NULL;                                                                                         \
     73}                                                                                                            \
     74if(strComment) {                                                                                             \
     75    psFree(strComment);                                                                                      \
     76    strComment = NULL;                                                                                       \
    8177}
    8278
     
    316312{
    317313    psMetadataType type;
     314    psElemType pType;
    318315
    319316    PS_PTR_CHECK_NULL(fd,);
     
    322319
    323320    type = metadataItem->type;
     321    pType = metadataItem->pType;
    324322
    325323    switch(type) {
    326     case PS_META_BOOL:
    327         fprintf(fd, format, metadataItem->data.B);
    328         break;
    329     case PS_META_S32:
    330         fprintf(fd,format, metadataItem->data.S32);
    331         break;
    332     case PS_META_F32:
    333         fprintf(fd, format, metadataItem->data.F32);
    334         break;
    335     case PS_META_F64:
    336         fprintf(fd, format, metadataItem->data.F64);
     324    case PS_META_PRIMITIVE:
     325        switch(pType) {
     326        case PS_TYPE_BOOL:
     327            fprintf(fd, format, metadataItem->data.B);
     328            break;
     329        case PS_TYPE_S32:
     330            fprintf(fd,format, metadataItem->data.S32);
     331            break;
     332        case PS_TYPE_F32:
     333            fprintf(fd, format, metadataItem->data.F32);
     334            break;
     335        case PS_TYPE_F64:
     336            fprintf(fd, format, metadataItem->data.F64);
     337            break;
     338        default:
     339            psError(PS_ERR_BAD_PARAMETER_TYPE,true, PS_ERRORTEXT_psMetadata_METATYPE_INVALID, (int)pType);
     340        }
    337341        break;
    338342    case PS_META_STR:
    339         fprintf(fd, format, metadataItem->data.V);
     343        fprintf(fd,format, metadataItem->data.V);
    340344        break;
    341345    default:
     
    359363    psS32 numKeys = 0;
    360364    psS32 keyNum = 0;
    361     psMetadataType metadataItemType;
    362365    fitsfile *fd = NULL;
    363366
     
    416419        switch (keyType) {
    417420        case 'I':
    418             metadataItemType = PS_META_S32;
    419             success = psMetadataAdd(output, PS_LIST_TAIL, keyName, metadataItemType, keyComment, atoi(keyValue));
     421            success = psMetadataAdd(output, PS_LIST_TAIL, keyName, PS_TYPE_S32, PS_META_PRIMITIVE,
     422                                    keyComment, atoi(keyValue));
    420423            break;
    421424        case 'F':
    422             metadataItemType = PS_META_F64;
    423             success = psMetadataAdd(output, PS_LIST_TAIL, keyName, metadataItemType, keyComment, atof(keyValue));
     425            success = psMetadataAdd(output, PS_LIST_TAIL, keyName, PS_TYPE_F64, PS_META_PRIMITIVE,
     426                                    keyComment, atof(keyValue));
    424427            break;
    425428        case 'C':
    426             metadataItemType = PS_META_STR;
    427             success = psMetadataAdd(output, PS_LIST_TAIL, keyName, metadataItemType, keyComment, keyValue);
     429            success = psMetadataAdd(output, PS_LIST_TAIL, keyName, PS_TYPE_PTR, PS_META_STR, keyComment,
     430                                    keyValue);
    428431            break;
    429432        case 'L':
    430             metadataItemType = PS_META_BOOL;
    431433            tempBool = (keyValue[0] == 'T') ? 1 : 0;
    432             success = psMetadataAdd(output, PS_LIST_TAIL, keyName, metadataItemType, keyComment, tempBool);
     434            success = psMetadataAdd(output, PS_LIST_TAIL, keyName, PS_TYPE_BOOL, PS_META_PRIMITIVE, keyComment,
     435                                    tempBool);
    433436            break;
    434437        case 'U':
    435438        case 'X':
    436439        default:
    437             psError(PS_ERR_IO, true,
    438                     PS_ERRORTEXT_psMetadataIO_FITS_METATYPE_INVALID,
    439                     keyType);
     440            psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FITS_METATYPE_INVALID, keyType);
    440441            return output;
    441442        }
    442443
    443444        if (!success) {
    444             psError(PS_ERR_UNKNOWN, false,
    445                     PS_ERRORTEXT_psMetadataIO_ADD_FAILED,
    446                     keyName);
     445            psError(PS_ERR_UNKNOWN, false, PS_ERRORTEXT_psMetadataIO_ADD_FAILED, keyName);
    447446            return output;
    448447        }
     
    452451}
    453452
    454 
    455 psS32 psMetadataParseConfig(psMetadata** md, const char *fileName, psBool overwrite)
     453psMetadata* psMetadataParseConfig(psMetadata* md, psU32 *nFail, const char *fileName, psBool overwrite)
    456454{
    457455    psBool tempBool;
     
    463461    char *linePtr = NULL;
    464462    psS32 status = 0;
    465     psS32 lineCount = 0;
    466     psS32 failedLines = 0;
     463    psU32 lineCount = 0;
    467464    psF64 tempDbl = 0.0;
    468465    psS32 tempInt = 0.0;
     
    470467    psVector *tempVec = NULL;
    471468    FILE *fp = NULL;
    472     psElemType elemType;
     469    psElemType pType;
    473470    psMetadataType mdType;
    474471
    475472
    476473    // Check for nulls
    477     PS_PTR_CHECK_NULL(fileName,-1);
     474    PS_PTR_CHECK_NULL(fileName,NULL);
    478475    if((fp=fopen(fileName, "r")) == NULL) {
    479         psError(PS_ERR_IO, true,
    480                 PS_ERRORTEXT_psMetadataIO_FILE_OPEN_FAILED,
    481                 fileName);
    482         return -1;
     476        psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FILE_OPEN_FAILED, fileName);
     477        return NULL;
    483478    }
    484479
    485480    // Allocate metadata if necessary
    486     if (*md == NULL) {
    487         *md = psMetadataAlloc();
     481    if (md == NULL) {
     482        md = psMetadataAlloc();
    488483    }
    489484
     
    504499            // Check for more than one '*' or '@' in a line
    505500            if(repeatedChars(linePtr, '@') > 1) {
    506                 failedLines++;
     501                (*nFail)++;
    507502                psError(PS_ERR_IO, true,
    508                         PS_ERRORTEXT_psMetadataIO_FILE_MULTIPLE_CHAR,
    509                         '@', lineCount, fileName);
     503                        PS_ERRORTEXT_psMetadataIO_FILE_MULTIPLE_CHAR, '@', lineCount, fileName);
    510504                continue;
    511505            } else if(repeatedChars(linePtr, '*') > 1) {
    512                 failedLines++;
     506                (*nFail)++;
    513507                psError(PS_ERR_IO, true,
    514                         PS_ERRORTEXT_psMetadataIO_FILE_MULTIPLE_CHAR,
    515                         '*', lineCount, fileName);
     508                        PS_ERRORTEXT_psMetadataIO_FILE_MULTIPLE_CHAR, '*', lineCount, fileName);
    516509                continue;
    517510            } else if(repeatedChars(linePtr, '~') > 0) {
    518                 failedLines++;
     511                (*nFail)++;
    519512                psError(PS_ERR_IO, true,
    520                         PS_ERRORTEXT_psMetadataIO_FILE_MULTIPLE_CHAR,
    521                         '~', lineCount, fileName);
     513                        PS_ERRORTEXT_psMetadataIO_FILE_MULTIPLE_CHAR, '~', lineCount, fileName);
    522514                continue;
    523515            }
     
    526518            strName = getToken(&linePtr, " ", &status);
    527519            if(strName==NULL || status) {
    528                 failedLines++;
     520                (*nFail)++;
    529521                status = 0;
    530522                psError(PS_ERR_IO, true,
    531                         PS_ERRORTEXT_psMetadataIO_FILE_ELEMENT_NULL,
    532                         "name",lineCount, fileName);
     523                        PS_ERRORTEXT_psMetadataIO_FILE_ELEMENT_NULL, "name", lineCount, fileName);
    533524                continue;
    534525            }
     
    537528            strType = getToken(&linePtr, " ", &status);
    538529            if(strType==NULL) {
    539                 failedLines++;
     530                (*nFail)++;
    540531                status = 0;
    541                 psError(PS_ERR_IO, true,
    542                         PS_ERRORTEXT_psMetadataIO_FILE_ELEMENT_NULL,
    543                         "type",lineCount, fileName);
     532                psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FILE_ELEMENT_NULL, "type",lineCount,
     533                        fileName);
    544534                continue;
    545535            } else if(!strncmp(strType, "*", 1)) {
    546                 mdType = PS_META_ITEM_SET;
     536                mdType = PS_META_LIST;
     537                pType = PS_TYPE_PTR;
    547538            } else if(!strncmp(strType, "STR", 3)) {
    548539                mdType = PS_META_STR;
    549                 elemType = PS_TYPE_PTR;
     540                pType = PS_TYPE_PTR;
    550541            } else if(!strncmp(strType, "BOOL", 3)) {
    551                 mdType = PS_META_BOOL;
    552                 elemType = PS_TYPE_U8;
     542                mdType = PS_META_PRIMITIVE;
     543                pType = PS_TYPE_BOOL;
    553544            } else if(!strncmp(strType, "S32", 3)) {
    554                 mdType = PS_META_S32;
    555                 elemType = PS_TYPE_S32;
     545                mdType = PS_META_PRIMITIVE;
     546                pType = PS_TYPE_S32;
    556547            } else if(!strncmp(strType, "F32", 3)) {
    557                 mdType = PS_META_F32;
    558                 elemType = PS_TYPE_F32;
     548                mdType = PS_META_PRIMITIVE;
     549                pType = PS_TYPE_F32;
    559550            } else if(!strncmp(strType, "F64", 3)) {
    560                 mdType = PS_META_F64;
    561                 elemType = PS_TYPE_F64;
     551                mdType = PS_META_PRIMITIVE;
     552                pType = PS_TYPE_F64;
    562553            } else {
    563                 failedLines++;
    564                 psError(PS_ERR_IO, true,
    565                         PS_ERRORTEXT_psMetadataIO_FILE_TYPE_INVALID,
    566                         strType, lineCount, fileName);
     554                (*nFail)++;
     555                psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FILE_TYPE_INVALID, strType, lineCount,
     556                        fileName);
    567557                continue;
    568558            }
     
    573563
    574564            // Get the metadata item value if there is one. Lines with * don't have values.
    575             if(mdType != PS_META_ITEM_SET) {
     565            if(mdType != PS_META_LIST) {
    576566                strValue = getToken(&linePtr, "#", &status);
    577567                if(strValue==NULL) {
    578                     failedLines++;
     568                    (*nFail)++;
    579569                    status = 0;
    580                     psError(PS_ERR_IO, true,
    581                             PS_ERRORTEXT_psMetadataIO_FILE_ELEMENT_NULL,
    582                             "value",lineCount, fileName);
     570                    psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FILE_ELEMENT_NULL, "value", lineCount,
     571                            fileName);
    583572                    continue;
    584573                }
     
    588577            strComment = getToken(&linePtr,"~", &status);
    589578            if(status) {
    590                 failedLines++;
     579                (*nFail)++;
    591580                status = 0;
    592                 psError(PS_ERR_IO, true,
    593                         PS_ERRORTEXT_psMetadataIO_FILE_ELEMENT_NULL,
    594                         "comment",lineCount, fileName);
     581                psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FILE_ELEMENT_NULL, "comment", lineCount,
     582                        fileName);
    595583                continue;
    596584            }
     
    599587            and allow switch/case below to add new item. If overwrite is false, then report error. If found
    600588            item is folder node, then psMetadataAdd will automatically add a new child. */
    601             metadataItem = psMetadataLookup(*md, strName);
     589            metadataItem = psMetadataLookup(md, strName);
    602590            if(metadataItem != NULL) {
    603                 if(metadataItem->type!=PS_META_ITEM_SET) {
     591                if(metadataItem->type!=PS_META_LIST) {
    604592                    if(overwrite) {
    605                         psMetadataRemove(*md, PS_LIST_UNKNOWN, strName);
     593                        psMetadataRemove(md, PS_LIST_UNKNOWN, strName);
    606594                    } else {
    607                         failedLines++;
    608                         psError(PS_ERR_IO, true,
    609                                 PS_ERRORTEXT_psMetadataIO_OVERWRITE_ITEM,
    610                                 strName, lineCount, fileName);
     595                        (*nFail)++;
     596                        psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_OVERWRITE_ITEM, strName, lineCount,
     597                                fileName);
    611598                        continue;
    612599                    }
     
    616603            // Create and add metadata item to metadata and parse values
    617604            switch (mdType) {
    618             case PS_META_ITEM_SET:
    619                 psMetadataAdd(*md, PS_LIST_TAIL, strName, mdType, NULL, NULL);
     605            case PS_META_LIST:
     606                psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, NULL, NULL);
    620607                break;
    621             case PS_META_BOOL:
    622                 tempBool = parseBool(strValue, &status);
     608            case PS_META_STR:
     609                psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, strComment, strValue);
     610                break;
     611            case PS_META_VEC:
     612                tempVec = parseVector(strValue, pType, &status);
    623613                if(!status) {
    624                     psMetadataAdd(*md, PS_LIST_TAIL, strName, mdType, strComment, tempBool);
     614                    psMetadataAdd(md, PS_LIST_TAIL, strName+1, pType, mdType, strComment, tempVec);
    625615                } else {
    626616                    status = 0;
    627                     failedLines++;
    628                     psError(PS_ERR_IO, true,
    629                             PS_ERRORTEXT_psMetadataIO_PARSE_FAILED,
    630                             strValue, strName, strType, lineCount, fileName);
     617                    (*nFail)++;
     618                    psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName,
     619                            strType, lineCount, fileName);
    631620                    continue;
    632621                }
    633622                break;
    634             case PS_META_S32:
    635                 tempInt = (psS32)parseValue(strValue, &status);
    636                 if(!status) {
    637                     psMetadataAdd(*md, PS_LIST_TAIL, strName, mdType, strComment, tempInt);
    638                 } else {
    639                     status = 0;
    640                     failedLines++;
    641                     psError(PS_ERR_IO, true,
    642                             PS_ERRORTEXT_psMetadataIO_PARSE_FAILED,
    643                             strValue, strName, strType, lineCount, fileName);
     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:
     664                    (*nFail)++;
     665                    psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FILE_TYPE_INVALID, mdType, lineCount,
     666                            fileName);
    644667                    continue;
    645                 }
    646                 break;
    647             case PS_META_F32:
    648             case PS_META_F64:
    649                 tempDbl = parseValue(strValue, &status);
    650                 if(!status) {
    651                     psMetadataAdd(*md, PS_LIST_TAIL, strName, mdType, strComment, tempDbl);
    652                 } else {
    653                     status = 0;
    654                     failedLines++;
    655                     psError(PS_ERR_IO, true,
    656                             PS_ERRORTEXT_psMetadataIO_PARSE_FAILED,
    657                             strValue, strName, strType, lineCount, fileName);
    658                     continue;
    659                 }
    660                 break;
    661             case PS_META_STR:
    662                 psMetadataAdd(*md, PS_LIST_TAIL, strName, mdType, strComment, strValue);
    663                 break;
    664             case PS_META_VEC:
    665                 tempVec = parseVector(strValue, elemType, &status);
    666                 if(!status) {
    667                     psMetadataAdd(*md, PS_LIST_TAIL, strName+1, mdType, strComment, tempVec);
    668                 } else {
    669                     status = 0;
    670                     failedLines++;
    671                     psError(PS_ERR_IO, true,
    672                             PS_ERRORTEXT_psMetadataIO_PARSE_FAILED,
    673                             strValue, strName, strType, lineCount, fileName);
    674                     continue;
    675                 }
     668                } // switch
    676669                break;
    677670            default:
    678                 failedLines++;
    679                 psError(PS_ERR_IO, true,
    680                         PS_ERRORTEXT_psMetadataIO_FILE_TYPE_INVALID,
    681                         mdType, lineCount, fileName);
     671                (*nFail)++;
     672                psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FILE_TYPE_INVALID, mdType, lineCount,
     673                        fileName);
    682674                continue;
    683675            } // switch
     
    687679    psFree(line);
    688680
    689     return failedLines;
     681    return md;
    690682}
    691683
     
    753745
    754746    // Add attributes to metadata
    755     psMetadataAdd(md, PS_LIST_TAIL, "htAtts", PS_META_HASH, NULL, htAtts);
     747    psMetadataAdd(md, PS_LIST_TAIL, "htAtts", PS_TYPE_PTR, PS_META_HASH, NULL, htAtts);
    756748
    757749    psFree(psTagName);
     
    765757    psBool tempBool = false;
    766758    psS32 status = 0;
    767     psU64 lineNumber = 0;
     759    psU32 lineNumber = 0;
    768760    psF64 tempDbl = 0.0;
    769761    psS32 tempInt = 0.0;
    770     psElemType elemType;
     762    psElemType pType;
    771763    psMetadataType mdType;
    772764    char *fileName = NULL;
     
    790782    metadataItem = psMetadataLookup(md, "htAtts");
    791783    PS_PTR_CHECK_NULL_GENERAL(metadataItem, return);
    792     PS_PTR_CHECK_NULL_GENERAL(metadataItem->items, return);
    793     psListSetIterator(metadataItem->items, PS_LIST_TAIL);
    794     metadataItem = (psMetadataItem*)psListGetCurrent(metadataItem->items);
    795     htAtts = (psHash*)metadataItem->data.V;
     784    PS_PTR_CHECK_NULL_GENERAL(metadataItem->data.list, return);
     785    psListSetIterator(metadataItem->data.list, PS_LIST_TAIL);
     786    metadataItem = (psMetadataItem*)psListGetCurrent(metadataItem->data.list);
     787    htAtts = (psHash*)metadataItem->data.list;
    796788    PS_PTR_CHECK_NULL_GENERAL(htAtts, return);
    797789    fileName = (char*)input->filename;
     
    811803        if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psString")) {
    812804            mdType = PS_META_STR;
    813             elemType = PS_TYPE_PTR;
     805            pType = PS_TYPE_PTR;
    814806        } else if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psBool")) {
    815             mdType = PS_META_BOOL;
    816             elemType = PS_TYPE_U8;
     807            mdType = PS_META_PRIMITIVE;
     808            pType = PS_TYPE_U8;
    817809        } else if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psS32")) {
    818             mdType = PS_META_S32;
    819             elemType = PS_TYPE_S32;
     810            mdType = PS_META_PRIMITIVE;
     811            pType = PS_TYPE_S32;
    820812        } else if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psF32")) {
    821             mdType = PS_META_F32;
    822             elemType = PS_TYPE_F32;
     813            mdType = PS_META_PRIMITIVE;
     814            pType = PS_TYPE_F32;
    823815        } else if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psF64")) {
    824             mdType = PS_META_F64;
    825             elemType = PS_TYPE_F64;
     816            mdType = PS_META_PRIMITIVE;
     817            pType = PS_TYPE_F64;
    826818        } else {
    827819            psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_TYPE_INVALID_LINE_FILE, strType, lineNumber,
     
    847839        metadataItem = psMetadataLookup(md, strName);
    848840        if(metadataItem != NULL) {
    849             if(metadataItem->type != PS_META_ITEM_SET) {
     841            if(metadataItem->type != PS_META_LIST) {
    850842                if(overwrite) {
    851843                    psMetadataRemove(md, PS_LIST_UNKNOWN, strName);
     
    861853    // Create metadata item and add to metadata
    862854    switch(mdType) {
    863     case PS_META_ITEM_SET:
    864         psMetadataAdd(md, PS_LIST_TAIL, strName, mdType, NULL, NULL);
    865         break;
    866     case PS_META_BOOL:
    867         tempBool = parseBool((char*)strValue, &status);
    868         if(!status) {
    869             psMetadataAdd(md, PS_LIST_TAIL, strName, mdType, NULL, tempBool);
    870         } else {
    871             status = 0;
    872             psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, strType,
    873                     lineNumber, fileName);
    874         }
    875         break;
    876     case PS_META_S32:
    877         tempInt = (psS32)parseValue((char*)strValue, &status);
    878         if(!status) {
    879             psMetadataAdd(md, PS_LIST_TAIL, strName, mdType, NULL, tempInt);
    880         } else {
    881             status = 0;
    882             psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, strType,
    883                     lineNumber, fileName);
    884         }
    885         break;
    886     case PS_META_F32:
    887     case PS_META_F64:
    888         tempDbl = parseValue((char*)strValue, &status);
    889         if(!status) {
    890             psMetadataAdd(md, PS_LIST_TAIL, strName, mdType, NULL, tempDbl);
    891         } else {
    892             status = 0;
    893             psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, strType,
    894                     lineNumber, fileName);
    895         }
     855    case PS_META_LIST:
     856        psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, NULL, NULL);
    896857        break;
    897858    case PS_META_STR:
    898         psMetadataAdd(md, PS_LIST_TAIL, strName, mdType, NULL, strValue);
     859        psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, NULL, strValue);
     860        break;
     861    case PS_META_PRIMITIVE:
     862        switch(pType) {
     863        case PS_TYPE_BOOL:
     864            tempBool = parseBool((char*)strValue, &status);
     865            if(!status) {
     866                psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, NULL, tempBool);
     867            } else {
     868                status = 0;
     869                psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, strType,
     870                        lineNumber, fileName);
     871            }
     872            break;
     873        case PS_TYPE_S32:
     874            tempInt = (psS32)parseValue((char*)strValue, &status);
     875            if(!status) {
     876                psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, NULL, tempInt);
     877            } else {
     878                status = 0;
     879                psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, strType,
     880                        lineNumber, fileName);
     881            }
     882            break;
     883        case PS_TYPE_F32:
     884        case PS_TYPE_F64:
     885            tempDbl = parseValue((char*)strValue, &status);
     886            if(!status) {
     887                psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, NULL, tempDbl);
     888            } else {
     889                status = 0;
     890                psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, strType,
     891                        lineNumber, fileName);
     892            }
     893            break;
     894        default:
     895            psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FILE_TYPE_INVALID, strType, lineNumber, fileName);
     896        } // End switch
    899897        break;
    900898    default:
     
    902900    } // End switch
    903901
     902
    904903    return;
    905904}
     
    910909    bool overwrite = false;
    911910    psS32 status = 0;
    912     psU64 lineNumber = 0;
    913     psElemType elemType;
     911    psU32 lineNumber = 0;
     912    psElemType pType;
    914913    psMetadataType mdType;
    915914    char *strName = NULL;
     
    936935    tables = psMetadataLookup(md, "htAtts");
    937936    PS_PTR_CHECK_NULL_GENERAL(tables, return);
    938     PS_PTR_CHECK_NULL_GENERAL(tables->items, return);
    939     psListSetIterator(tables->items, PS_LIST_TAIL);
    940     table = (psMetadataItem*)psListGetCurrent(tables->items);
    941     htAtts = (psHash*)table->data.V;
     937    PS_PTR_CHECK_NULL_GENERAL(tables->data.list, return);
     938    psListSetIterator(tables->data.list, PS_LIST_TAIL);
     939    table = (psMetadataItem*)psListGetCurrent(tables->data.list);
     940    htAtts = (psHash*)table->data.list;
    942941    PS_PTR_CHECK_NULL_GENERAL(htAtts, return);
    943942    fileName = (char*)input->filename;
     
    957956        if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psString")) {
    958957            mdType = PS_META_STR;
    959             elemType = PS_TYPE_PTR;
     958            pType = PS_TYPE_PTR;
    960959        } else if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psBool")) {
    961             mdType = PS_META_BOOL;
    962             elemType = PS_TYPE_U8;
     960            mdType = PS_META_PRIMITIVE;
     961            pType = PS_TYPE_U8;
    963962        } else if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psS32")) {
    964             mdType = PS_META_S32;
    965             elemType = PS_TYPE_S32;
     963            mdType = PS_META_PRIMITIVE;
     964            pType = PS_TYPE_S32;
    966965        } else if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psF32")) {
    967             mdType = PS_META_F32;
    968             elemType = PS_TYPE_F32;
     966            mdType = PS_META_PRIMITIVE;
     967            pType = PS_TYPE_F32;
    969968        } else if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psF64")) {
    970             mdType = PS_META_F64;
    971             elemType = PS_TYPE_F64;
     969            mdType = PS_META_PRIMITIVE;
     970            pType = PS_TYPE_F64;
    972971        } else {
    973972            psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_TYPE_INVALID_LINE_FILE, strName, lineNumber,
     
    994993        metadataItem = psMetadataLookup(md, strName);
    995994        if(metadataItem != NULL) {
    996             if(metadataItem->type != PS_META_ITEM_SET) {
     995            if(metadataItem->type != PS_META_LIST) {
    997996                if(overwrite) {
    998997                    psMetadataRemove(md, PS_LIST_UNKNOWN, strName);
     
    10071006
    10081007    // Get value
    1009     vec = parseVector((char*)strValue, elemType, &status);
     1008    vec = parseVector((char*)strValue, pType, &status);
    10101009    if(!status) {
    1011         psMetadataAdd(md, PS_LIST_TAIL, strName+1, mdType, NULL, vec);
     1010        psMetadataAdd(md, PS_LIST_TAIL, strName+1, pType, mdType, NULL, vec);
    10121011    } else {
    10131012        psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, strType,
     
    10381037    tables = psMetadataLookup(md, "htAtts");
    10391038    PS_PTR_CHECK_NULL_GENERAL(tables, return);
    1040     PS_PTR_CHECK_NULL_GENERAL(tables->items, return);
    1041     psListSetIterator(tables->items, PS_LIST_TAIL);
    1042     table = (psMetadataItem*)psListGetCurrent(tables->items);
    1043     htAtts = (psHash*)table->data.V;
     1039    PS_PTR_CHECK_NULL_GENERAL(tables->data.list, return);
     1040    psListSetIterator(tables->data.list, PS_LIST_TAIL);
     1041    table = (psMetadataItem*)psListGetCurrent(tables->data.list);
     1042    htAtts = (psHash*)table->data.list;
    10441043    PS_PTR_CHECK_NULL_GENERAL(htAtts, return);
    10451044
     
    10641063
    10651064    // Free temporary metadata item and its hash table
    1066     psListRemove(tables->items, PS_LIST_TAIL, table);
     1065    psListRemove(tables->data.list, PS_LIST_TAIL, table);
    10671066
    10681067    psFree(psEndTagName);
     
    10711070}
    10721071
    1073 psS32 psMetadataParseConfigXml(psMetadata** md, const char *fileName)
     1072psMetadata*  psMetadataParseConfigXml(psMetadata* md, psU32 *nFail, const char *fileName, psBool overwrite)
    10741073{
    10751074    xmlSAXHandler saxHandler;
     
    10771076
    10781077    // Error checks
    1079     PS_PTR_CHECK_NULL(fileName,-1);
     1078    PS_PTR_CHECK_NULL(fileName, NULL);
    10801079
    10811080    // Allocate metadata if necessary
    1082     if (*md == NULL) {
    1083         *md = psMetadataAlloc();
     1081    if (md == NULL) {
     1082        md = psMetadataAlloc();
    10841083    }
    10851084
     
    11131112    saxHandler.externalSubset           = NULL;
    11141113    saxHandler.initialized              = 1;
    1115     saxHandler._private                 = *md;
     1114    saxHandler._private                 = md;
    11161115    saxHandler.startElementNs           = NULL;
    11171116    saxHandler.endElementNs             = NULL;
     
    11211120    if (xmlSAXUserParseFile(&saxHandler, NULL, fileName)) {
    11221121        psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FILE_OPEN_FAILED, fileName);
    1123         return -1;
     1122        return NULL;
    11241123    }
    11251124
  • trunk/psLib/src/astronomy/psMetadataIO.h

    r2529 r2607  
    99*  @author Ross Harman, MHPCC
    1010*
    11 *  @version $Revision: 1.5 $ $Name: not supported by cvs2svn $
    12 *  @date $Date: 2004-11-30 01:24:32 $
     11*  @version $Revision: 1.6 $ $Name: not supported by cvs2svn $
     12*  @date $Date: 2004-12-03 23:14:46 $
    1313*
    1414*  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    5858 *  Loads pre-defined settings by parsing a configuration file into a psMetadata structure.
    5959 *
    60  *  @return psS32 : Number of lines that failed to be read.
     60 *  @return psMetadata* : Resulting metadata from read.
    6161 */
    62 psS32 psMetadataParseConfig(
    63     psMetadata** md,                   ///< Resulting metadata from read.
     62psMetadata* psMetadataParseConfig(
     63    psMetadata* md,                    ///< Resulting metadata from read.
     64    psU32 *nFail,                      ///< Number of failed lines.
    6465    const char *fileName,              ///< Name of file to read.
    6566    psBool overwrite                   ///< Allow overwrite of duplicate specifications.
     
    7071 *  Loads pre-defined XML settings by parsing a configuration file into a psMetadata structure.
    7172 *
    72  *  @return psS32 : Number of lines that failed to be read.
     73 *  @return psMetadata* : Resulting metadata from read.
    7374 */
    74 psS32 psMetadataParseConfigXml(
    75     psMetadata** md,                   ///< Resulting metadata from read.
    76     const char *fileName               ///< Name of file to read.
     75
     76psMetadata*  psMetadataParseConfigXml(
     77    psMetadata* md,                    ///< Resulting metadata from read.
     78    psU32 *nFail,                      ///< Number of failed lines.
     79    const char *fileName,              ///< Name of file to read.
     80    psBool overwrite                   ///< Allow overwrite of duplicate specifications.
    7781);
    7882
  • trunk/psLib/src/astronomy/psTime.c

    r2515 r2607  
    1010 *  @author Ross Harman, MHPCC
    1111 *
    12  *  @version $Revision: 1.45 $ $Name: not supported by cvs2svn $
    13  *  @date $Date: 2004-11-29 18:41:07 $
     12 *  @version $Revision: 1.46 $ $Name: not supported by cvs2svn $
     13 *  @date $Date: 2004-12-03 23:15:00 $
    1414 *
    1515 *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    196196    psS32 j = 0;
    197197    psS32 numTables = 0;
     198    psU32 nFail = 0;
    198199    psVector *tablesFrom = NULL;
    199200    psVector *tablesTo = NULL;
     
    205206
    206207    // Read time config file
    207     if(psMetadataParseConfig(&timeMetadata, fileName, true) < 0) {
     208    timeMetadata = psMetadataParseConfig(timeMetadata, &nFail, fileName, true);
     209    if(timeMetadata == NULL) {
     210        return false;
     211    } else if(nFail != 0) {
    208212        return false;
    209213    }
     
    298302            if(metadataNamesPtr != NULL) {
    299303                psMetadataAdd(timeMetadata, PS_LIST_TAIL, strcat(metadataTableNames[j], "Table"),
    300                               PS_META_LOOKUPTABLE, NULL, table);
     304                              PS_TYPE_PTR, PS_META_LOOKUPTABLE, NULL, table);
    301305                foundTable = true;
    302306            } else if(foundTable==false && j==numTables-1) {
  • trunk/psLib/src/collections/psMetadata.c

    r2521 r2607  
    1212*  @author Ross Harman, MHPCC
    1313*
    14 *  @version $Revision: 1.38 $ $Name: not supported by cvs2svn $
    15 *  @date $Date: 2004-11-30 00:26:53 $
     14*  @version $Revision: 1.39 $ $Name: not supported by cvs2svn $
     15*  @date $Date: 2004-12-03 23:14:28 $
    1616*
    1717*  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    8080    psFree(metadataItem->name);
    8181    psFree(metadataItem->comment);
    82     psFree(metadataItem->items);
    83     if (type == PS_META_STR || type == PS_META_VEC || type == PS_META_IMG || type == PS_META_LOOKUPTABLE ||
    84             type == PS_META_JPEG || type == PS_META_PNG || type == PS_META_ASTROM || type == PS_META_UNKNOWN ||
    85             type == PS_META_HASH) {
     82    if (type != PS_META_PRIMITIVE) {
    8683        psFree(metadataItem->data.V);
    8784    }
     
    10198/*****************************************************************************/
    10299
    103 psMetadataItem* psMetadataItemAlloc(const char *name, psMetadataType type, const char *comment, ...)
     100psMetadataItem* psMetadataItemAlloc(const char *name, psElemType pType, psMetadataType type,
     101                                    const char *comment, ...)
    104102{
    105103    va_list argPtr;
     
    110108
    111109    // Call metadata item allocation
    112     metadataItem = psMetadataItemAllocV(name, type, comment, argPtr);
     110    metadataItem = psMetadataItemAllocV(name, pType, type, comment, argPtr);
    113111
    114112    // Clean up stack after variable arguement has been used
     
    118116}
    119117
    120 psMetadataItem* psMetadataItemAllocV(const char *name, psMetadataType type, const char *comment,
    121                                      va_list argPtr)
    122 {
    123     psVector *vecIn = NULL;
    124     psVector *vecOut = NULL;
     118psMetadataItem* psMetadataItemAllocV(const char *name, psElemType pType, psMetadataType type,
     119                                     const char *comment, va_list argPtr)
     120{
    125121    psMetadataItem* metadataItem = NULL;
    126122
     
    129125
    130126    // Allocate metadata item
    131     metadataItem = (psMetadataItem* ) psAlloc(sizeof(psMetadataItem));
     127    metadataItem = (psMetadataItem*) psAlloc(sizeof(psMetadataItem));
     128    metadataItem->data.V = NULL;
    132129
    133130    // Set deallocator
     
    148145    // Set metadata item type
    149146    metadataItem->type = type;
    150     metadataItem->data.V = NULL;
    151 
    152     // Allocate metadata items with same name.
    153     metadataItem->items = psListAlloc(NULL);
     147    metadataItem->pType = pType;
    154148
    155149    // Allocate and set metadata item name
     
    158152
    159153    // Set metadata item value
    160     switch (type) {
    161     case PS_META_ITEM_SET:
    162         break;
    163     case PS_META_BOOL:
    164         metadataItem->data.B = (psBool)va_arg(argPtr, psS32);
    165         break;
    166     case PS_META_S32:
    167         metadataItem->data.S32 = (psS32)va_arg(argPtr, psS32);
    168         break;
    169     case PS_META_F32:
    170         metadataItem->data.F32 = (psF32)va_arg(argPtr, psF64);
    171         break;
    172     case PS_META_F64:
    173         metadataItem->data.F64 = va_arg(argPtr, psF64);
     154    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        }
    174174        break;
    175175    case PS_META_STR:
     176        // Perform copy of input strings
    176177        metadataItem->data.V = psStringNCopy(va_arg(argPtr, char *), MAX_STRING_LENGTH);
    177178        break;
     179    case PS_META_LIST:
    178180    case PS_META_VEC:
    179         vecIn = (psVector*)va_arg(argPtr, psVector*);
    180         vecOut = psVectorAlloc(vecIn->nalloc, vecIn->type.type);
    181         memcpy(vecOut->data.V, vecIn->data.V, vecIn->nalloc*PSELEMTYPE_SIZEOF(vecIn->type.type));
    182         metadataItem->data.V = vecOut;
    183         break;
     181    case PS_META_HASH:
    184182    case PS_META_LOOKUPTABLE:
    185         metadataItem->data.V = va_arg(argPtr, psLookupTable*); // Deep copy of input data not performed
    186         break;
    187     case PS_META_HASH:
    188         metadataItem->data.V = va_arg(argPtr, psHash*); // Deep copy of input data not performed
    189         break;
    190     case PS_META_IMG:
    191183    case PS_META_JPEG:
    192184    case PS_META_PNG:
    193185    case PS_META_ASTROM:
    194186    case PS_META_UNKNOWN:
     187        // Copy of input data not performed due to variability of data types
     188        metadataItem->data.V = va_arg(argPtr, psPtr);
     189        break;
    195190    default:
    196191        psError(PS_ERR_BAD_PARAMETER_VALUE, true, PS_ERRORTEXT_psMetadata_METATYPE_INVALID, type);
     
    209204
    210205    // Allocate metadata
    211     metadata = (psMetadata* ) psAlloc(sizeof(psMetadata));
     206    metadata = (psMetadata*) psAlloc(sizeof(psMetadata));
    212207    // Set deallocator
    213208    p_psMemSetDeallocator(metadata, (psFreeFcn) metadataFree);
    214209
    215210    // Allocate metadata's internal containers
    216     list = (psList* ) psListAlloc(NULL);
    217     table = (psHash* ) psHashAlloc(10);
     211    list = (psList*) psListAlloc(NULL);
     212    table = (psHash*) psHashAlloc(10);
    218213
    219214    metadata->list = list;
     
    223218}
    224219
    225 psBool psMetadataAddItem( psMetadata *restrict md, psMetadataItem *restrict metadataItem, psS32 location )
     220psBool psMetadataAddItem(psMetadata *restrict md, psMetadataItem *restrict metadataItem, psS32 location)
    226221{
    227222    char * key = NULL;
     
    230225    psMetadataItem *existingEntry = NULL;
    231226    psMetadataItem *newFolderEntry = NULL;
    232     psMetadataType newType = PS_META_ITEM_SET;
     227    psMetadataType newType;
    233228
    234229    PS_PTR_CHECK_NULL(md,NULL);
     
    247242    if(existingEntry != NULL) {
    248243
    249         if(existingEntry->type == PS_META_ITEM_SET) {
     244        if(existingEntry->type == PS_META_LIST) {
     245
     246            if(existingEntry->data.list == NULL) {
     247                existingEntry->data.list = psListAlloc(NULL);
     248            }
    250249
    251250            // Add leaf node to existing folder node
    252             if(!psListAdd(existingEntry->items, PS_LIST_TAIL, metadataItem)) {
    253                 psError(PS_ERR_UNKNOWN,false,
    254                         PS_ERRORTEXT_psMetadata_ADD_LIST_FAILED,
    255                         metadataItem->name );
    256                 return false;
    257             }
    258         } else if(existingEntry->type != PS_META_ITEM_SET && newType!= PS_META_ITEM_SET) {
     251            if(!psListAdd(existingEntry->data.list, PS_LIST_TAIL, metadataItem)) {
     252                psError(PS_ERR_UNKNOWN, false, PS_ERRORTEXT_psMetadata_ADD_LIST_FAILED, metadataItem->name);
     253                return false;
     254            }
     255        } else if(existingEntry->type != PS_META_LIST && newType!= PS_META_LIST) {
    259256
    260257            // Leaf node replaces another leaf. Make new folder node and add leaves.
    261             newFolderEntry = psMetadataItemAlloc(key, PS_META_ITEM_SET, NULL, NULL);
    262 
    263             if(!psListAdd(newFolderEntry->items, PS_LIST_TAIL, existingEntry)) {
    264                 psError(PS_ERR_UNKNOWN,false,
    265                         PS_ERRORTEXT_psMetadata_ADD_LIST_FAILED,
    266                         key);
     258            newFolderEntry = psMetadataItemAlloc(key, PS_TYPE_PTR, PS_META_LIST, NULL, NULL);
     259            newFolderEntry->data.list = psListAlloc(NULL);
     260
     261            if(!psListAdd(newFolderEntry->data.list, PS_LIST_TAIL, existingEntry)) {
     262                psError(PS_ERR_UNKNOWN,false, PS_ERRORTEXT_psMetadata_ADD_LIST_FAILED,key);
    267263                psFree(newFolderEntry);
    268264                return false;
    269265            }
    270266
    271             if(!psListAdd(newFolderEntry->items, PS_LIST_TAIL, metadataItem)) {
    272                 psError(PS_ERR_UNKNOWN,false,
    273                         PS_ERRORTEXT_psMetadata_ADD_LIST_FAILED,
    274                         key);
     267            if(!psListAdd(newFolderEntry->data.list, PS_LIST_TAIL, metadataItem)) {
     268                psError(PS_ERR_UNKNOWN,false, PS_ERRORTEXT_psMetadata_ADD_LIST_FAILED,key);
    275269                psFree(newFolderEntry);
    276270                return false;
     
    278272
    279273            if(!psHashRemove(mdTable, key)) {
    280                 psError(PS_ERR_UNKNOWN,false,
    281                         PS_ERRORTEXT_psMetadata_REMOVE_TABLE_FAILED,
    282                         key);
     274                psError(PS_ERR_UNKNOWN,false,PS_ERRORTEXT_psMetadata_REMOVE_TABLE_FAILED,key);
    283275                psFree(newFolderEntry);
    284276                return false;
     
    286278
    287279            if(!psHashAdd(mdTable, key, newFolderEntry)) {
    288                 psError(PS_ERR_UNKNOWN,false,
    289                         PS_ERRORTEXT_psMetadata_ADD_TABLE_FAILED,
    290                         key);
     280                psError(PS_ERR_UNKNOWN,false,PS_ERRORTEXT_psMetadata_ADD_TABLE_FAILED,key);
    291281                psFree(newFolderEntry);
    292282                return false;
     
    298288
    299289            // Folder node replaces leaf or folder node - Put old node into new folder and remove from table
    300             if(!psListAdd(metadataItem->items, PS_LIST_TAIL, existingEntry)) {
    301                 psError(PS_ERR_UNKNOWN,false,
    302                         PS_ERRORTEXT_psMetadata_ADD_LIST_FAILED,
    303                         key);
     290            if(metadataItem->data.list == NULL) {
     291                metadataItem->data.list = psListAlloc(NULL);
     292            }
     293
     294            if(!psListAdd(metadataItem->data.list, PS_LIST_TAIL, existingEntry)) {
     295                psError(PS_ERR_UNKNOWN,false,PS_ERRORTEXT_psMetadata_ADD_LIST_FAILED,key);
    304296                return false;
    305297            }
    306298
    307299            if(!psHashRemove(mdTable, key)) {
    308                 psError(PS_ERR_UNKNOWN,false,
    309                         PS_ERRORTEXT_psMetadata_REMOVE_TABLE_FAILED,
    310                         key);
     300                psError(PS_ERR_UNKNOWN,false,PS_ERRORTEXT_psMetadata_REMOVE_TABLE_FAILED,key);
    311301                return false;
    312302            }
    313303
    314304            if(!psHashAdd(mdTable, key, metadataItem)) {
    315                 psError(PS_ERR_UNKNOWN,false,
    316                         PS_ERRORTEXT_psMetadata_ADD_TABLE_FAILED,
    317                         key);
     305                psError(PS_ERR_UNKNOWN,false,PS_ERRORTEXT_psMetadata_ADD_TABLE_FAILED,key);
    318306                return false;
    319307            }
     
    323311        // Node doesn't exist - Add new metadata item to metadata collection's hash
    324312        if(!psHashAdd(mdTable, key, metadataItem)) {
    325             psError(PS_ERR_UNKNOWN,false,
    326                     PS_ERRORTEXT_psMetadata_ADD_TABLE_FAILED,
    327                     key);
     313            psError(PS_ERR_UNKNOWN,false,PS_ERRORTEXT_psMetadata_ADD_TABLE_FAILED,key);
    328314            return false;
    329315        }
     
    331317
    332318    // Add items to metadata collection's list, even if they have the same metadata item names. Folder nodes
    333     // (PS_META_ITEM_SET metadata items) are not added, since the metadata list is flat.
    334     if(metadataItem->type != PS_META_ITEM_SET) {
     319    // (PS_META_LIST metadata items) are not added, since the metadata list is flat.
     320    if(metadataItem->type != PS_META_LIST) {
    335321        if(!psListAdd(mdList, location, metadataItem)) {
    336             psError(PS_ERR_UNKNOWN,false,
    337                     PS_ERRORTEXT_psMetadata_ADD_COLLECTION_FAILED,
    338                     key);
     322            psError(PS_ERR_UNKNOWN,false,PS_ERRORTEXT_psMetadata_ADD_COLLECTION_FAILED,key);
    339323            return false;
    340324        }
     
    344328}
    345329
    346 psBool psMetadataAdd(psMetadata* restrict md, psS32 where, const char *name, psMetadataType type,
    347                      const char *comment, ...)
     330psBool psMetadataAdd(psMetadata* restrict md, psS32 where, const char *name, psElemType pType,
     331                     psMetadataType type, const char *comment, ...)
    348332{
    349333    va_list argPtr;
     
    351335
    352336    va_start(argPtr, comment);
    353     metadataItem = psMetadataItemAllocV(name, type, comment, argPtr);
     337    metadataItem = psMetadataItemAllocV(name, pType, type, comment, argPtr);
    354338    va_end(argPtr);
    355339
    356340    if (!psMetadataAddItem(md, metadataItem, where)) {
    357         psError(PS_ERR_UNKNOWN,false,
    358                 PS_ERRORTEXT_psMetadata_ADD_FAILED);
     341        psError(PS_ERR_UNKNOWN,false,PS_ERRORTEXT_psMetadata_ADD_FAILED);
    359342        psFree(metadataItem);
    360343        return false;
     
    368351psBool psMetadataRemove(psMetadata* restrict md, psS32 where, const char *restrict key)
    369352{
    370     psS32 numChildren = 0;
    371353    psList* mdList = NULL;
     354    psList* entryList = NULL;
    372355    psHash* mdTable = NULL;
    373356    psMetadataItem* entry = NULL;
     
    386369
    387370        // Remove by key name
    388         entry = (psMetadataItem* ) psHashLookup(mdTable, key);
     371        entry = (psMetadataItem*)psHashLookup(mdTable, key);
    389372        if (entry == NULL) {
    390             psError(PS_ERR_BAD_PARAMETER_VALUE, true,
    391                     PS_ERRORTEXT_psMetadata_FIND_FAILED,
    392                     key);
     373            psError(PS_ERR_BAD_PARAMETER_VALUE, true, PS_ERRORTEXT_psMetadata_FIND_FAILED, key);
    393374            return false;
    394375        }
    395376
    396         numChildren = entry->items->size;
    397         if (entry->type == PS_META_ITEM_SET && numChildren > 0) {
     377        if (entry->type == PS_META_LIST) {
    398378
    399379            // Table entry has children. Entry and children must be removed from metadata collection's list
    400             psListSetIterator(entry->items, PS_LIST_HEAD);
    401             entryChild = psListGetCurrent(entry->items);
    402             while (entryChild != NULL) {
     380            psListSetIterator(entryList, PS_LIST_HEAD);
     381            entryChild = psListGetCurrent(entryList);
     382            while(entryChild != NULL) {
    403383                if (!psListRemove(mdList, PS_LIST_UNKNOWN, entryChild)) {
    404                     psError(PS_ERR_UNKNOWN,false,
    405                             PS_ERRORTEXT_psMetadata_REMOVE_LIST_FAILED,
    406                             key);
     384                    psError(PS_ERR_UNKNOWN, false, PS_ERRORTEXT_psMetadata_REMOVE_LIST_FAILED, key);
    407385                    return false;
    408386                }
    409                 entryChild = psListGetNext(entry->items);
     387                entryChild = psListGetNext(entryList);
    410388            }
    411389        } else {
     
    413391            // Table entry has no children. Remove entry from metadata collection's list
    414392            if (!psListRemove(mdList, PS_LIST_UNKNOWN, entry)) {
    415                 psError(PS_ERR_UNKNOWN,false,
    416                         PS_ERRORTEXT_psMetadata_REMOVE_LIST_FAILED,
    417                         key);
     393                psError(PS_ERR_UNKNOWN, false, PS_ERRORTEXT_psMetadata_REMOVE_LIST_FAILED, key);
    418394                return false;
    419395            }
     
    421397        // Remove entry from metadata collection's table
    422398        if (!psHashRemove(mdTable, key)) {
    423             psError(PS_ERR_UNKNOWN,false,
    424                     PS_ERRORTEXT_psMetadata_REMOVE_TABLE_FAILED,
    425                     key);
     399            psError(PS_ERR_UNKNOWN, false, PS_ERRORTEXT_psMetadata_REMOVE_TABLE_FAILED, key);
    426400            return false;
    427401        }
     
    431405        entry = psListGet(mdList, where);
    432406        if (entry == NULL) {
    433             psError(PS_ERR_BAD_PARAMETER_VALUE, true,
    434                     PS_ERRORTEXT_psMetadata_FIND_INDEX_FAILED,
    435                     where);
     407            psError(PS_ERR_BAD_PARAMETER_VALUE, true, PS_ERRORTEXT_psMetadata_FIND_INDEX_FAILED, where);
    436408            return false;
    437409        }
    438410
    439411        key = entry->name;
    440         if (key == NULL) {
    441             psError(PS_ERR_BAD_PARAMETER_VALUE, true,
    442                     PS_ERRORTEXT_psMetadata_REMOVE_LIST_INDEX_FAILED,
    443                     where);
     412        if(key == NULL) {
     413            psError(PS_ERR_BAD_PARAMETER_VALUE, true, PS_ERRORTEXT_psMetadata_REMOVE_LIST_INDEX_FAILED, where);
    444414            return false;
    445415        }
     
    463433    mdTable = md->table;
    464434
    465     entry = (psMetadataItem* ) psHashLookup(mdTable, key);
     435    entry = (psMetadataItem*)psHashLookup(mdTable, key);
    466436    if (entry == NULL) {
    467437        return NULL;
     
    478448    PS_PTR_CHECK_NULL(md->list,NULL);
    479449
    480     entry = (psMetadataItem* ) psListGet(md->list, where);
     450    entry = (psMetadataItem*) psListGet(md->list, where);
    481451    if (entry == NULL) {
    482         psError(PS_ERR_BAD_PARAMETER_VALUE, true,
    483                 PS_ERRORTEXT_psMetadata_FIND_INDEX_FAILED,
    484                 where);
     452        psError(PS_ERR_BAD_PARAMETER_VALUE, true, PS_ERRORTEXT_psMetadata_FIND_INDEX_FAILED, where);
    485453        return NULL;
    486454    }
  • trunk/psLib/src/collections/psMetadata.h

    r2521 r2607  
    1111*  @author Ross Harman, MHPCC
    1212*
    13 *  @version $Revision: 1.26 $ $Name: not supported by cvs2svn $
    14 *  @date $Date: 2004-11-30 00:27:14 $
     13*  @version $Revision: 1.27 $ $Name: not supported by cvs2svn $
     14*  @date $Date: 2004-12-03 23:14:34 $
    1515*
    1616*  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    3333 */
    3434typedef enum {
    35     PS_META_ITEM_SET = 0,              ///< Null. Metadata is in psMetadataItem.items
    36     PS_META_BOOL,                      ///< Boolean data.
    37     PS_META_S32,                       ///< Signed 32-bit integer data.
    38     PS_META_F32,                       ///< Single-precision float data.
    39     PS_META_F64,                       ///< Double-precision float data.
    40     PS_META_STR,                       ///< String data (Stored in as psPtr ).
    41     PS_META_VEC,                       ///< Vector data (Stored in as psPtr ).
    42     PS_META_HASH,                      ///< Hash data (Stored in as psPtr ).
    43     PS_META_IMG,                       ///< Image data (Stored in as psPtr ).
    44     PS_META_LOOKUPTABLE,               ///< Lookup table data (Stored as void *).
    45     PS_META_JPEG,                      ///< JPEG data (Stored in as psPtr ).
    46     PS_META_PNG,                       ///< PNG data (Stored in as psPtr ).
    47     PS_META_ASTROM,                    ///< Astrometric coefficients (Stored in as psPtr ).
    48     PS_META_UNKNOWN,                   ///< Other data (Stored in as psPtr ).
     35    PS_META_PRIMITIVE,                 ///< Primitive data.
     36    PS_META_LIST,                      ///< List data (Stored as item.data.list).
     37    PS_META_STR,                       ///< String data (Stored as item.data.V).
     38    PS_META_VEC,                       ///< Vector data (Stored as item.data.V).
     39    PS_META_IMG,                       ///< Image data (Stored as item.data.V).
     40    PS_META_HASH,                      ///< Hash data (Stored as item.data.V).
     41    PS_META_LOOKUPTABLE,               ///< Lookup table data (Stored as item.data.V).
     42    PS_META_JPEG,                      ///< JPEG data (Stored as item.data.V).
     43    PS_META_PNG,                       ///< PNG data (Stored as item.data.V).
     44    PS_META_ASTROM,                    ///< Astrometric coefficients (Stored as item.data.V).
     45    PS_META_UNKNOWN,                   ///< Other data (Stored as item.data.V).
    4946    PS_META_NTYPE                      ///< Number of types. Must be last.
    5047} psMetadataType;
    51 
    52 /** Metadata item data structure.
    53  *
    54  * Struct for maintaining metadata items of varying types. It also contains
    55  * information about the item name, flags, comments, and other items with the same name.
    56  */
    57 typedef struct psMetadataItem
    58 {
    59     const psS32 id;                      ///< Unique ID for metadata item.
    60     char *restrict name;               ///< Name of metadata item.
    61     psMetadataType type;               ///< Type of metadata item.
    62     union {
    63         psBool B;                        ///< boolean data
    64         psS32 S32;                     ///< Signed 32-bit integer data.
    65         psF32 F32;                     ///< Single-precision float data.
    66         psF64 F64;                     ///< Double-precision float data.
    67         psPtr V;                       ///< Pointer to other type of data.
    68     } data;                            ///< Union for data types.
    69     char *comment;                     ///< Optional comment ("", not NULL).
    70     psList* restrict items;            ///< List of psMetadataItems with same name.
    71 }
    72 psMetadataItem;
    7348
    7449/** Metadata data structure.
     
    8560}
    8661psMetadata;
     62
     63/** Metadata item data structure.
     64 *
     65 * Struct for maintaining metadata items of varying types. It also contains
     66 * information about the item name, flags, comments, and other items with the same name.
     67 */
     68typedef struct psMetadataItem
     69{
     70    const psS32 id;                    ///< Unique ID for metadata item.
     71    char *name;                        ///< Name of metadata item.
     72    psMetadataType type;               ///< Type of metadata item.
     73    psElemType pType;                  ///< Primitive data type
     74    union {
     75        psBool B;                      ///< boolean data
     76        psS32 S32;                     ///< Signed 32-bit integer data.
     77        psF32 F32;                     ///< Single-precision float data.
     78        psF64 F64;                     ///< Double-precision float data.
     79        psList *list;                  ///< List data.
     80        psMetadata *md;                ///< Metadata data.
     81        psPtr V;                       ///< Pointer to other type of data.
     82    } data;                            ///< Union for data types.
     83    char *comment;                     ///< Optional comment ("", not NULL).
     84}
     85psMetadataItem;
    8786
    8887/** Create a metadata item.
     
    103102psMetadataItem* psMetadataItemAlloc(
    104103    const char *name,                  ///< Name of metadata item.
     104    psElemType pType,                  ///< Primitive type.
    105105    psMetadataType type,               ///< Type of metadata item.
    106106    const char *comment,               ///< Comment for metadata item.
     
    125125psMetadataItem* psMetadataItemAllocV(
    126126    const char *name,                  ///< Name of metadata item.
     127    psElemType pType,                  ///< Primitive type.
    127128    psMetadataType type,               ///< Type of metadata item.
    128129    const char *comment,               ///< Comment for metadata item.
     
    149150    psMetadata* restrict md,           ///< Metadata collection to insert metadat item.
    150151    psMetadataItem* restrict item,     ///< Metadata item to be added.
    151     psS32 location                       ///< Location to be added.
     152    psS32 location                     ///< Location to be added.
    152153);
    153154
     
    160161psBool psMetadataAdd(
    161162    psMetadata* restrict md,           ///< Metadata collection to insert metadat item.
    162     psS32 where,                         ///< Location to be added.
     163    psS32 where,                       ///< Location to be added.
    163164    const char *name,                  ///< Name of metadata item.
     165    psElemType pType,                  ///< Primitive type.
    164166    psMetadataType type,               ///< Type of metadata item.
    165167    const char *comment,               ///< Comment for metadata item.
     
    179181psBool psMetadataRemove(
    180182    psMetadata* restrict md,           ///< Metadata collection to insert metadat item.
    181     psS32 where,                         ///< Location to be removed.
     183    psS32 where,                       ///< Location to be removed.
    182184    const char *restrict key           ///< Name of metadata key.
    183185);
     
    205207psMetadataItem* psMetadataGet(
    206208    psMetadata* restrict md,           ///< Metadata collection to insert metadat item.
    207     psS32 where                          ///< Location to be retrieved.
     209    psS32 where                        ///< Location to be retrieved.
    208210);
    209211
     
    217219psBool psMetadataSetIterator(
    218220    psMetadata* restrict md,           ///< Metadata collection to iterate.
    219     psS32 where                          ///< Location of iterator.
     221    psS32 where                        ///< Location of iterator.
    220222);
    221223
     
    229231    psMetadata* restrict md,           ///< Metadata collection to iterate.
    230232    const char *restrict match,        ///< Beginning of key name.
    231     psS32 which                          ///< Iterator to be used.
     233    psS32 which                        ///< Iterator to be used.
    232234);
    233235
     
    241243    psMetadata* restrict md,           ///< Metadata collection to iterate.
    242244    const char *restrict match,        ///< Beginning of key name.
    243     psS32 which                          ///< Iterator to be used.
     245    psS32 which                        ///< Iterator to be used.
    244246);
    245247
  • trunk/psLib/src/collections/psMetadataIO.c

    r2525 r2607  
    99*  @author Ross Harman, MHPCC
    1010*
    11 *  @version $Revision: 1.12 $ $Name: not supported by cvs2svn $
    12 *  @date $Date: 2004-11-30 01:09:14 $
     11*  @version $Revision: 1.13 $ $Name: not supported by cvs2svn $
     12*  @date $Date: 2004-12-03 23:14:40 $
    1313*
    1414*  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    6060/** Free and null temporary variables used by config file parser */
    6161#define CLEAR_TEMPS()                                                                                        \
    62 if(strName) {                                                                                            \
    63     psFree(strName);                                                                                     \
    64     strName = NULL;                                                                                      \
    65 }                                                                                                        \
    66 if(strType) {                                                                                            \
    67     psFree(strType);                                                                                     \
    68     strType = NULL;                                                                                      \
    69 }                                                                                                        \
    70 if(strValue) {                                                                                           \
    71     psFree(strValue);                                                                                    \
    72     strValue = NULL;                                                                                     \
    73 }                                                                                                        \
    74 if(strComment) {                                                                                         \
    75     psFree(strComment);                                                                                  \
    76     strComment = NULL;                                                                                   \
    77 }                                                                                                        \
    78 if(tempVec) {                                                                                            \
    79     psFree(tempVec);                                                                                     \
    80     tempVec = NULL;                                                                                      \
     62if(strName) {                                                                                                \
     63    psFree(strName);                                                                                         \
     64    strName = NULL;                                                                                          \
     65}                                                                                                            \
     66if(strType) {                                                                                                \
     67    psFree(strType);                                                                                         \
     68    strType = NULL;                                                                                          \
     69}                                                                                                            \
     70if(strValue) {                                                                                               \
     71    psFree(strValue);                                                                                        \
     72    strValue = NULL;                                                                                         \
     73}                                                                                                            \
     74if(strComment) {                                                                                             \
     75    psFree(strComment);                                                                                      \
     76    strComment = NULL;                                                                                       \
    8177}
    8278
     
    316312{
    317313    psMetadataType type;
     314    psElemType pType;
    318315
    319316    PS_PTR_CHECK_NULL(fd,);
     
    322319
    323320    type = metadataItem->type;
     321    pType = metadataItem->pType;
    324322
    325323    switch(type) {
    326     case PS_META_BOOL:
    327         fprintf(fd, format, metadataItem->data.B);
    328         break;
    329     case PS_META_S32:
    330         fprintf(fd,format, metadataItem->data.S32);
    331         break;
    332     case PS_META_F32:
    333         fprintf(fd, format, metadataItem->data.F32);
    334         break;
    335     case PS_META_F64:
    336         fprintf(fd, format, metadataItem->data.F64);
     324    case PS_META_PRIMITIVE:
     325        switch(pType) {
     326        case PS_TYPE_BOOL:
     327            fprintf(fd, format, metadataItem->data.B);
     328            break;
     329        case PS_TYPE_S32:
     330            fprintf(fd,format, metadataItem->data.S32);
     331            break;
     332        case PS_TYPE_F32:
     333            fprintf(fd, format, metadataItem->data.F32);
     334            break;
     335        case PS_TYPE_F64:
     336            fprintf(fd, format, metadataItem->data.F64);
     337            break;
     338        default:
     339            psError(PS_ERR_BAD_PARAMETER_TYPE,true, PS_ERRORTEXT_psMetadata_METATYPE_INVALID, (int)pType);
     340        }
    337341        break;
    338342    case PS_META_STR:
    339         fprintf(fd, format, metadataItem->data.V);
     343        fprintf(fd,format, metadataItem->data.V);
    340344        break;
    341345    default:
     
    359363    psS32 numKeys = 0;
    360364    psS32 keyNum = 0;
    361     psMetadataType metadataItemType;
    362365    fitsfile *fd = NULL;
    363366
     
    416419        switch (keyType) {
    417420        case 'I':
    418             metadataItemType = PS_META_S32;
    419             success = psMetadataAdd(output, PS_LIST_TAIL, keyName, metadataItemType, keyComment, atoi(keyValue));
     421            success = psMetadataAdd(output, PS_LIST_TAIL, keyName, PS_TYPE_S32, PS_META_PRIMITIVE,
     422                                    keyComment, atoi(keyValue));
    420423            break;
    421424        case 'F':
    422             metadataItemType = PS_META_F64;
    423             success = psMetadataAdd(output, PS_LIST_TAIL, keyName, metadataItemType, keyComment, atof(keyValue));
     425            success = psMetadataAdd(output, PS_LIST_TAIL, keyName, PS_TYPE_F64, PS_META_PRIMITIVE,
     426                                    keyComment, atof(keyValue));
    424427            break;
    425428        case 'C':
    426             metadataItemType = PS_META_STR;
    427             success = psMetadataAdd(output, PS_LIST_TAIL, keyName, metadataItemType, keyComment, keyValue);
     429            success = psMetadataAdd(output, PS_LIST_TAIL, keyName, PS_TYPE_PTR, PS_META_STR, keyComment,
     430                                    keyValue);
    428431            break;
    429432        case 'L':
    430             metadataItemType = PS_META_BOOL;
    431433            tempBool = (keyValue[0] == 'T') ? 1 : 0;
    432             success = psMetadataAdd(output, PS_LIST_TAIL, keyName, metadataItemType, keyComment, tempBool);
     434            success = psMetadataAdd(output, PS_LIST_TAIL, keyName, PS_TYPE_BOOL, PS_META_PRIMITIVE, keyComment,
     435                                    tempBool);
    433436            break;
    434437        case 'U':
    435438        case 'X':
    436439        default:
    437             psError(PS_ERR_IO, true,
    438                     PS_ERRORTEXT_psMetadataIO_FITS_METATYPE_INVALID,
    439                     keyType);
     440            psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FITS_METATYPE_INVALID, keyType);
    440441            return output;
    441442        }
    442443
    443444        if (!success) {
    444             psError(PS_ERR_UNKNOWN, false,
    445                     PS_ERRORTEXT_psMetadataIO_ADD_FAILED,
    446                     keyName);
     445            psError(PS_ERR_UNKNOWN, false, PS_ERRORTEXT_psMetadataIO_ADD_FAILED, keyName);
    447446            return output;
    448447        }
     
    452451}
    453452
    454 
    455 psS32 psMetadataParseConfig(psMetadata** md, const char *fileName, psBool overwrite)
     453psMetadata* psMetadataParseConfig(psMetadata* md, psU32 *nFail, const char *fileName, psBool overwrite)
    456454{
    457455    psBool tempBool;
     
    463461    char *linePtr = NULL;
    464462    psS32 status = 0;
    465     psS32 lineCount = 0;
    466     psS32 failedLines = 0;
     463    psU32 lineCount = 0;
    467464    psF64 tempDbl = 0.0;
    468465    psS32 tempInt = 0.0;
     
    470467    psVector *tempVec = NULL;
    471468    FILE *fp = NULL;
    472     psElemType elemType;
     469    psElemType pType;
    473470    psMetadataType mdType;
    474471
    475472
    476473    // Check for nulls
    477     PS_PTR_CHECK_NULL(fileName,-1);
     474    PS_PTR_CHECK_NULL(fileName,NULL);
    478475    if((fp=fopen(fileName, "r")) == NULL) {
    479         psError(PS_ERR_IO, true,
    480                 PS_ERRORTEXT_psMetadataIO_FILE_OPEN_FAILED,
    481                 fileName);
    482         return -1;
     476        psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FILE_OPEN_FAILED, fileName);
     477        return NULL;
    483478    }
    484479
    485480    // Allocate metadata if necessary
    486     if (*md == NULL) {
    487         *md = psMetadataAlloc();
     481    if (md == NULL) {
     482        md = psMetadataAlloc();
    488483    }
    489484
     
    504499            // Check for more than one '*' or '@' in a line
    505500            if(repeatedChars(linePtr, '@') > 1) {
    506                 failedLines++;
     501                (*nFail)++;
    507502                psError(PS_ERR_IO, true,
    508                         PS_ERRORTEXT_psMetadataIO_FILE_MULTIPLE_CHAR,
    509                         '@', lineCount, fileName);
     503                        PS_ERRORTEXT_psMetadataIO_FILE_MULTIPLE_CHAR, '@', lineCount, fileName);
    510504                continue;
    511505            } else if(repeatedChars(linePtr, '*') > 1) {
    512                 failedLines++;
     506                (*nFail)++;
    513507                psError(PS_ERR_IO, true,
    514                         PS_ERRORTEXT_psMetadataIO_FILE_MULTIPLE_CHAR,
    515                         '*', lineCount, fileName);
     508                        PS_ERRORTEXT_psMetadataIO_FILE_MULTIPLE_CHAR, '*', lineCount, fileName);
    516509                continue;
    517510            } else if(repeatedChars(linePtr, '~') > 0) {
    518                 failedLines++;
     511                (*nFail)++;
    519512                psError(PS_ERR_IO, true,
    520                         PS_ERRORTEXT_psMetadataIO_FILE_MULTIPLE_CHAR,
    521                         '~', lineCount, fileName);
     513                        PS_ERRORTEXT_psMetadataIO_FILE_MULTIPLE_CHAR, '~', lineCount, fileName);
    522514                continue;
    523515            }
     
    526518            strName = getToken(&linePtr, " ", &status);
    527519            if(strName==NULL || status) {
    528                 failedLines++;
     520                (*nFail)++;
    529521                status = 0;
    530522                psError(PS_ERR_IO, true,
    531                         PS_ERRORTEXT_psMetadataIO_FILE_ELEMENT_NULL,
    532                         "name",lineCount, fileName);
     523                        PS_ERRORTEXT_psMetadataIO_FILE_ELEMENT_NULL, "name", lineCount, fileName);
    533524                continue;
    534525            }
     
    537528            strType = getToken(&linePtr, " ", &status);
    538529            if(strType==NULL) {
    539                 failedLines++;
     530                (*nFail)++;
    540531                status = 0;
    541                 psError(PS_ERR_IO, true,
    542                         PS_ERRORTEXT_psMetadataIO_FILE_ELEMENT_NULL,
    543                         "type",lineCount, fileName);
     532                psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FILE_ELEMENT_NULL, "type",lineCount,
     533                        fileName);
    544534                continue;
    545535            } else if(!strncmp(strType, "*", 1)) {
    546                 mdType = PS_META_ITEM_SET;
     536                mdType = PS_META_LIST;
     537                pType = PS_TYPE_PTR;
    547538            } else if(!strncmp(strType, "STR", 3)) {
    548539                mdType = PS_META_STR;
    549                 elemType = PS_TYPE_PTR;
     540                pType = PS_TYPE_PTR;
    550541            } else if(!strncmp(strType, "BOOL", 3)) {
    551                 mdType = PS_META_BOOL;
    552                 elemType = PS_TYPE_U8;
     542                mdType = PS_META_PRIMITIVE;
     543                pType = PS_TYPE_BOOL;
    553544            } else if(!strncmp(strType, "S32", 3)) {
    554                 mdType = PS_META_S32;
    555                 elemType = PS_TYPE_S32;
     545                mdType = PS_META_PRIMITIVE;
     546                pType = PS_TYPE_S32;
    556547            } else if(!strncmp(strType, "F32", 3)) {
    557                 mdType = PS_META_F32;
    558                 elemType = PS_TYPE_F32;
     548                mdType = PS_META_PRIMITIVE;
     549                pType = PS_TYPE_F32;
    559550            } else if(!strncmp(strType, "F64", 3)) {
    560                 mdType = PS_META_F64;
    561                 elemType = PS_TYPE_F64;
     551                mdType = PS_META_PRIMITIVE;
     552                pType = PS_TYPE_F64;
    562553            } else {
    563                 failedLines++;
    564                 psError(PS_ERR_IO, true,
    565                         PS_ERRORTEXT_psMetadataIO_FILE_TYPE_INVALID,
    566                         strType, lineCount, fileName);
     554                (*nFail)++;
     555                psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FILE_TYPE_INVALID, strType, lineCount,
     556                        fileName);
    567557                continue;
    568558            }
     
    573563
    574564            // Get the metadata item value if there is one. Lines with * don't have values.
    575             if(mdType != PS_META_ITEM_SET) {
     565            if(mdType != PS_META_LIST) {
    576566                strValue = getToken(&linePtr, "#", &status);
    577567                if(strValue==NULL) {
    578                     failedLines++;
     568                    (*nFail)++;
    579569                    status = 0;
    580                     psError(PS_ERR_IO, true,
    581                             PS_ERRORTEXT_psMetadataIO_FILE_ELEMENT_NULL,
    582                             "value",lineCount, fileName);
     570                    psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FILE_ELEMENT_NULL, "value", lineCount,
     571                            fileName);
    583572                    continue;
    584573                }
     
    588577            strComment = getToken(&linePtr,"~", &status);
    589578            if(status) {
    590                 failedLines++;
     579                (*nFail)++;
    591580                status = 0;
    592                 psError(PS_ERR_IO, true,
    593                         PS_ERRORTEXT_psMetadataIO_FILE_ELEMENT_NULL,
    594                         "comment",lineCount, fileName);
     581                psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FILE_ELEMENT_NULL, "comment", lineCount,
     582                        fileName);
    595583                continue;
    596584            }
     
    599587            and allow switch/case below to add new item. If overwrite is false, then report error. If found
    600588            item is folder node, then psMetadataAdd will automatically add a new child. */
    601             metadataItem = psMetadataLookup(*md, strName);
     589            metadataItem = psMetadataLookup(md, strName);
    602590            if(metadataItem != NULL) {
    603                 if(metadataItem->type!=PS_META_ITEM_SET) {
     591                if(metadataItem->type!=PS_META_LIST) {
    604592                    if(overwrite) {
    605                         psMetadataRemove(*md, PS_LIST_UNKNOWN, strName);
     593                        psMetadataRemove(md, PS_LIST_UNKNOWN, strName);
    606594                    } else {
    607                         failedLines++;
    608                         psError(PS_ERR_IO, true,
    609                                 PS_ERRORTEXT_psMetadataIO_OVERWRITE_ITEM,
    610                                 strName, lineCount, fileName);
     595                        (*nFail)++;
     596                        psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_OVERWRITE_ITEM, strName, lineCount,
     597                                fileName);
    611598                        continue;
    612599                    }
     
    616603            // Create and add metadata item to metadata and parse values
    617604            switch (mdType) {
    618             case PS_META_ITEM_SET:
    619                 psMetadataAdd(*md, PS_LIST_TAIL, strName, mdType, NULL, NULL);
     605            case PS_META_LIST:
     606                psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, NULL, NULL);
    620607                break;
    621             case PS_META_BOOL:
    622                 tempBool = parseBool(strValue, &status);
     608            case PS_META_STR:
     609                psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, strComment, strValue);
     610                break;
     611            case PS_META_VEC:
     612                tempVec = parseVector(strValue, pType, &status);
    623613                if(!status) {
    624                     psMetadataAdd(*md, PS_LIST_TAIL, strName, mdType, strComment, tempBool);
     614                    psMetadataAdd(md, PS_LIST_TAIL, strName+1, pType, mdType, strComment, tempVec);
    625615                } else {
    626616                    status = 0;
    627                     failedLines++;
    628                     psError(PS_ERR_IO, true,
    629                             PS_ERRORTEXT_psMetadataIO_PARSE_FAILED,
    630                             strValue, strName, strType, lineCount, fileName);
     617                    (*nFail)++;
     618                    psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName,
     619                            strType, lineCount, fileName);
    631620                    continue;
    632621                }
    633622                break;
    634             case PS_META_S32:
    635                 tempInt = (psS32)parseValue(strValue, &status);
    636                 if(!status) {
    637                     psMetadataAdd(*md, PS_LIST_TAIL, strName, mdType, strComment, tempInt);
    638                 } else {
    639                     status = 0;
    640                     failedLines++;
    641                     psError(PS_ERR_IO, true,
    642                             PS_ERRORTEXT_psMetadataIO_PARSE_FAILED,
    643                             strValue, strName, strType, lineCount, fileName);
     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:
     664                    (*nFail)++;
     665                    psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FILE_TYPE_INVALID, mdType, lineCount,
     666                            fileName);
    644667                    continue;
    645                 }
    646                 break;
    647             case PS_META_F32:
    648             case PS_META_F64:
    649                 tempDbl = parseValue(strValue, &status);
    650                 if(!status) {
    651                     psMetadataAdd(*md, PS_LIST_TAIL, strName, mdType, strComment, tempDbl);
    652                 } else {
    653                     status = 0;
    654                     failedLines++;
    655                     psError(PS_ERR_IO, true,
    656                             PS_ERRORTEXT_psMetadataIO_PARSE_FAILED,
    657                             strValue, strName, strType, lineCount, fileName);
    658                     continue;
    659                 }
    660                 break;
    661             case PS_META_STR:
    662                 psMetadataAdd(*md, PS_LIST_TAIL, strName, mdType, strComment, strValue);
    663                 break;
    664             case PS_META_VEC:
    665                 tempVec = parseVector(strValue, elemType, &status);
    666                 if(!status) {
    667                     psMetadataAdd(*md, PS_LIST_TAIL, strName+1, mdType, strComment, tempVec);
    668                 } else {
    669                     status = 0;
    670                     failedLines++;
    671                     psError(PS_ERR_IO, true,
    672                             PS_ERRORTEXT_psMetadataIO_PARSE_FAILED,
    673                             strValue, strName, strType, lineCount, fileName);
    674                     continue;
    675                 }
     668                } // switch
    676669                break;
    677670            default:
    678                 failedLines++;
    679                 psError(PS_ERR_IO, true,
    680                         PS_ERRORTEXT_psMetadataIO_FILE_TYPE_INVALID,
    681                         mdType, lineCount, fileName);
     671                (*nFail)++;
     672                psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FILE_TYPE_INVALID, mdType, lineCount,
     673                        fileName);
    682674                continue;
    683675            } // switch
     
    687679    psFree(line);
    688680
    689     return failedLines;
     681    return md;
    690682}
    691683
     
    753745
    754746    // Add attributes to metadata
    755     psMetadataAdd(md, PS_LIST_TAIL, "htAtts", PS_META_HASH, NULL, htAtts);
     747    psMetadataAdd(md, PS_LIST_TAIL, "htAtts", PS_TYPE_PTR, PS_META_HASH, NULL, htAtts);
    756748
    757749    psFree(psTagName);
     
    765757    psBool tempBool = false;
    766758    psS32 status = 0;
    767     psU64 lineNumber = 0;
     759    psU32 lineNumber = 0;
    768760    psF64 tempDbl = 0.0;
    769761    psS32 tempInt = 0.0;
    770     psElemType elemType;
     762    psElemType pType;
    771763    psMetadataType mdType;
    772764    char *fileName = NULL;
     
    790782    metadataItem = psMetadataLookup(md, "htAtts");
    791783    PS_PTR_CHECK_NULL_GENERAL(metadataItem, return);
    792     PS_PTR_CHECK_NULL_GENERAL(metadataItem->items, return);
    793     psListSetIterator(metadataItem->items, PS_LIST_TAIL);
    794     metadataItem = (psMetadataItem*)psListGetCurrent(metadataItem->items);
    795     htAtts = (psHash*)metadataItem->data.V;
     784    PS_PTR_CHECK_NULL_GENERAL(metadataItem->data.list, return);
     785    psListSetIterator(metadataItem->data.list, PS_LIST_TAIL);
     786    metadataItem = (psMetadataItem*)psListGetCurrent(metadataItem->data.list);
     787    htAtts = (psHash*)metadataItem->data.list;
    796788    PS_PTR_CHECK_NULL_GENERAL(htAtts, return);
    797789    fileName = (char*)input->filename;
     
    811803        if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psString")) {
    812804            mdType = PS_META_STR;
    813             elemType = PS_TYPE_PTR;
     805            pType = PS_TYPE_PTR;
    814806        } else if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psBool")) {
    815             mdType = PS_META_BOOL;
    816             elemType = PS_TYPE_U8;
     807            mdType = PS_META_PRIMITIVE;
     808            pType = PS_TYPE_U8;
    817809        } else if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psS32")) {
    818             mdType = PS_META_S32;
    819             elemType = PS_TYPE_S32;
     810            mdType = PS_META_PRIMITIVE;
     811            pType = PS_TYPE_S32;
    820812        } else if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psF32")) {
    821             mdType = PS_META_F32;
    822             elemType = PS_TYPE_F32;
     813            mdType = PS_META_PRIMITIVE;
     814            pType = PS_TYPE_F32;
    823815        } else if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psF64")) {
    824             mdType = PS_META_F64;
    825             elemType = PS_TYPE_F64;
     816            mdType = PS_META_PRIMITIVE;
     817            pType = PS_TYPE_F64;
    826818        } else {
    827819            psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_TYPE_INVALID_LINE_FILE, strType, lineNumber,
     
    847839        metadataItem = psMetadataLookup(md, strName);
    848840        if(metadataItem != NULL) {
    849             if(metadataItem->type != PS_META_ITEM_SET) {
     841            if(metadataItem->type != PS_META_LIST) {
    850842                if(overwrite) {
    851843                    psMetadataRemove(md, PS_LIST_UNKNOWN, strName);
     
    861853    // Create metadata item and add to metadata
    862854    switch(mdType) {
    863     case PS_META_ITEM_SET:
    864         psMetadataAdd(md, PS_LIST_TAIL, strName, mdType, NULL, NULL);
    865         break;
    866     case PS_META_BOOL:
    867         tempBool = parseBool((char*)strValue, &status);
    868         if(!status) {
    869             psMetadataAdd(md, PS_LIST_TAIL, strName, mdType, NULL, tempBool);
    870         } else {
    871             status = 0;
    872             psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, strType,
    873                     lineNumber, fileName);
    874         }
    875         break;
    876     case PS_META_S32:
    877         tempInt = (psS32)parseValue((char*)strValue, &status);
    878         if(!status) {
    879             psMetadataAdd(md, PS_LIST_TAIL, strName, mdType, NULL, tempInt);
    880         } else {
    881             status = 0;
    882             psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, strType,
    883                     lineNumber, fileName);
    884         }
    885         break;
    886     case PS_META_F32:
    887     case PS_META_F64:
    888         tempDbl = parseValue((char*)strValue, &status);
    889         if(!status) {
    890             psMetadataAdd(md, PS_LIST_TAIL, strName, mdType, NULL, tempDbl);
    891         } else {
    892             status = 0;
    893             psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, strType,
    894                     lineNumber, fileName);
    895         }
     855    case PS_META_LIST:
     856        psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, NULL, NULL);
    896857        break;
    897858    case PS_META_STR:
    898         psMetadataAdd(md, PS_LIST_TAIL, strName, mdType, NULL, strValue);
     859        psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, NULL, strValue);
     860        break;
     861    case PS_META_PRIMITIVE:
     862        switch(pType) {
     863        case PS_TYPE_BOOL:
     864            tempBool = parseBool((char*)strValue, &status);
     865            if(!status) {
     866                psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, NULL, tempBool);
     867            } else {
     868                status = 0;
     869                psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, strType,
     870                        lineNumber, fileName);
     871            }
     872            break;
     873        case PS_TYPE_S32:
     874            tempInt = (psS32)parseValue((char*)strValue, &status);
     875            if(!status) {
     876                psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, NULL, tempInt);
     877            } else {
     878                status = 0;
     879                psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, strType,
     880                        lineNumber, fileName);
     881            }
     882            break;
     883        case PS_TYPE_F32:
     884        case PS_TYPE_F64:
     885            tempDbl = parseValue((char*)strValue, &status);
     886            if(!status) {
     887                psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, NULL, tempDbl);
     888            } else {
     889                status = 0;
     890                psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, strType,
     891                        lineNumber, fileName);
     892            }
     893            break;
     894        default:
     895            psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FILE_TYPE_INVALID, strType, lineNumber, fileName);
     896        } // End switch
    899897        break;
    900898    default:
     
    902900    } // End switch
    903901
     902
    904903    return;
    905904}
     
    910909    bool overwrite = false;
    911910    psS32 status = 0;
    912     psU64 lineNumber = 0;
    913     psElemType elemType;
     911    psU32 lineNumber = 0;
     912    psElemType pType;
    914913    psMetadataType mdType;
    915914    char *strName = NULL;
     
    936935    tables = psMetadataLookup(md, "htAtts");
    937936    PS_PTR_CHECK_NULL_GENERAL(tables, return);
    938     PS_PTR_CHECK_NULL_GENERAL(tables->items, return);
    939     psListSetIterator(tables->items, PS_LIST_TAIL);
    940     table = (psMetadataItem*)psListGetCurrent(tables->items);
    941     htAtts = (psHash*)table->data.V;
     937    PS_PTR_CHECK_NULL_GENERAL(tables->data.list, return);
     938    psListSetIterator(tables->data.list, PS_LIST_TAIL);
     939    table = (psMetadataItem*)psListGetCurrent(tables->data.list);
     940    htAtts = (psHash*)table->data.list;
    942941    PS_PTR_CHECK_NULL_GENERAL(htAtts, return);
    943942    fileName = (char*)input->filename;
     
    957956        if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psString")) {
    958957            mdType = PS_META_STR;
    959             elemType = PS_TYPE_PTR;
     958            pType = PS_TYPE_PTR;
    960959        } else if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psBool")) {
    961             mdType = PS_META_BOOL;
    962             elemType = PS_TYPE_U8;
     960            mdType = PS_META_PRIMITIVE;
     961            pType = PS_TYPE_U8;
    963962        } else if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psS32")) {
    964             mdType = PS_META_S32;
    965             elemType = PS_TYPE_S32;
     963            mdType = PS_META_PRIMITIVE;
     964            pType = PS_TYPE_S32;
    966965        } else if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psF32")) {
    967             mdType = PS_META_F32;
    968             elemType = PS_TYPE_F32;
     966            mdType = PS_META_PRIMITIVE;
     967            pType = PS_TYPE_F32;
    969968        } else if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psF64")) {
    970             mdType = PS_META_F64;
    971             elemType = PS_TYPE_F64;
     969            mdType = PS_META_PRIMITIVE;
     970            pType = PS_TYPE_F64;
    972971        } else {
    973972            psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_TYPE_INVALID_LINE_FILE, strName, lineNumber,
     
    994993        metadataItem = psMetadataLookup(md, strName);
    995994        if(metadataItem != NULL) {
    996             if(metadataItem->type != PS_META_ITEM_SET) {
     995            if(metadataItem->type != PS_META_LIST) {
    997996                if(overwrite) {
    998997                    psMetadataRemove(md, PS_LIST_UNKNOWN, strName);
     
    10071006
    10081007    // Get value
    1009     vec = parseVector((char*)strValue, elemType, &status);
     1008    vec = parseVector((char*)strValue, pType, &status);
    10101009    if(!status) {
    1011         psMetadataAdd(md, PS_LIST_TAIL, strName+1, mdType, NULL, vec);
     1010        psMetadataAdd(md, PS_LIST_TAIL, strName+1, pType, mdType, NULL, vec);
    10121011    } else {
    10131012        psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, strType,
     
    10381037    tables = psMetadataLookup(md, "htAtts");
    10391038    PS_PTR_CHECK_NULL_GENERAL(tables, return);
    1040     PS_PTR_CHECK_NULL_GENERAL(tables->items, return);
    1041     psListSetIterator(tables->items, PS_LIST_TAIL);
    1042     table = (psMetadataItem*)psListGetCurrent(tables->items);
    1043     htAtts = (psHash*)table->data.V;
     1039    PS_PTR_CHECK_NULL_GENERAL(tables->data.list, return);
     1040    psListSetIterator(tables->data.list, PS_LIST_TAIL);
     1041    table = (psMetadataItem*)psListGetCurrent(tables->data.list);
     1042    htAtts = (psHash*)table->data.list;
    10441043    PS_PTR_CHECK_NULL_GENERAL(htAtts, return);
    10451044
     
    10641063
    10651064    // Free temporary metadata item and its hash table
    1066     psListRemove(tables->items, PS_LIST_TAIL, table);
     1065    psListRemove(tables->data.list, PS_LIST_TAIL, table);
    10671066
    10681067    psFree(psEndTagName);
     
    10711070}
    10721071
    1073 psS32 psMetadataParseConfigXml(psMetadata** md, const char *fileName)
     1072psMetadata*  psMetadataParseConfigXml(psMetadata* md, psU32 *nFail, const char *fileName, psBool overwrite)
    10741073{
    10751074    xmlSAXHandler saxHandler;
     
    10771076
    10781077    // Error checks
    1079     PS_PTR_CHECK_NULL(fileName,-1);
     1078    PS_PTR_CHECK_NULL(fileName, NULL);
    10801079
    10811080    // Allocate metadata if necessary
    1082     if (*md == NULL) {
    1083         *md = psMetadataAlloc();
     1081    if (md == NULL) {
     1082        md = psMetadataAlloc();
    10841083    }
    10851084
     
    11131112    saxHandler.externalSubset           = NULL;
    11141113    saxHandler.initialized              = 1;
    1115     saxHandler._private                 = *md;
     1114    saxHandler._private                 = md;
    11161115    saxHandler.startElementNs           = NULL;
    11171116    saxHandler.endElementNs             = NULL;
     
    11211120    if (xmlSAXUserParseFile(&saxHandler, NULL, fileName)) {
    11221121        psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FILE_OPEN_FAILED, fileName);
    1123         return -1;
     1122        return NULL;
    11241123    }
    11251124
  • trunk/psLib/src/collections/psMetadataIO.h

    r2529 r2607  
    99*  @author Ross Harman, MHPCC
    1010*
    11 *  @version $Revision: 1.5 $ $Name: not supported by cvs2svn $
    12 *  @date $Date: 2004-11-30 01:24:32 $
     11*  @version $Revision: 1.6 $ $Name: not supported by cvs2svn $
     12*  @date $Date: 2004-12-03 23:14:46 $
    1313*
    1414*  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    5858 *  Loads pre-defined settings by parsing a configuration file into a psMetadata structure.
    5959 *
    60  *  @return psS32 : Number of lines that failed to be read.
     60 *  @return psMetadata* : Resulting metadata from read.
    6161 */
    62 psS32 psMetadataParseConfig(
    63     psMetadata** md,                   ///< Resulting metadata from read.
     62psMetadata* psMetadataParseConfig(
     63    psMetadata* md,                    ///< Resulting metadata from read.
     64    psU32 *nFail,                      ///< Number of failed lines.
    6465    const char *fileName,              ///< Name of file to read.
    6566    psBool overwrite                   ///< Allow overwrite of duplicate specifications.
     
    7071 *  Loads pre-defined XML settings by parsing a configuration file into a psMetadata structure.
    7172 *
    72  *  @return psS32 : Number of lines that failed to be read.
     73 *  @return psMetadata* : Resulting metadata from read.
    7374 */
    74 psS32 psMetadataParseConfigXml(
    75     psMetadata** md,                   ///< Resulting metadata from read.
    76     const char *fileName               ///< Name of file to read.
     75
     76psMetadata*  psMetadataParseConfigXml(
     77    psMetadata* md,                    ///< Resulting metadata from read.
     78    psU32 *nFail,                      ///< Number of failed lines.
     79    const char *fileName,              ///< Name of file to read.
     80    psBool overwrite                   ///< Allow overwrite of duplicate specifications.
    7781);
    7882
  • trunk/psLib/src/dataManip/psFunctions.c

    r2439 r2607  
    77 *  polynomials.  It also contains a Gaussian functions.
    88 *
    9  *  @version $Revision: 1.70 $ $Name: not supported by cvs2svn $
    10  *  @date $Date: 2004-11-24 22:33:21 $
     9 *  @version $Revision: 1.71 $ $Name: not supported by cvs2svn $
     10 *  @date $Date: 2004-12-03 23:15:32 $
    1111 *
    1212 *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    20172017                PS_ERRORTEXT_psFunctions_TYPE_NOT_SUPPORTED,
    20182018                strType);
     2019    case PS_TYPE_BOOL:
     2020        PS_TYPE_NAME(strType,x->type.type);
     2021        psError(PS_ERR_BAD_PARAMETER_TYPE,
     2022                PS_ERRORTEXT_psFunctions_TYPE_NOT_SUPPORTED,
     2023                strType);
    20192024    }
    20202025    return(-3);
  • trunk/psLib/src/math/psPolynomial.c

    r2439 r2607  
    77 *  polynomials.  It also contains a Gaussian functions.
    88 *
    9  *  @version $Revision: 1.70 $ $Name: not supported by cvs2svn $
    10  *  @date $Date: 2004-11-24 22:33:21 $
     9 *  @version $Revision: 1.71 $ $Name: not supported by cvs2svn $
     10 *  @date $Date: 2004-12-03 23:15:32 $
    1111 *
    1212 *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    20172017                PS_ERRORTEXT_psFunctions_TYPE_NOT_SUPPORTED,
    20182018                strType);
     2019    case PS_TYPE_BOOL:
     2020        PS_TYPE_NAME(strType,x->type.type);
     2021        psError(PS_ERR_BAD_PARAMETER_TYPE,
     2022                PS_ERRORTEXT_psFunctions_TYPE_NOT_SUPPORTED,
     2023                strType);
    20192024    }
    20202025    return(-3);
  • trunk/psLib/src/math/psSpline.c

    r2439 r2607  
    77 *  polynomials.  It also contains a Gaussian functions.
    88 *
    9  *  @version $Revision: 1.70 $ $Name: not supported by cvs2svn $
    10  *  @date $Date: 2004-11-24 22:33:21 $
     9 *  @version $Revision: 1.71 $ $Name: not supported by cvs2svn $
     10 *  @date $Date: 2004-12-03 23:15:32 $
    1111 *
    1212 *  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    20172017                PS_ERRORTEXT_psFunctions_TYPE_NOT_SUPPORTED,
    20182018                strType);
     2019    case PS_TYPE_BOOL:
     2020        PS_TYPE_NAME(strType,x->type.type);
     2021        psError(PS_ERR_BAD_PARAMETER_TYPE,
     2022                PS_ERRORTEXT_psFunctions_TYPE_NOT_SUPPORTED,
     2023                strType);
    20192024    }
    20202025    return(-3);
  • trunk/psLib/src/sys/psType.h

    r2204 r2607  
    1111*  @author Ross Harman, MHPCC
    1212*
    13 *  @version $Revision: 1.23 $ $Name: not supported by cvs2svn $
    14 *  @date $Date: 2004-10-27 00:57:31 $
     13*  @version $Revision: 1.24 $ $Name: not supported by cvs2svn $
     14*  @date $Date: 2004-12-03 23:16:05 $
    1515*
    1616*  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    5757
    5858typedef enum {
    59     PS_TYPE_S8 = 0x0101,               ///< Character.
    60     PS_TYPE_S16 = 0x0102,              ///< Short integer.
    61     PS_TYPE_S32 = 0x0104,              ///< Integer.
    62     PS_TYPE_S64 = 0x0108,              ///< Long integer.
    63     PS_TYPE_U8 = 0x0301,               ///< Unsigned character.
    64     PS_TYPE_U16 = 0x0302,              ///< Unsigned psS16 integer.
    65     PS_TYPE_U32 = 0x0304,              ///< Unsigned integer.
    66     PS_TYPE_U64 = 0x0308,              ///< Unsigned psS64 integer.
    67     PS_TYPE_F32 = 0x0404,              ///< Single-precision Floating point.
    68     PS_TYPE_F64 = 0x0408,              ///< Double-precision floating point.
    69     PS_TYPE_C32 = 0x0808,              ///< Complex numbers consisting of single-precision floating point.
    70     PS_TYPE_C64 = 0x0810,              ///< Complex numbers consisting of double-precision floating point.
    71     PS_TYPE_PTR = 0x0000               ///< Something else that's not supported for arithmetic.
     59    PS_TYPE_BOOL = 0x0100,             ///< Boolean.
     60    PS_TYPE_S8   = 0x0101,             ///< Character.
     61    PS_TYPE_S16  = 0x0102,             ///< Short integer.
     62    PS_TYPE_S32  = 0x0104,             ///< Integer.
     63    PS_TYPE_S64  = 0x0108,             ///< Long integer.
     64    PS_TYPE_U8   = 0x0301,             ///< Unsigned character.
     65    PS_TYPE_U16  = 0x0302,             ///< Unsigned psS16 integer.
     66    PS_TYPE_U32  = 0x0304,             ///< Unsigned integer.
     67    PS_TYPE_U64  = 0x0308,             ///< Unsigned psS64 integer.
     68    PS_TYPE_F32  = 0x0404,             ///< Single-precision Floating point.
     69    PS_TYPE_F64  = 0x0408,             ///< Double-precision floating point.
     70    PS_TYPE_C32  = 0x0808,             ///< Complex numbers consisting of single-precision floating point.
     71    PS_TYPE_C64  = 0x0810,             ///< Complex numbers consisting of double-precision floating point.
     72    PS_TYPE_PTR  = 0x0000              ///< Something else that's not supported for arithmetic.
    7273} psElemType;
    7374
  • trunk/psLib/src/sysUtils/psType.h

    r2204 r2607  
    1111*  @author Ross Harman, MHPCC
    1212*
    13 *  @version $Revision: 1.23 $ $Name: not supported by cvs2svn $
    14 *  @date $Date: 2004-10-27 00:57:31 $
     13*  @version $Revision: 1.24 $ $Name: not supported by cvs2svn $
     14*  @date $Date: 2004-12-03 23:16:05 $
    1515*
    1616*  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    5757
    5858typedef enum {
    59     PS_TYPE_S8 = 0x0101,               ///< Character.
    60     PS_TYPE_S16 = 0x0102,              ///< Short integer.
    61     PS_TYPE_S32 = 0x0104,              ///< Integer.
    62     PS_TYPE_S64 = 0x0108,              ///< Long integer.
    63     PS_TYPE_U8 = 0x0301,               ///< Unsigned character.
    64     PS_TYPE_U16 = 0x0302,              ///< Unsigned psS16 integer.
    65     PS_TYPE_U32 = 0x0304,              ///< Unsigned integer.
    66     PS_TYPE_U64 = 0x0308,              ///< Unsigned psS64 integer.
    67     PS_TYPE_F32 = 0x0404,              ///< Single-precision Floating point.
    68     PS_TYPE_F64 = 0x0408,              ///< Double-precision floating point.
    69     PS_TYPE_C32 = 0x0808,              ///< Complex numbers consisting of single-precision floating point.
    70     PS_TYPE_C64 = 0x0810,              ///< Complex numbers consisting of double-precision floating point.
    71     PS_TYPE_PTR = 0x0000               ///< Something else that's not supported for arithmetic.
     59    PS_TYPE_BOOL = 0x0100,             ///< Boolean.
     60    PS_TYPE_S8   = 0x0101,             ///< Character.
     61    PS_TYPE_S16  = 0x0102,             ///< Short integer.
     62    PS_TYPE_S32  = 0x0104,             ///< Integer.
     63    PS_TYPE_S64  = 0x0108,             ///< Long integer.
     64    PS_TYPE_U8   = 0x0301,             ///< Unsigned character.
     65    PS_TYPE_U16  = 0x0302,             ///< Unsigned psS16 integer.
     66    PS_TYPE_U32  = 0x0304,             ///< Unsigned integer.
     67    PS_TYPE_U64  = 0x0308,             ///< Unsigned psS64 integer.
     68    PS_TYPE_F32  = 0x0404,             ///< Single-precision Floating point.
     69    PS_TYPE_F64  = 0x0408,             ///< Double-precision floating point.
     70    PS_TYPE_C32  = 0x0808,             ///< Complex numbers consisting of single-precision floating point.
     71    PS_TYPE_C64  = 0x0810,             ///< Complex numbers consisting of double-precision floating point.
     72    PS_TYPE_PTR  = 0x0000              ///< Something else that's not supported for arithmetic.
    7273} psElemType;
    7374
  • trunk/psLib/src/types/psMetadata.c

    r2521 r2607  
    1212*  @author Ross Harman, MHPCC
    1313*
    14 *  @version $Revision: 1.38 $ $Name: not supported by cvs2svn $
    15 *  @date $Date: 2004-11-30 00:26:53 $
     14*  @version $Revision: 1.39 $ $Name: not supported by cvs2svn $
     15*  @date $Date: 2004-12-03 23:14:28 $
    1616*
    1717*  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    8080    psFree(metadataItem->name);
    8181    psFree(metadataItem->comment);
    82     psFree(metadataItem->items);
    83     if (type == PS_META_STR || type == PS_META_VEC || type == PS_META_IMG || type == PS_META_LOOKUPTABLE ||
    84             type == PS_META_JPEG || type == PS_META_PNG || type == PS_META_ASTROM || type == PS_META_UNKNOWN ||
    85             type == PS_META_HASH) {
     82    if (type != PS_META_PRIMITIVE) {
    8683        psFree(metadataItem->data.V);
    8784    }
     
    10198/*****************************************************************************/
    10299
    103 psMetadataItem* psMetadataItemAlloc(const char *name, psMetadataType type, const char *comment, ...)
     100psMetadataItem* psMetadataItemAlloc(const char *name, psElemType pType, psMetadataType type,
     101                                    const char *comment, ...)
    104102{
    105103    va_list argPtr;
     
    110108
    111109    // Call metadata item allocation
    112     metadataItem = psMetadataItemAllocV(name, type, comment, argPtr);
     110    metadataItem = psMetadataItemAllocV(name, pType, type, comment, argPtr);
    113111
    114112    // Clean up stack after variable arguement has been used
     
    118116}
    119117
    120 psMetadataItem* psMetadataItemAllocV(const char *name, psMetadataType type, const char *comment,
    121                                      va_list argPtr)
    122 {
    123     psVector *vecIn = NULL;
    124     psVector *vecOut = NULL;
     118psMetadataItem* psMetadataItemAllocV(const char *name, psElemType pType, psMetadataType type,
     119                                     const char *comment, va_list argPtr)
     120{
    125121    psMetadataItem* metadataItem = NULL;
    126122
     
    129125
    130126    // Allocate metadata item
    131     metadataItem = (psMetadataItem* ) psAlloc(sizeof(psMetadataItem));
     127    metadataItem = (psMetadataItem*) psAlloc(sizeof(psMetadataItem));
     128    metadataItem->data.V = NULL;
    132129
    133130    // Set deallocator
     
    148145    // Set metadata item type
    149146    metadataItem->type = type;
    150     metadataItem->data.V = NULL;
    151 
    152     // Allocate metadata items with same name.
    153     metadataItem->items = psListAlloc(NULL);
     147    metadataItem->pType = pType;
    154148
    155149    // Allocate and set metadata item name
     
    158152
    159153    // Set metadata item value
    160     switch (type) {
    161     case PS_META_ITEM_SET:
    162         break;
    163     case PS_META_BOOL:
    164         metadataItem->data.B = (psBool)va_arg(argPtr, psS32);
    165         break;
    166     case PS_META_S32:
    167         metadataItem->data.S32 = (psS32)va_arg(argPtr, psS32);
    168         break;
    169     case PS_META_F32:
    170         metadataItem->data.F32 = (psF32)va_arg(argPtr, psF64);
    171         break;
    172     case PS_META_F64:
    173         metadataItem->data.F64 = va_arg(argPtr, psF64);
     154    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        }
    174174        break;
    175175    case PS_META_STR:
     176        // Perform copy of input strings
    176177        metadataItem->data.V = psStringNCopy(va_arg(argPtr, char *), MAX_STRING_LENGTH);
    177178        break;
     179    case PS_META_LIST:
    178180    case PS_META_VEC:
    179         vecIn = (psVector*)va_arg(argPtr, psVector*);
    180         vecOut = psVectorAlloc(vecIn->nalloc, vecIn->type.type);
    181         memcpy(vecOut->data.V, vecIn->data.V, vecIn->nalloc*PSELEMTYPE_SIZEOF(vecIn->type.type));
    182         metadataItem->data.V = vecOut;
    183         break;
     181    case PS_META_HASH:
    184182    case PS_META_LOOKUPTABLE:
    185         metadataItem->data.V = va_arg(argPtr, psLookupTable*); // Deep copy of input data not performed
    186         break;
    187     case PS_META_HASH:
    188         metadataItem->data.V = va_arg(argPtr, psHash*); // Deep copy of input data not performed
    189         break;
    190     case PS_META_IMG:
    191183    case PS_META_JPEG:
    192184    case PS_META_PNG:
    193185    case PS_META_ASTROM:
    194186    case PS_META_UNKNOWN:
     187        // Copy of input data not performed due to variability of data types
     188        metadataItem->data.V = va_arg(argPtr, psPtr);
     189        break;
    195190    default:
    196191        psError(PS_ERR_BAD_PARAMETER_VALUE, true, PS_ERRORTEXT_psMetadata_METATYPE_INVALID, type);
     
    209204
    210205    // Allocate metadata
    211     metadata = (psMetadata* ) psAlloc(sizeof(psMetadata));
     206    metadata = (psMetadata*) psAlloc(sizeof(psMetadata));
    212207    // Set deallocator
    213208    p_psMemSetDeallocator(metadata, (psFreeFcn) metadataFree);
    214209
    215210    // Allocate metadata's internal containers
    216     list = (psList* ) psListAlloc(NULL);
    217     table = (psHash* ) psHashAlloc(10);
     211    list = (psList*) psListAlloc(NULL);
     212    table = (psHash*) psHashAlloc(10);
    218213
    219214    metadata->list = list;
     
    223218}
    224219
    225 psBool psMetadataAddItem( psMetadata *restrict md, psMetadataItem *restrict metadataItem, psS32 location )
     220psBool psMetadataAddItem(psMetadata *restrict md, psMetadataItem *restrict metadataItem, psS32 location)
    226221{
    227222    char * key = NULL;
     
    230225    psMetadataItem *existingEntry = NULL;
    231226    psMetadataItem *newFolderEntry = NULL;
    232     psMetadataType newType = PS_META_ITEM_SET;
     227    psMetadataType newType;
    233228
    234229    PS_PTR_CHECK_NULL(md,NULL);
     
    247242    if(existingEntry != NULL) {
    248243
    249         if(existingEntry->type == PS_META_ITEM_SET) {
     244        if(existingEntry->type == PS_META_LIST) {
     245
     246            if(existingEntry->data.list == NULL) {
     247                existingEntry->data.list = psListAlloc(NULL);
     248            }
    250249
    251250            // Add leaf node to existing folder node
    252             if(!psListAdd(existingEntry->items, PS_LIST_TAIL, metadataItem)) {
    253                 psError(PS_ERR_UNKNOWN,false,
    254                         PS_ERRORTEXT_psMetadata_ADD_LIST_FAILED,
    255                         metadataItem->name );
    256                 return false;
    257             }
    258         } else if(existingEntry->type != PS_META_ITEM_SET && newType!= PS_META_ITEM_SET) {
     251            if(!psListAdd(existingEntry->data.list, PS_LIST_TAIL, metadataItem)) {
     252                psError(PS_ERR_UNKNOWN, false, PS_ERRORTEXT_psMetadata_ADD_LIST_FAILED, metadataItem->name);
     253                return false;
     254            }
     255        } else if(existingEntry->type != PS_META_LIST && newType!= PS_META_LIST) {
    259256
    260257            // Leaf node replaces another leaf. Make new folder node and add leaves.
    261             newFolderEntry = psMetadataItemAlloc(key, PS_META_ITEM_SET, NULL, NULL);
    262 
    263             if(!psListAdd(newFolderEntry->items, PS_LIST_TAIL, existingEntry)) {
    264                 psError(PS_ERR_UNKNOWN,false,
    265                         PS_ERRORTEXT_psMetadata_ADD_LIST_FAILED,
    266                         key);
     258            newFolderEntry = psMetadataItemAlloc(key, PS_TYPE_PTR, PS_META_LIST, NULL, NULL);
     259            newFolderEntry->data.list = psListAlloc(NULL);
     260
     261            if(!psListAdd(newFolderEntry->data.list, PS_LIST_TAIL, existingEntry)) {
     262                psError(PS_ERR_UNKNOWN,false, PS_ERRORTEXT_psMetadata_ADD_LIST_FAILED,key);
    267263                psFree(newFolderEntry);
    268264                return false;
    269265            }
    270266
    271             if(!psListAdd(newFolderEntry->items, PS_LIST_TAIL, metadataItem)) {
    272                 psError(PS_ERR_UNKNOWN,false,
    273                         PS_ERRORTEXT_psMetadata_ADD_LIST_FAILED,
    274                         key);
     267            if(!psListAdd(newFolderEntry->data.list, PS_LIST_TAIL, metadataItem)) {
     268                psError(PS_ERR_UNKNOWN,false, PS_ERRORTEXT_psMetadata_ADD_LIST_FAILED,key);
    275269                psFree(newFolderEntry);
    276270                return false;
     
    278272
    279273            if(!psHashRemove(mdTable, key)) {
    280                 psError(PS_ERR_UNKNOWN,false,
    281                         PS_ERRORTEXT_psMetadata_REMOVE_TABLE_FAILED,
    282                         key);
     274                psError(PS_ERR_UNKNOWN,false,PS_ERRORTEXT_psMetadata_REMOVE_TABLE_FAILED,key);
    283275                psFree(newFolderEntry);
    284276                return false;
     
    286278
    287279            if(!psHashAdd(mdTable, key, newFolderEntry)) {
    288                 psError(PS_ERR_UNKNOWN,false,
    289                         PS_ERRORTEXT_psMetadata_ADD_TABLE_FAILED,
    290                         key);
     280                psError(PS_ERR_UNKNOWN,false,PS_ERRORTEXT_psMetadata_ADD_TABLE_FAILED,key);
    291281                psFree(newFolderEntry);
    292282                return false;
     
    298288
    299289            // Folder node replaces leaf or folder node - Put old node into new folder and remove from table
    300             if(!psListAdd(metadataItem->items, PS_LIST_TAIL, existingEntry)) {
    301                 psError(PS_ERR_UNKNOWN,false,
    302                         PS_ERRORTEXT_psMetadata_ADD_LIST_FAILED,
    303                         key);
     290            if(metadataItem->data.list == NULL) {
     291                metadataItem->data.list = psListAlloc(NULL);
     292            }
     293
     294            if(!psListAdd(metadataItem->data.list, PS_LIST_TAIL, existingEntry)) {
     295                psError(PS_ERR_UNKNOWN,false,PS_ERRORTEXT_psMetadata_ADD_LIST_FAILED,key);
    304296                return false;
    305297            }
    306298
    307299            if(!psHashRemove(mdTable, key)) {
    308                 psError(PS_ERR_UNKNOWN,false,
    309                         PS_ERRORTEXT_psMetadata_REMOVE_TABLE_FAILED,
    310                         key);
     300                psError(PS_ERR_UNKNOWN,false,PS_ERRORTEXT_psMetadata_REMOVE_TABLE_FAILED,key);
    311301                return false;
    312302            }
    313303
    314304            if(!psHashAdd(mdTable, key, metadataItem)) {
    315                 psError(PS_ERR_UNKNOWN,false,
    316                         PS_ERRORTEXT_psMetadata_ADD_TABLE_FAILED,
    317                         key);
     305                psError(PS_ERR_UNKNOWN,false,PS_ERRORTEXT_psMetadata_ADD_TABLE_FAILED,key);
    318306                return false;
    319307            }
     
    323311        // Node doesn't exist - Add new metadata item to metadata collection's hash
    324312        if(!psHashAdd(mdTable, key, metadataItem)) {
    325             psError(PS_ERR_UNKNOWN,false,
    326                     PS_ERRORTEXT_psMetadata_ADD_TABLE_FAILED,
    327                     key);
     313            psError(PS_ERR_UNKNOWN,false,PS_ERRORTEXT_psMetadata_ADD_TABLE_FAILED,key);
    328314            return false;
    329315        }
     
    331317
    332318    // Add items to metadata collection's list, even if they have the same metadata item names. Folder nodes
    333     // (PS_META_ITEM_SET metadata items) are not added, since the metadata list is flat.
    334     if(metadataItem->type != PS_META_ITEM_SET) {
     319    // (PS_META_LIST metadata items) are not added, since the metadata list is flat.
     320    if(metadataItem->type != PS_META_LIST) {
    335321        if(!psListAdd(mdList, location, metadataItem)) {
    336             psError(PS_ERR_UNKNOWN,false,
    337                     PS_ERRORTEXT_psMetadata_ADD_COLLECTION_FAILED,
    338                     key);
     322            psError(PS_ERR_UNKNOWN,false,PS_ERRORTEXT_psMetadata_ADD_COLLECTION_FAILED,key);
    339323            return false;
    340324        }
     
    344328}
    345329
    346 psBool psMetadataAdd(psMetadata* restrict md, psS32 where, const char *name, psMetadataType type,
    347                      const char *comment, ...)
     330psBool psMetadataAdd(psMetadata* restrict md, psS32 where, const char *name, psElemType pType,
     331                     psMetadataType type, const char *comment, ...)
    348332{
    349333    va_list argPtr;
     
    351335
    352336    va_start(argPtr, comment);
    353     metadataItem = psMetadataItemAllocV(name, type, comment, argPtr);
     337    metadataItem = psMetadataItemAllocV(name, pType, type, comment, argPtr);
    354338    va_end(argPtr);
    355339
    356340    if (!psMetadataAddItem(md, metadataItem, where)) {
    357         psError(PS_ERR_UNKNOWN,false,
    358                 PS_ERRORTEXT_psMetadata_ADD_FAILED);
     341        psError(PS_ERR_UNKNOWN,false,PS_ERRORTEXT_psMetadata_ADD_FAILED);
    359342        psFree(metadataItem);
    360343        return false;
     
    368351psBool psMetadataRemove(psMetadata* restrict md, psS32 where, const char *restrict key)
    369352{
    370     psS32 numChildren = 0;
    371353    psList* mdList = NULL;
     354    psList* entryList = NULL;
    372355    psHash* mdTable = NULL;
    373356    psMetadataItem* entry = NULL;
     
    386369
    387370        // Remove by key name
    388         entry = (psMetadataItem* ) psHashLookup(mdTable, key);
     371        entry = (psMetadataItem*)psHashLookup(mdTable, key);
    389372        if (entry == NULL) {
    390             psError(PS_ERR_BAD_PARAMETER_VALUE, true,
    391                     PS_ERRORTEXT_psMetadata_FIND_FAILED,
    392                     key);
     373            psError(PS_ERR_BAD_PARAMETER_VALUE, true, PS_ERRORTEXT_psMetadata_FIND_FAILED, key);
    393374            return false;
    394375        }
    395376
    396         numChildren = entry->items->size;
    397         if (entry->type == PS_META_ITEM_SET && numChildren > 0) {
     377        if (entry->type == PS_META_LIST) {
    398378
    399379            // Table entry has children. Entry and children must be removed from metadata collection's list
    400             psListSetIterator(entry->items, PS_LIST_HEAD);
    401             entryChild = psListGetCurrent(entry->items);
    402             while (entryChild != NULL) {
     380            psListSetIterator(entryList, PS_LIST_HEAD);
     381            entryChild = psListGetCurrent(entryList);
     382            while(entryChild != NULL) {
    403383                if (!psListRemove(mdList, PS_LIST_UNKNOWN, entryChild)) {
    404                     psError(PS_ERR_UNKNOWN,false,
    405                             PS_ERRORTEXT_psMetadata_REMOVE_LIST_FAILED,
    406                             key);
     384                    psError(PS_ERR_UNKNOWN, false, PS_ERRORTEXT_psMetadata_REMOVE_LIST_FAILED, key);
    407385                    return false;
    408386                }
    409                 entryChild = psListGetNext(entry->items);
     387                entryChild = psListGetNext(entryList);
    410388            }
    411389        } else {
     
    413391            // Table entry has no children. Remove entry from metadata collection's list
    414392            if (!psListRemove(mdList, PS_LIST_UNKNOWN, entry)) {
    415                 psError(PS_ERR_UNKNOWN,false,
    416                         PS_ERRORTEXT_psMetadata_REMOVE_LIST_FAILED,
    417                         key);
     393                psError(PS_ERR_UNKNOWN, false, PS_ERRORTEXT_psMetadata_REMOVE_LIST_FAILED, key);
    418394                return false;
    419395            }
     
    421397        // Remove entry from metadata collection's table
    422398        if (!psHashRemove(mdTable, key)) {
    423             psError(PS_ERR_UNKNOWN,false,
    424                     PS_ERRORTEXT_psMetadata_REMOVE_TABLE_FAILED,
    425                     key);
     399            psError(PS_ERR_UNKNOWN, false, PS_ERRORTEXT_psMetadata_REMOVE_TABLE_FAILED, key);
    426400            return false;
    427401        }
     
    431405        entry = psListGet(mdList, where);
    432406        if (entry == NULL) {
    433             psError(PS_ERR_BAD_PARAMETER_VALUE, true,
    434                     PS_ERRORTEXT_psMetadata_FIND_INDEX_FAILED,
    435                     where);
     407            psError(PS_ERR_BAD_PARAMETER_VALUE, true, PS_ERRORTEXT_psMetadata_FIND_INDEX_FAILED, where);
    436408            return false;
    437409        }
    438410
    439411        key = entry->name;
    440         if (key == NULL) {
    441             psError(PS_ERR_BAD_PARAMETER_VALUE, true,
    442                     PS_ERRORTEXT_psMetadata_REMOVE_LIST_INDEX_FAILED,
    443                     where);
     412        if(key == NULL) {
     413            psError(PS_ERR_BAD_PARAMETER_VALUE, true, PS_ERRORTEXT_psMetadata_REMOVE_LIST_INDEX_FAILED, where);
    444414            return false;
    445415        }
     
    463433    mdTable = md->table;
    464434
    465     entry = (psMetadataItem* ) psHashLookup(mdTable, key);
     435    entry = (psMetadataItem*)psHashLookup(mdTable, key);
    466436    if (entry == NULL) {
    467437        return NULL;
     
    478448    PS_PTR_CHECK_NULL(md->list,NULL);
    479449
    480     entry = (psMetadataItem* ) psListGet(md->list, where);
     450    entry = (psMetadataItem*) psListGet(md->list, where);
    481451    if (entry == NULL) {
    482         psError(PS_ERR_BAD_PARAMETER_VALUE, true,
    483                 PS_ERRORTEXT_psMetadata_FIND_INDEX_FAILED,
    484                 where);
     452        psError(PS_ERR_BAD_PARAMETER_VALUE, true, PS_ERRORTEXT_psMetadata_FIND_INDEX_FAILED, where);
    485453        return NULL;
    486454    }
  • trunk/psLib/src/types/psMetadata.h

    r2521 r2607  
    1111*  @author Ross Harman, MHPCC
    1212*
    13 *  @version $Revision: 1.26 $ $Name: not supported by cvs2svn $
    14 *  @date $Date: 2004-11-30 00:27:14 $
     13*  @version $Revision: 1.27 $ $Name: not supported by cvs2svn $
     14*  @date $Date: 2004-12-03 23:14:34 $
    1515*
    1616*  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    3333 */
    3434typedef enum {
    35     PS_META_ITEM_SET = 0,              ///< Null. Metadata is in psMetadataItem.items
    36     PS_META_BOOL,                      ///< Boolean data.
    37     PS_META_S32,                       ///< Signed 32-bit integer data.
    38     PS_META_F32,                       ///< Single-precision float data.
    39     PS_META_F64,                       ///< Double-precision float data.
    40     PS_META_STR,                       ///< String data (Stored in as psPtr ).
    41     PS_META_VEC,                       ///< Vector data (Stored in as psPtr ).
    42     PS_META_HASH,                      ///< Hash data (Stored in as psPtr ).
    43     PS_META_IMG,                       ///< Image data (Stored in as psPtr ).
    44     PS_META_LOOKUPTABLE,               ///< Lookup table data (Stored as void *).
    45     PS_META_JPEG,                      ///< JPEG data (Stored in as psPtr ).
    46     PS_META_PNG,                       ///< PNG data (Stored in as psPtr ).
    47     PS_META_ASTROM,                    ///< Astrometric coefficients (Stored in as psPtr ).
    48     PS_META_UNKNOWN,                   ///< Other data (Stored in as psPtr ).
     35    PS_META_PRIMITIVE,                 ///< Primitive data.
     36    PS_META_LIST,                      ///< List data (Stored as item.data.list).
     37    PS_META_STR,                       ///< String data (Stored as item.data.V).
     38    PS_META_VEC,                       ///< Vector data (Stored as item.data.V).
     39    PS_META_IMG,                       ///< Image data (Stored as item.data.V).
     40    PS_META_HASH,                      ///< Hash data (Stored as item.data.V).
     41    PS_META_LOOKUPTABLE,               ///< Lookup table data (Stored as item.data.V).
     42    PS_META_JPEG,                      ///< JPEG data (Stored as item.data.V).
     43    PS_META_PNG,                       ///< PNG data (Stored as item.data.V).
     44    PS_META_ASTROM,                    ///< Astrometric coefficients (Stored as item.data.V).
     45    PS_META_UNKNOWN,                   ///< Other data (Stored as item.data.V).
    4946    PS_META_NTYPE                      ///< Number of types. Must be last.
    5047} psMetadataType;
    51 
    52 /** Metadata item data structure.
    53  *
    54  * Struct for maintaining metadata items of varying types. It also contains
    55  * information about the item name, flags, comments, and other items with the same name.
    56  */
    57 typedef struct psMetadataItem
    58 {
    59     const psS32 id;                      ///< Unique ID for metadata item.
    60     char *restrict name;               ///< Name of metadata item.
    61     psMetadataType type;               ///< Type of metadata item.
    62     union {
    63         psBool B;                        ///< boolean data
    64         psS32 S32;                     ///< Signed 32-bit integer data.
    65         psF32 F32;                     ///< Single-precision float data.
    66         psF64 F64;                     ///< Double-precision float data.
    67         psPtr V;                       ///< Pointer to other type of data.
    68     } data;                            ///< Union for data types.
    69     char *comment;                     ///< Optional comment ("", not NULL).
    70     psList* restrict items;            ///< List of psMetadataItems with same name.
    71 }
    72 psMetadataItem;
    7348
    7449/** Metadata data structure.
     
    8560}
    8661psMetadata;
     62
     63/** Metadata item data structure.
     64 *
     65 * Struct for maintaining metadata items of varying types. It also contains
     66 * information about the item name, flags, comments, and other items with the same name.
     67 */
     68typedef struct psMetadataItem
     69{
     70    const psS32 id;                    ///< Unique ID for metadata item.
     71    char *name;                        ///< Name of metadata item.
     72    psMetadataType type;               ///< Type of metadata item.
     73    psElemType pType;                  ///< Primitive data type
     74    union {
     75        psBool B;                      ///< boolean data
     76        psS32 S32;                     ///< Signed 32-bit integer data.
     77        psF32 F32;                     ///< Single-precision float data.
     78        psF64 F64;                     ///< Double-precision float data.
     79        psList *list;                  ///< List data.
     80        psMetadata *md;                ///< Metadata data.
     81        psPtr V;                       ///< Pointer to other type of data.
     82    } data;                            ///< Union for data types.
     83    char *comment;                     ///< Optional comment ("", not NULL).
     84}
     85psMetadataItem;
    8786
    8887/** Create a metadata item.
     
    103102psMetadataItem* psMetadataItemAlloc(
    104103    const char *name,                  ///< Name of metadata item.
     104    psElemType pType,                  ///< Primitive type.
    105105    psMetadataType type,               ///< Type of metadata item.
    106106    const char *comment,               ///< Comment for metadata item.
     
    125125psMetadataItem* psMetadataItemAllocV(
    126126    const char *name,                  ///< Name of metadata item.
     127    psElemType pType,                  ///< Primitive type.
    127128    psMetadataType type,               ///< Type of metadata item.
    128129    const char *comment,               ///< Comment for metadata item.
     
    149150    psMetadata* restrict md,           ///< Metadata collection to insert metadat item.
    150151    psMetadataItem* restrict item,     ///< Metadata item to be added.
    151     psS32 location                       ///< Location to be added.
     152    psS32 location                     ///< Location to be added.
    152153);
    153154
     
    160161psBool psMetadataAdd(
    161162    psMetadata* restrict md,           ///< Metadata collection to insert metadat item.
    162     psS32 where,                         ///< Location to be added.
     163    psS32 where,                       ///< Location to be added.
    163164    const char *name,                  ///< Name of metadata item.
     165    psElemType pType,                  ///< Primitive type.
    164166    psMetadataType type,               ///< Type of metadata item.
    165167    const char *comment,               ///< Comment for metadata item.
     
    179181psBool psMetadataRemove(
    180182    psMetadata* restrict md,           ///< Metadata collection to insert metadat item.
    181     psS32 where,                         ///< Location to be removed.
     183    psS32 where,                       ///< Location to be removed.
    182184    const char *restrict key           ///< Name of metadata key.
    183185);
     
    205207psMetadataItem* psMetadataGet(
    206208    psMetadata* restrict md,           ///< Metadata collection to insert metadat item.
    207     psS32 where                          ///< Location to be retrieved.
     209    psS32 where                        ///< Location to be retrieved.
    208210);
    209211
     
    217219psBool psMetadataSetIterator(
    218220    psMetadata* restrict md,           ///< Metadata collection to iterate.
    219     psS32 where                          ///< Location of iterator.
     221    psS32 where                        ///< Location of iterator.
    220222);
    221223
     
    229231    psMetadata* restrict md,           ///< Metadata collection to iterate.
    230232    const char *restrict match,        ///< Beginning of key name.
    231     psS32 which                          ///< Iterator to be used.
     233    psS32 which                        ///< Iterator to be used.
    232234);
    233235
     
    241243    psMetadata* restrict md,           ///< Metadata collection to iterate.
    242244    const char *restrict match,        ///< Beginning of key name.
    243     psS32 which                          ///< Iterator to be used.
     245    psS32 which                        ///< Iterator to be used.
    244246);
    245247
  • trunk/psLib/src/types/psMetadataConfig.c

    r2525 r2607  
    99*  @author Ross Harman, MHPCC
    1010*
    11 *  @version $Revision: 1.12 $ $Name: not supported by cvs2svn $
    12 *  @date $Date: 2004-11-30 01:09:14 $
     11*  @version $Revision: 1.13 $ $Name: not supported by cvs2svn $
     12*  @date $Date: 2004-12-03 23:14:40 $
    1313*
    1414*  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    6060/** Free and null temporary variables used by config file parser */
    6161#define CLEAR_TEMPS()                                                                                        \
    62 if(strName) {                                                                                            \
    63     psFree(strName);                                                                                     \
    64     strName = NULL;                                                                                      \
    65 }                                                                                                        \
    66 if(strType) {                                                                                            \
    67     psFree(strType);                                                                                     \
    68     strType = NULL;                                                                                      \
    69 }                                                                                                        \
    70 if(strValue) {                                                                                           \
    71     psFree(strValue);                                                                                    \
    72     strValue = NULL;                                                                                     \
    73 }                                                                                                        \
    74 if(strComment) {                                                                                         \
    75     psFree(strComment);                                                                                  \
    76     strComment = NULL;                                                                                   \
    77 }                                                                                                        \
    78 if(tempVec) {                                                                                            \
    79     psFree(tempVec);                                                                                     \
    80     tempVec = NULL;                                                                                      \
     62if(strName) {                                                                                                \
     63    psFree(strName);                                                                                         \
     64    strName = NULL;                                                                                          \
     65}                                                                                                            \
     66if(strType) {                                                                                                \
     67    psFree(strType);                                                                                         \
     68    strType = NULL;                                                                                          \
     69}                                                                                                            \
     70if(strValue) {                                                                                               \
     71    psFree(strValue);                                                                                        \
     72    strValue = NULL;                                                                                         \
     73}                                                                                                            \
     74if(strComment) {                                                                                             \
     75    psFree(strComment);                                                                                      \
     76    strComment = NULL;                                                                                       \
    8177}
    8278
     
    316312{
    317313    psMetadataType type;
     314    psElemType pType;
    318315
    319316    PS_PTR_CHECK_NULL(fd,);
     
    322319
    323320    type = metadataItem->type;
     321    pType = metadataItem->pType;
    324322
    325323    switch(type) {
    326     case PS_META_BOOL:
    327         fprintf(fd, format, metadataItem->data.B);
    328         break;
    329     case PS_META_S32:
    330         fprintf(fd,format, metadataItem->data.S32);
    331         break;
    332     case PS_META_F32:
    333         fprintf(fd, format, metadataItem->data.F32);
    334         break;
    335     case PS_META_F64:
    336         fprintf(fd, format, metadataItem->data.F64);
     324    case PS_META_PRIMITIVE:
     325        switch(pType) {
     326        case PS_TYPE_BOOL:
     327            fprintf(fd, format, metadataItem->data.B);
     328            break;
     329        case PS_TYPE_S32:
     330            fprintf(fd,format, metadataItem->data.S32);
     331            break;
     332        case PS_TYPE_F32:
     333            fprintf(fd, format, metadataItem->data.F32);
     334            break;
     335        case PS_TYPE_F64:
     336            fprintf(fd, format, metadataItem->data.F64);
     337            break;
     338        default:
     339            psError(PS_ERR_BAD_PARAMETER_TYPE,true, PS_ERRORTEXT_psMetadata_METATYPE_INVALID, (int)pType);
     340        }
    337341        break;
    338342    case PS_META_STR:
    339         fprintf(fd, format, metadataItem->data.V);
     343        fprintf(fd,format, metadataItem->data.V);
    340344        break;
    341345    default:
     
    359363    psS32 numKeys = 0;
    360364    psS32 keyNum = 0;
    361     psMetadataType metadataItemType;
    362365    fitsfile *fd = NULL;
    363366
     
    416419        switch (keyType) {
    417420        case 'I':
    418             metadataItemType = PS_META_S32;
    419             success = psMetadataAdd(output, PS_LIST_TAIL, keyName, metadataItemType, keyComment, atoi(keyValue));
     421            success = psMetadataAdd(output, PS_LIST_TAIL, keyName, PS_TYPE_S32, PS_META_PRIMITIVE,
     422                                    keyComment, atoi(keyValue));
    420423            break;
    421424        case 'F':
    422             metadataItemType = PS_META_F64;
    423             success = psMetadataAdd(output, PS_LIST_TAIL, keyName, metadataItemType, keyComment, atof(keyValue));
     425            success = psMetadataAdd(output, PS_LIST_TAIL, keyName, PS_TYPE_F64, PS_META_PRIMITIVE,
     426                                    keyComment, atof(keyValue));
    424427            break;
    425428        case 'C':
    426             metadataItemType = PS_META_STR;
    427             success = psMetadataAdd(output, PS_LIST_TAIL, keyName, metadataItemType, keyComment, keyValue);
     429            success = psMetadataAdd(output, PS_LIST_TAIL, keyName, PS_TYPE_PTR, PS_META_STR, keyComment,
     430                                    keyValue);
    428431            break;
    429432        case 'L':
    430             metadataItemType = PS_META_BOOL;
    431433            tempBool = (keyValue[0] == 'T') ? 1 : 0;
    432             success = psMetadataAdd(output, PS_LIST_TAIL, keyName, metadataItemType, keyComment, tempBool);
     434            success = psMetadataAdd(output, PS_LIST_TAIL, keyName, PS_TYPE_BOOL, PS_META_PRIMITIVE, keyComment,
     435                                    tempBool);
    433436            break;
    434437        case 'U':
    435438        case 'X':
    436439        default:
    437             psError(PS_ERR_IO, true,
    438                     PS_ERRORTEXT_psMetadataIO_FITS_METATYPE_INVALID,
    439                     keyType);
     440            psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FITS_METATYPE_INVALID, keyType);
    440441            return output;
    441442        }
    442443
    443444        if (!success) {
    444             psError(PS_ERR_UNKNOWN, false,
    445                     PS_ERRORTEXT_psMetadataIO_ADD_FAILED,
    446                     keyName);
     445            psError(PS_ERR_UNKNOWN, false, PS_ERRORTEXT_psMetadataIO_ADD_FAILED, keyName);
    447446            return output;
    448447        }
     
    452451}
    453452
    454 
    455 psS32 psMetadataParseConfig(psMetadata** md, const char *fileName, psBool overwrite)
     453psMetadata* psMetadataParseConfig(psMetadata* md, psU32 *nFail, const char *fileName, psBool overwrite)
    456454{
    457455    psBool tempBool;
     
    463461    char *linePtr = NULL;
    464462    psS32 status = 0;
    465     psS32 lineCount = 0;
    466     psS32 failedLines = 0;
     463    psU32 lineCount = 0;
    467464    psF64 tempDbl = 0.0;
    468465    psS32 tempInt = 0.0;
     
    470467    psVector *tempVec = NULL;
    471468    FILE *fp = NULL;
    472     psElemType elemType;
     469    psElemType pType;
    473470    psMetadataType mdType;
    474471
    475472
    476473    // Check for nulls
    477     PS_PTR_CHECK_NULL(fileName,-1);
     474    PS_PTR_CHECK_NULL(fileName,NULL);
    478475    if((fp=fopen(fileName, "r")) == NULL) {
    479         psError(PS_ERR_IO, true,
    480                 PS_ERRORTEXT_psMetadataIO_FILE_OPEN_FAILED,
    481                 fileName);
    482         return -1;
     476        psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FILE_OPEN_FAILED, fileName);
     477        return NULL;
    483478    }
    484479
    485480    // Allocate metadata if necessary
    486     if (*md == NULL) {
    487         *md = psMetadataAlloc();
     481    if (md == NULL) {
     482        md = psMetadataAlloc();
    488483    }
    489484
     
    504499            // Check for more than one '*' or '@' in a line
    505500            if(repeatedChars(linePtr, '@') > 1) {
    506                 failedLines++;
     501                (*nFail)++;
    507502                psError(PS_ERR_IO, true,
    508                         PS_ERRORTEXT_psMetadataIO_FILE_MULTIPLE_CHAR,
    509                         '@', lineCount, fileName);
     503                        PS_ERRORTEXT_psMetadataIO_FILE_MULTIPLE_CHAR, '@', lineCount, fileName);
    510504                continue;
    511505            } else if(repeatedChars(linePtr, '*') > 1) {
    512                 failedLines++;
     506                (*nFail)++;
    513507                psError(PS_ERR_IO, true,
    514                         PS_ERRORTEXT_psMetadataIO_FILE_MULTIPLE_CHAR,
    515                         '*', lineCount, fileName);
     508                        PS_ERRORTEXT_psMetadataIO_FILE_MULTIPLE_CHAR, '*', lineCount, fileName);
    516509                continue;
    517510            } else if(repeatedChars(linePtr, '~') > 0) {
    518                 failedLines++;
     511                (*nFail)++;
    519512                psError(PS_ERR_IO, true,
    520                         PS_ERRORTEXT_psMetadataIO_FILE_MULTIPLE_CHAR,
    521                         '~', lineCount, fileName);
     513                        PS_ERRORTEXT_psMetadataIO_FILE_MULTIPLE_CHAR, '~', lineCount, fileName);
    522514                continue;
    523515            }
     
    526518            strName = getToken(&linePtr, " ", &status);
    527519            if(strName==NULL || status) {
    528                 failedLines++;
     520                (*nFail)++;
    529521                status = 0;
    530522                psError(PS_ERR_IO, true,
    531                         PS_ERRORTEXT_psMetadataIO_FILE_ELEMENT_NULL,
    532                         "name",lineCount, fileName);
     523                        PS_ERRORTEXT_psMetadataIO_FILE_ELEMENT_NULL, "name", lineCount, fileName);
    533524                continue;
    534525            }
     
    537528            strType = getToken(&linePtr, " ", &status);
    538529            if(strType==NULL) {
    539                 failedLines++;
     530                (*nFail)++;
    540531                status = 0;
    541                 psError(PS_ERR_IO, true,
    542                         PS_ERRORTEXT_psMetadataIO_FILE_ELEMENT_NULL,
    543                         "type",lineCount, fileName);
     532                psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FILE_ELEMENT_NULL, "type",lineCount,
     533                        fileName);
    544534                continue;
    545535            } else if(!strncmp(strType, "*", 1)) {
    546                 mdType = PS_META_ITEM_SET;
     536                mdType = PS_META_LIST;
     537                pType = PS_TYPE_PTR;
    547538            } else if(!strncmp(strType, "STR", 3)) {
    548539                mdType = PS_META_STR;
    549                 elemType = PS_TYPE_PTR;
     540                pType = PS_TYPE_PTR;
    550541            } else if(!strncmp(strType, "BOOL", 3)) {
    551                 mdType = PS_META_BOOL;
    552                 elemType = PS_TYPE_U8;
     542                mdType = PS_META_PRIMITIVE;
     543                pType = PS_TYPE_BOOL;
    553544            } else if(!strncmp(strType, "S32", 3)) {
    554                 mdType = PS_META_S32;
    555                 elemType = PS_TYPE_S32;
     545                mdType = PS_META_PRIMITIVE;
     546                pType = PS_TYPE_S32;
    556547            } else if(!strncmp(strType, "F32", 3)) {
    557                 mdType = PS_META_F32;
    558                 elemType = PS_TYPE_F32;
     548                mdType = PS_META_PRIMITIVE;
     549                pType = PS_TYPE_F32;
    559550            } else if(!strncmp(strType, "F64", 3)) {
    560                 mdType = PS_META_F64;
    561                 elemType = PS_TYPE_F64;
     551                mdType = PS_META_PRIMITIVE;
     552                pType = PS_TYPE_F64;
    562553            } else {
    563                 failedLines++;
    564                 psError(PS_ERR_IO, true,
    565                         PS_ERRORTEXT_psMetadataIO_FILE_TYPE_INVALID,
    566                         strType, lineCount, fileName);
     554                (*nFail)++;
     555                psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FILE_TYPE_INVALID, strType, lineCount,
     556                        fileName);
    567557                continue;
    568558            }
     
    573563
    574564            // Get the metadata item value if there is one. Lines with * don't have values.
    575             if(mdType != PS_META_ITEM_SET) {
     565            if(mdType != PS_META_LIST) {
    576566                strValue = getToken(&linePtr, "#", &status);
    577567                if(strValue==NULL) {
    578                     failedLines++;
     568                    (*nFail)++;
    579569                    status = 0;
    580                     psError(PS_ERR_IO, true,
    581                             PS_ERRORTEXT_psMetadataIO_FILE_ELEMENT_NULL,
    582                             "value",lineCount, fileName);
     570                    psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FILE_ELEMENT_NULL, "value", lineCount,
     571                            fileName);
    583572                    continue;
    584573                }
     
    588577            strComment = getToken(&linePtr,"~", &status);
    589578            if(status) {
    590                 failedLines++;
     579                (*nFail)++;
    591580                status = 0;
    592                 psError(PS_ERR_IO, true,
    593                         PS_ERRORTEXT_psMetadataIO_FILE_ELEMENT_NULL,
    594                         "comment",lineCount, fileName);
     581                psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FILE_ELEMENT_NULL, "comment", lineCount,
     582                        fileName);
    595583                continue;
    596584            }
     
    599587            and allow switch/case below to add new item. If overwrite is false, then report error. If found
    600588            item is folder node, then psMetadataAdd will automatically add a new child. */
    601             metadataItem = psMetadataLookup(*md, strName);
     589            metadataItem = psMetadataLookup(md, strName);
    602590            if(metadataItem != NULL) {
    603                 if(metadataItem->type!=PS_META_ITEM_SET) {
     591                if(metadataItem->type!=PS_META_LIST) {
    604592                    if(overwrite) {
    605                         psMetadataRemove(*md, PS_LIST_UNKNOWN, strName);
     593                        psMetadataRemove(md, PS_LIST_UNKNOWN, strName);
    606594                    } else {
    607                         failedLines++;
    608                         psError(PS_ERR_IO, true,
    609                                 PS_ERRORTEXT_psMetadataIO_OVERWRITE_ITEM,
    610                                 strName, lineCount, fileName);
     595                        (*nFail)++;
     596                        psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_OVERWRITE_ITEM, strName, lineCount,
     597                                fileName);
    611598                        continue;
    612599                    }
     
    616603            // Create and add metadata item to metadata and parse values
    617604            switch (mdType) {
    618             case PS_META_ITEM_SET:
    619                 psMetadataAdd(*md, PS_LIST_TAIL, strName, mdType, NULL, NULL);
     605            case PS_META_LIST:
     606                psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, NULL, NULL);
    620607                break;
    621             case PS_META_BOOL:
    622                 tempBool = parseBool(strValue, &status);
     608            case PS_META_STR:
     609                psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, strComment, strValue);
     610                break;
     611            case PS_META_VEC:
     612                tempVec = parseVector(strValue, pType, &status);
    623613                if(!status) {
    624                     psMetadataAdd(*md, PS_LIST_TAIL, strName, mdType, strComment, tempBool);
     614                    psMetadataAdd(md, PS_LIST_TAIL, strName+1, pType, mdType, strComment, tempVec);
    625615                } else {
    626616                    status = 0;
    627                     failedLines++;
    628                     psError(PS_ERR_IO, true,
    629                             PS_ERRORTEXT_psMetadataIO_PARSE_FAILED,
    630                             strValue, strName, strType, lineCount, fileName);
     617                    (*nFail)++;
     618                    psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName,
     619                            strType, lineCount, fileName);
    631620                    continue;
    632621                }
    633622                break;
    634             case PS_META_S32:
    635                 tempInt = (psS32)parseValue(strValue, &status);
    636                 if(!status) {
    637                     psMetadataAdd(*md, PS_LIST_TAIL, strName, mdType, strComment, tempInt);
    638                 } else {
    639                     status = 0;
    640                     failedLines++;
    641                     psError(PS_ERR_IO, true,
    642                             PS_ERRORTEXT_psMetadataIO_PARSE_FAILED,
    643                             strValue, strName, strType, lineCount, fileName);
     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:
     664                    (*nFail)++;
     665                    psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FILE_TYPE_INVALID, mdType, lineCount,
     666                            fileName);
    644667                    continue;
    645                 }
    646                 break;
    647             case PS_META_F32:
    648             case PS_META_F64:
    649                 tempDbl = parseValue(strValue, &status);
    650                 if(!status) {
    651                     psMetadataAdd(*md, PS_LIST_TAIL, strName, mdType, strComment, tempDbl);
    652                 } else {
    653                     status = 0;
    654                     failedLines++;
    655                     psError(PS_ERR_IO, true,
    656                             PS_ERRORTEXT_psMetadataIO_PARSE_FAILED,
    657                             strValue, strName, strType, lineCount, fileName);
    658                     continue;
    659                 }
    660                 break;
    661             case PS_META_STR:
    662                 psMetadataAdd(*md, PS_LIST_TAIL, strName, mdType, strComment, strValue);
    663                 break;
    664             case PS_META_VEC:
    665                 tempVec = parseVector(strValue, elemType, &status);
    666                 if(!status) {
    667                     psMetadataAdd(*md, PS_LIST_TAIL, strName+1, mdType, strComment, tempVec);
    668                 } else {
    669                     status = 0;
    670                     failedLines++;
    671                     psError(PS_ERR_IO, true,
    672                             PS_ERRORTEXT_psMetadataIO_PARSE_FAILED,
    673                             strValue, strName, strType, lineCount, fileName);
    674                     continue;
    675                 }
     668                } // switch
    676669                break;
    677670            default:
    678                 failedLines++;
    679                 psError(PS_ERR_IO, true,
    680                         PS_ERRORTEXT_psMetadataIO_FILE_TYPE_INVALID,
    681                         mdType, lineCount, fileName);
     671                (*nFail)++;
     672                psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FILE_TYPE_INVALID, mdType, lineCount,
     673                        fileName);
    682674                continue;
    683675            } // switch
     
    687679    psFree(line);
    688680
    689     return failedLines;
     681    return md;
    690682}
    691683
     
    753745
    754746    // Add attributes to metadata
    755     psMetadataAdd(md, PS_LIST_TAIL, "htAtts", PS_META_HASH, NULL, htAtts);
     747    psMetadataAdd(md, PS_LIST_TAIL, "htAtts", PS_TYPE_PTR, PS_META_HASH, NULL, htAtts);
    756748
    757749    psFree(psTagName);
     
    765757    psBool tempBool = false;
    766758    psS32 status = 0;
    767     psU64 lineNumber = 0;
     759    psU32 lineNumber = 0;
    768760    psF64 tempDbl = 0.0;
    769761    psS32 tempInt = 0.0;
    770     psElemType elemType;
     762    psElemType pType;
    771763    psMetadataType mdType;
    772764    char *fileName = NULL;
     
    790782    metadataItem = psMetadataLookup(md, "htAtts");
    791783    PS_PTR_CHECK_NULL_GENERAL(metadataItem, return);
    792     PS_PTR_CHECK_NULL_GENERAL(metadataItem->items, return);
    793     psListSetIterator(metadataItem->items, PS_LIST_TAIL);
    794     metadataItem = (psMetadataItem*)psListGetCurrent(metadataItem->items);
    795     htAtts = (psHash*)metadataItem->data.V;
     784    PS_PTR_CHECK_NULL_GENERAL(metadataItem->data.list, return);
     785    psListSetIterator(metadataItem->data.list, PS_LIST_TAIL);
     786    metadataItem = (psMetadataItem*)psListGetCurrent(metadataItem->data.list);
     787    htAtts = (psHash*)metadataItem->data.list;
    796788    PS_PTR_CHECK_NULL_GENERAL(htAtts, return);
    797789    fileName = (char*)input->filename;
     
    811803        if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psString")) {
    812804            mdType = PS_META_STR;
    813             elemType = PS_TYPE_PTR;
     805            pType = PS_TYPE_PTR;
    814806        } else if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psBool")) {
    815             mdType = PS_META_BOOL;
    816             elemType = PS_TYPE_U8;
     807            mdType = PS_META_PRIMITIVE;
     808            pType = PS_TYPE_U8;
    817809        } else if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psS32")) {
    818             mdType = PS_META_S32;
    819             elemType = PS_TYPE_S32;
     810            mdType = PS_META_PRIMITIVE;
     811            pType = PS_TYPE_S32;
    820812        } else if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psF32")) {
    821             mdType = PS_META_F32;
    822             elemType = PS_TYPE_F32;
     813            mdType = PS_META_PRIMITIVE;
     814            pType = PS_TYPE_F32;
    823815        } else if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psF64")) {
    824             mdType = PS_META_F64;
    825             elemType = PS_TYPE_F64;
     816            mdType = PS_META_PRIMITIVE;
     817            pType = PS_TYPE_F64;
    826818        } else {
    827819            psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_TYPE_INVALID_LINE_FILE, strType, lineNumber,
     
    847839        metadataItem = psMetadataLookup(md, strName);
    848840        if(metadataItem != NULL) {
    849             if(metadataItem->type != PS_META_ITEM_SET) {
     841            if(metadataItem->type != PS_META_LIST) {
    850842                if(overwrite) {
    851843                    psMetadataRemove(md, PS_LIST_UNKNOWN, strName);
     
    861853    // Create metadata item and add to metadata
    862854    switch(mdType) {
    863     case PS_META_ITEM_SET:
    864         psMetadataAdd(md, PS_LIST_TAIL, strName, mdType, NULL, NULL);
    865         break;
    866     case PS_META_BOOL:
    867         tempBool = parseBool((char*)strValue, &status);
    868         if(!status) {
    869             psMetadataAdd(md, PS_LIST_TAIL, strName, mdType, NULL, tempBool);
    870         } else {
    871             status = 0;
    872             psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, strType,
    873                     lineNumber, fileName);
    874         }
    875         break;
    876     case PS_META_S32:
    877         tempInt = (psS32)parseValue((char*)strValue, &status);
    878         if(!status) {
    879             psMetadataAdd(md, PS_LIST_TAIL, strName, mdType, NULL, tempInt);
    880         } else {
    881             status = 0;
    882             psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, strType,
    883                     lineNumber, fileName);
    884         }
    885         break;
    886     case PS_META_F32:
    887     case PS_META_F64:
    888         tempDbl = parseValue((char*)strValue, &status);
    889         if(!status) {
    890             psMetadataAdd(md, PS_LIST_TAIL, strName, mdType, NULL, tempDbl);
    891         } else {
    892             status = 0;
    893             psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, strType,
    894                     lineNumber, fileName);
    895         }
     855    case PS_META_LIST:
     856        psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, NULL, NULL);
    896857        break;
    897858    case PS_META_STR:
    898         psMetadataAdd(md, PS_LIST_TAIL, strName, mdType, NULL, strValue);
     859        psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, NULL, strValue);
     860        break;
     861    case PS_META_PRIMITIVE:
     862        switch(pType) {
     863        case PS_TYPE_BOOL:
     864            tempBool = parseBool((char*)strValue, &status);
     865            if(!status) {
     866                psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, NULL, tempBool);
     867            } else {
     868                status = 0;
     869                psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, strType,
     870                        lineNumber, fileName);
     871            }
     872            break;
     873        case PS_TYPE_S32:
     874            tempInt = (psS32)parseValue((char*)strValue, &status);
     875            if(!status) {
     876                psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, NULL, tempInt);
     877            } else {
     878                status = 0;
     879                psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, strType,
     880                        lineNumber, fileName);
     881            }
     882            break;
     883        case PS_TYPE_F32:
     884        case PS_TYPE_F64:
     885            tempDbl = parseValue((char*)strValue, &status);
     886            if(!status) {
     887                psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, NULL, tempDbl);
     888            } else {
     889                status = 0;
     890                psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, strType,
     891                        lineNumber, fileName);
     892            }
     893            break;
     894        default:
     895            psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FILE_TYPE_INVALID, strType, lineNumber, fileName);
     896        } // End switch
    899897        break;
    900898    default:
     
    902900    } // End switch
    903901
     902
    904903    return;
    905904}
     
    910909    bool overwrite = false;
    911910    psS32 status = 0;
    912     psU64 lineNumber = 0;
    913     psElemType elemType;
     911    psU32 lineNumber = 0;
     912    psElemType pType;
    914913    psMetadataType mdType;
    915914    char *strName = NULL;
     
    936935    tables = psMetadataLookup(md, "htAtts");
    937936    PS_PTR_CHECK_NULL_GENERAL(tables, return);
    938     PS_PTR_CHECK_NULL_GENERAL(tables->items, return);
    939     psListSetIterator(tables->items, PS_LIST_TAIL);
    940     table = (psMetadataItem*)psListGetCurrent(tables->items);
    941     htAtts = (psHash*)table->data.V;
     937    PS_PTR_CHECK_NULL_GENERAL(tables->data.list, return);
     938    psListSetIterator(tables->data.list, PS_LIST_TAIL);
     939    table = (psMetadataItem*)psListGetCurrent(tables->data.list);
     940    htAtts = (psHash*)table->data.list;
    942941    PS_PTR_CHECK_NULL_GENERAL(htAtts, return);
    943942    fileName = (char*)input->filename;
     
    957956        if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psString")) {
    958957            mdType = PS_META_STR;
    959             elemType = PS_TYPE_PTR;
     958            pType = PS_TYPE_PTR;
    960959        } else if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psBool")) {
    961             mdType = PS_META_BOOL;
    962             elemType = PS_TYPE_U8;
     960            mdType = PS_META_PRIMITIVE;
     961            pType = PS_TYPE_U8;
    963962        } else if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psS32")) {
    964             mdType = PS_META_S32;
    965             elemType = PS_TYPE_S32;
     963            mdType = PS_META_PRIMITIVE;
     964            pType = PS_TYPE_S32;
    966965        } else if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psF32")) {
    967             mdType = PS_META_F32;
    968             elemType = PS_TYPE_F32;
     966            mdType = PS_META_PRIMITIVE;
     967            pType = PS_TYPE_F32;
    969968        } else if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psF64")) {
    970             mdType = PS_META_F64;
    971             elemType = PS_TYPE_F64;
     969            mdType = PS_META_PRIMITIVE;
     970            pType = PS_TYPE_F64;
    972971        } else {
    973972            psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_TYPE_INVALID_LINE_FILE, strName, lineNumber,
     
    994993        metadataItem = psMetadataLookup(md, strName);
    995994        if(metadataItem != NULL) {
    996             if(metadataItem->type != PS_META_ITEM_SET) {
     995            if(metadataItem->type != PS_META_LIST) {
    997996                if(overwrite) {
    998997                    psMetadataRemove(md, PS_LIST_UNKNOWN, strName);
     
    10071006
    10081007    // Get value
    1009     vec = parseVector((char*)strValue, elemType, &status);
     1008    vec = parseVector((char*)strValue, pType, &status);
    10101009    if(!status) {
    1011         psMetadataAdd(md, PS_LIST_TAIL, strName+1, mdType, NULL, vec);
     1010        psMetadataAdd(md, PS_LIST_TAIL, strName+1, pType, mdType, NULL, vec);
    10121011    } else {
    10131012        psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, strType,
     
    10381037    tables = psMetadataLookup(md, "htAtts");
    10391038    PS_PTR_CHECK_NULL_GENERAL(tables, return);
    1040     PS_PTR_CHECK_NULL_GENERAL(tables->items, return);
    1041     psListSetIterator(tables->items, PS_LIST_TAIL);
    1042     table = (psMetadataItem*)psListGetCurrent(tables->items);
    1043     htAtts = (psHash*)table->data.V;
     1039    PS_PTR_CHECK_NULL_GENERAL(tables->data.list, return);
     1040    psListSetIterator(tables->data.list, PS_LIST_TAIL);
     1041    table = (psMetadataItem*)psListGetCurrent(tables->data.list);
     1042    htAtts = (psHash*)table->data.list;
    10441043    PS_PTR_CHECK_NULL_GENERAL(htAtts, return);
    10451044
     
    10641063
    10651064    // Free temporary metadata item and its hash table
    1066     psListRemove(tables->items, PS_LIST_TAIL, table);
     1065    psListRemove(tables->data.list, PS_LIST_TAIL, table);
    10671066
    10681067    psFree(psEndTagName);
     
    10711070}
    10721071
    1073 psS32 psMetadataParseConfigXml(psMetadata** md, const char *fileName)
     1072psMetadata*  psMetadataParseConfigXml(psMetadata* md, psU32 *nFail, const char *fileName, psBool overwrite)
    10741073{
    10751074    xmlSAXHandler saxHandler;
     
    10771076
    10781077    // Error checks
    1079     PS_PTR_CHECK_NULL(fileName,-1);
     1078    PS_PTR_CHECK_NULL(fileName, NULL);
    10801079
    10811080    // Allocate metadata if necessary
    1082     if (*md == NULL) {
    1083         *md = psMetadataAlloc();
     1081    if (md == NULL) {
     1082        md = psMetadataAlloc();
    10841083    }
    10851084
     
    11131112    saxHandler.externalSubset           = NULL;
    11141113    saxHandler.initialized              = 1;
    1115     saxHandler._private                 = *md;
     1114    saxHandler._private                 = md;
    11161115    saxHandler.startElementNs           = NULL;
    11171116    saxHandler.endElementNs             = NULL;
     
    11211120    if (xmlSAXUserParseFile(&saxHandler, NULL, fileName)) {
    11221121        psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FILE_OPEN_FAILED, fileName);
    1123         return -1;
     1122        return NULL;
    11241123    }
    11251124
  • trunk/psLib/src/types/psMetadataConfig.h

    r2529 r2607  
    99*  @author Ross Harman, MHPCC
    1010*
    11 *  @version $Revision: 1.5 $ $Name: not supported by cvs2svn $
    12 *  @date $Date: 2004-11-30 01:24:32 $
     11*  @version $Revision: 1.6 $ $Name: not supported by cvs2svn $
     12*  @date $Date: 2004-12-03 23:14:46 $
    1313*
    1414*  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    5858 *  Loads pre-defined settings by parsing a configuration file into a psMetadata structure.
    5959 *
    60  *  @return psS32 : Number of lines that failed to be read.
     60 *  @return psMetadata* : Resulting metadata from read.
    6161 */
    62 psS32 psMetadataParseConfig(
    63     psMetadata** md,                   ///< Resulting metadata from read.
     62psMetadata* psMetadataParseConfig(
     63    psMetadata* md,                    ///< Resulting metadata from read.
     64    psU32 *nFail,                      ///< Number of failed lines.
    6465    const char *fileName,              ///< Name of file to read.
    6566    psBool overwrite                   ///< Allow overwrite of duplicate specifications.
     
    7071 *  Loads pre-defined XML settings by parsing a configuration file into a psMetadata structure.
    7172 *
    72  *  @return psS32 : Number of lines that failed to be read.
     73 *  @return psMetadata* : Resulting metadata from read.
    7374 */
    74 psS32 psMetadataParseConfigXml(
    75     psMetadata** md,                   ///< Resulting metadata from read.
    76     const char *fileName               ///< Name of file to read.
     75
     76psMetadata*  psMetadataParseConfigXml(
     77    psMetadata* md,                    ///< Resulting metadata from read.
     78    psU32 *nFail,                      ///< Number of failed lines.
     79    const char *fileName,              ///< Name of file to read.
     80    psBool overwrite                   ///< Allow overwrite of duplicate specifications.
    7781);
    7882
  • trunk/psLib/src/xml/psXML.c

    r2525 r2607  
    99*  @author Ross Harman, MHPCC
    1010*
    11 *  @version $Revision: 1.12 $ $Name: not supported by cvs2svn $
    12 *  @date $Date: 2004-11-30 01:09:14 $
     11*  @version $Revision: 1.13 $ $Name: not supported by cvs2svn $
     12*  @date $Date: 2004-12-03 23:14:40 $
    1313*
    1414*  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    6060/** Free and null temporary variables used by config file parser */
    6161#define CLEAR_TEMPS()                                                                                        \
    62 if(strName) {                                                                                            \
    63     psFree(strName);                                                                                     \
    64     strName = NULL;                                                                                      \
    65 }                                                                                                        \
    66 if(strType) {                                                                                            \
    67     psFree(strType);                                                                                     \
    68     strType = NULL;                                                                                      \
    69 }                                                                                                        \
    70 if(strValue) {                                                                                           \
    71     psFree(strValue);                                                                                    \
    72     strValue = NULL;                                                                                     \
    73 }                                                                                                        \
    74 if(strComment) {                                                                                         \
    75     psFree(strComment);                                                                                  \
    76     strComment = NULL;                                                                                   \
    77 }                                                                                                        \
    78 if(tempVec) {                                                                                            \
    79     psFree(tempVec);                                                                                     \
    80     tempVec = NULL;                                                                                      \
     62if(strName) {                                                                                                \
     63    psFree(strName);                                                                                         \
     64    strName = NULL;                                                                                          \
     65}                                                                                                            \
     66if(strType) {                                                                                                \
     67    psFree(strType);                                                                                         \
     68    strType = NULL;                                                                                          \
     69}                                                                                                            \
     70if(strValue) {                                                                                               \
     71    psFree(strValue);                                                                                        \
     72    strValue = NULL;                                                                                         \
     73}                                                                                                            \
     74if(strComment) {                                                                                             \
     75    psFree(strComment);                                                                                      \
     76    strComment = NULL;                                                                                       \
    8177}
    8278
     
    316312{
    317313    psMetadataType type;
     314    psElemType pType;
    318315
    319316    PS_PTR_CHECK_NULL(fd,);
     
    322319
    323320    type = metadataItem->type;
     321    pType = metadataItem->pType;
    324322
    325323    switch(type) {
    326     case PS_META_BOOL:
    327         fprintf(fd, format, metadataItem->data.B);
    328         break;
    329     case PS_META_S32:
    330         fprintf(fd,format, metadataItem->data.S32);
    331         break;
    332     case PS_META_F32:
    333         fprintf(fd, format, metadataItem->data.F32);
    334         break;
    335     case PS_META_F64:
    336         fprintf(fd, format, metadataItem->data.F64);
     324    case PS_META_PRIMITIVE:
     325        switch(pType) {
     326        case PS_TYPE_BOOL:
     327            fprintf(fd, format, metadataItem->data.B);
     328            break;
     329        case PS_TYPE_S32:
     330            fprintf(fd,format, metadataItem->data.S32);
     331            break;
     332        case PS_TYPE_F32:
     333            fprintf(fd, format, metadataItem->data.F32);
     334            break;
     335        case PS_TYPE_F64:
     336            fprintf(fd, format, metadataItem->data.F64);
     337            break;
     338        default:
     339            psError(PS_ERR_BAD_PARAMETER_TYPE,true, PS_ERRORTEXT_psMetadata_METATYPE_INVALID, (int)pType);
     340        }
    337341        break;
    338342    case PS_META_STR:
    339         fprintf(fd, format, metadataItem->data.V);
     343        fprintf(fd,format, metadataItem->data.V);
    340344        break;
    341345    default:
     
    359363    psS32 numKeys = 0;
    360364    psS32 keyNum = 0;
    361     psMetadataType metadataItemType;
    362365    fitsfile *fd = NULL;
    363366
     
    416419        switch (keyType) {
    417420        case 'I':
    418             metadataItemType = PS_META_S32;
    419             success = psMetadataAdd(output, PS_LIST_TAIL, keyName, metadataItemType, keyComment, atoi(keyValue));
     421            success = psMetadataAdd(output, PS_LIST_TAIL, keyName, PS_TYPE_S32, PS_META_PRIMITIVE,
     422                                    keyComment, atoi(keyValue));
    420423            break;
    421424        case 'F':
    422             metadataItemType = PS_META_F64;
    423             success = psMetadataAdd(output, PS_LIST_TAIL, keyName, metadataItemType, keyComment, atof(keyValue));
     425            success = psMetadataAdd(output, PS_LIST_TAIL, keyName, PS_TYPE_F64, PS_META_PRIMITIVE,
     426                                    keyComment, atof(keyValue));
    424427            break;
    425428        case 'C':
    426             metadataItemType = PS_META_STR;
    427             success = psMetadataAdd(output, PS_LIST_TAIL, keyName, metadataItemType, keyComment, keyValue);
     429            success = psMetadataAdd(output, PS_LIST_TAIL, keyName, PS_TYPE_PTR, PS_META_STR, keyComment,
     430                                    keyValue);
    428431            break;
    429432        case 'L':
    430             metadataItemType = PS_META_BOOL;
    431433            tempBool = (keyValue[0] == 'T') ? 1 : 0;
    432             success = psMetadataAdd(output, PS_LIST_TAIL, keyName, metadataItemType, keyComment, tempBool);
     434            success = psMetadataAdd(output, PS_LIST_TAIL, keyName, PS_TYPE_BOOL, PS_META_PRIMITIVE, keyComment,
     435                                    tempBool);
    433436            break;
    434437        case 'U':
    435438        case 'X':
    436439        default:
    437             psError(PS_ERR_IO, true,
    438                     PS_ERRORTEXT_psMetadataIO_FITS_METATYPE_INVALID,
    439                     keyType);
     440            psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FITS_METATYPE_INVALID, keyType);
    440441            return output;
    441442        }
    442443
    443444        if (!success) {
    444             psError(PS_ERR_UNKNOWN, false,
    445                     PS_ERRORTEXT_psMetadataIO_ADD_FAILED,
    446                     keyName);
     445            psError(PS_ERR_UNKNOWN, false, PS_ERRORTEXT_psMetadataIO_ADD_FAILED, keyName);
    447446            return output;
    448447        }
     
    452451}
    453452
    454 
    455 psS32 psMetadataParseConfig(psMetadata** md, const char *fileName, psBool overwrite)
     453psMetadata* psMetadataParseConfig(psMetadata* md, psU32 *nFail, const char *fileName, psBool overwrite)
    456454{
    457455    psBool tempBool;
     
    463461    char *linePtr = NULL;
    464462    psS32 status = 0;
    465     psS32 lineCount = 0;
    466     psS32 failedLines = 0;
     463    psU32 lineCount = 0;
    467464    psF64 tempDbl = 0.0;
    468465    psS32 tempInt = 0.0;
     
    470467    psVector *tempVec = NULL;
    471468    FILE *fp = NULL;
    472     psElemType elemType;
     469    psElemType pType;
    473470    psMetadataType mdType;
    474471
    475472
    476473    // Check for nulls
    477     PS_PTR_CHECK_NULL(fileName,-1);
     474    PS_PTR_CHECK_NULL(fileName,NULL);
    478475    if((fp=fopen(fileName, "r")) == NULL) {
    479         psError(PS_ERR_IO, true,
    480                 PS_ERRORTEXT_psMetadataIO_FILE_OPEN_FAILED,
    481                 fileName);
    482         return -1;
     476        psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FILE_OPEN_FAILED, fileName);
     477        return NULL;
    483478    }
    484479
    485480    // Allocate metadata if necessary
    486     if (*md == NULL) {
    487         *md = psMetadataAlloc();
     481    if (md == NULL) {
     482        md = psMetadataAlloc();
    488483    }
    489484
     
    504499            // Check for more than one '*' or '@' in a line
    505500            if(repeatedChars(linePtr, '@') > 1) {
    506                 failedLines++;
     501                (*nFail)++;
    507502                psError(PS_ERR_IO, true,
    508                         PS_ERRORTEXT_psMetadataIO_FILE_MULTIPLE_CHAR,
    509                         '@', lineCount, fileName);
     503                        PS_ERRORTEXT_psMetadataIO_FILE_MULTIPLE_CHAR, '@', lineCount, fileName);
    510504                continue;
    511505            } else if(repeatedChars(linePtr, '*') > 1) {
    512                 failedLines++;
     506                (*nFail)++;
    513507                psError(PS_ERR_IO, true,
    514                         PS_ERRORTEXT_psMetadataIO_FILE_MULTIPLE_CHAR,
    515                         '*', lineCount, fileName);
     508                        PS_ERRORTEXT_psMetadataIO_FILE_MULTIPLE_CHAR, '*', lineCount, fileName);
    516509                continue;
    517510            } else if(repeatedChars(linePtr, '~') > 0) {
    518                 failedLines++;
     511                (*nFail)++;
    519512                psError(PS_ERR_IO, true,
    520                         PS_ERRORTEXT_psMetadataIO_FILE_MULTIPLE_CHAR,
    521                         '~', lineCount, fileName);
     513                        PS_ERRORTEXT_psMetadataIO_FILE_MULTIPLE_CHAR, '~', lineCount, fileName);
    522514                continue;
    523515            }
     
    526518            strName = getToken(&linePtr, " ", &status);
    527519            if(strName==NULL || status) {
    528                 failedLines++;
     520                (*nFail)++;
    529521                status = 0;
    530522                psError(PS_ERR_IO, true,
    531                         PS_ERRORTEXT_psMetadataIO_FILE_ELEMENT_NULL,
    532                         "name",lineCount, fileName);
     523                        PS_ERRORTEXT_psMetadataIO_FILE_ELEMENT_NULL, "name", lineCount, fileName);
    533524                continue;
    534525            }
     
    537528            strType = getToken(&linePtr, " ", &status);
    538529            if(strType==NULL) {
    539                 failedLines++;
     530                (*nFail)++;
    540531                status = 0;
    541                 psError(PS_ERR_IO, true,
    542                         PS_ERRORTEXT_psMetadataIO_FILE_ELEMENT_NULL,
    543                         "type",lineCount, fileName);
     532                psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FILE_ELEMENT_NULL, "type",lineCount,
     533                        fileName);
    544534                continue;
    545535            } else if(!strncmp(strType, "*", 1)) {
    546                 mdType = PS_META_ITEM_SET;
     536                mdType = PS_META_LIST;
     537                pType = PS_TYPE_PTR;
    547538            } else if(!strncmp(strType, "STR", 3)) {
    548539                mdType = PS_META_STR;
    549                 elemType = PS_TYPE_PTR;
     540                pType = PS_TYPE_PTR;
    550541            } else if(!strncmp(strType, "BOOL", 3)) {
    551                 mdType = PS_META_BOOL;
    552                 elemType = PS_TYPE_U8;
     542                mdType = PS_META_PRIMITIVE;
     543                pType = PS_TYPE_BOOL;
    553544            } else if(!strncmp(strType, "S32", 3)) {
    554                 mdType = PS_META_S32;
    555                 elemType = PS_TYPE_S32;
     545                mdType = PS_META_PRIMITIVE;
     546                pType = PS_TYPE_S32;
    556547            } else if(!strncmp(strType, "F32", 3)) {
    557                 mdType = PS_META_F32;
    558                 elemType = PS_TYPE_F32;
     548                mdType = PS_META_PRIMITIVE;
     549                pType = PS_TYPE_F32;
    559550            } else if(!strncmp(strType, "F64", 3)) {
    560                 mdType = PS_META_F64;
    561                 elemType = PS_TYPE_F64;
     551                mdType = PS_META_PRIMITIVE;
     552                pType = PS_TYPE_F64;
    562553            } else {
    563                 failedLines++;
    564                 psError(PS_ERR_IO, true,
    565                         PS_ERRORTEXT_psMetadataIO_FILE_TYPE_INVALID,
    566                         strType, lineCount, fileName);
     554                (*nFail)++;
     555                psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FILE_TYPE_INVALID, strType, lineCount,
     556                        fileName);
    567557                continue;
    568558            }
     
    573563
    574564            // Get the metadata item value if there is one. Lines with * don't have values.
    575             if(mdType != PS_META_ITEM_SET) {
     565            if(mdType != PS_META_LIST) {
    576566                strValue = getToken(&linePtr, "#", &status);
    577567                if(strValue==NULL) {
    578                     failedLines++;
     568                    (*nFail)++;
    579569                    status = 0;
    580                     psError(PS_ERR_IO, true,
    581                             PS_ERRORTEXT_psMetadataIO_FILE_ELEMENT_NULL,
    582                             "value",lineCount, fileName);
     570                    psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FILE_ELEMENT_NULL, "value", lineCount,
     571                            fileName);
    583572                    continue;
    584573                }
     
    588577            strComment = getToken(&linePtr,"~", &status);
    589578            if(status) {
    590                 failedLines++;
     579                (*nFail)++;
    591580                status = 0;
    592                 psError(PS_ERR_IO, true,
    593                         PS_ERRORTEXT_psMetadataIO_FILE_ELEMENT_NULL,
    594                         "comment",lineCount, fileName);
     581                psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FILE_ELEMENT_NULL, "comment", lineCount,
     582                        fileName);
    595583                continue;
    596584            }
     
    599587            and allow switch/case below to add new item. If overwrite is false, then report error. If found
    600588            item is folder node, then psMetadataAdd will automatically add a new child. */
    601             metadataItem = psMetadataLookup(*md, strName);
     589            metadataItem = psMetadataLookup(md, strName);
    602590            if(metadataItem != NULL) {
    603                 if(metadataItem->type!=PS_META_ITEM_SET) {
     591                if(metadataItem->type!=PS_META_LIST) {
    604592                    if(overwrite) {
    605                         psMetadataRemove(*md, PS_LIST_UNKNOWN, strName);
     593                        psMetadataRemove(md, PS_LIST_UNKNOWN, strName);
    606594                    } else {
    607                         failedLines++;
    608                         psError(PS_ERR_IO, true,
    609                                 PS_ERRORTEXT_psMetadataIO_OVERWRITE_ITEM,
    610                                 strName, lineCount, fileName);
     595                        (*nFail)++;
     596                        psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_OVERWRITE_ITEM, strName, lineCount,
     597                                fileName);
    611598                        continue;
    612599                    }
     
    616603            // Create and add metadata item to metadata and parse values
    617604            switch (mdType) {
    618             case PS_META_ITEM_SET:
    619                 psMetadataAdd(*md, PS_LIST_TAIL, strName, mdType, NULL, NULL);
     605            case PS_META_LIST:
     606                psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, NULL, NULL);
    620607                break;
    621             case PS_META_BOOL:
    622                 tempBool = parseBool(strValue, &status);
     608            case PS_META_STR:
     609                psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, strComment, strValue);
     610                break;
     611            case PS_META_VEC:
     612                tempVec = parseVector(strValue, pType, &status);
    623613                if(!status) {
    624                     psMetadataAdd(*md, PS_LIST_TAIL, strName, mdType, strComment, tempBool);
     614                    psMetadataAdd(md, PS_LIST_TAIL, strName+1, pType, mdType, strComment, tempVec);
    625615                } else {
    626616                    status = 0;
    627                     failedLines++;
    628                     psError(PS_ERR_IO, true,
    629                             PS_ERRORTEXT_psMetadataIO_PARSE_FAILED,
    630                             strValue, strName, strType, lineCount, fileName);
     617                    (*nFail)++;
     618                    psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName,
     619                            strType, lineCount, fileName);
    631620                    continue;
    632621                }
    633622                break;
    634             case PS_META_S32:
    635                 tempInt = (psS32)parseValue(strValue, &status);
    636                 if(!status) {
    637                     psMetadataAdd(*md, PS_LIST_TAIL, strName, mdType, strComment, tempInt);
    638                 } else {
    639                     status = 0;
    640                     failedLines++;
    641                     psError(PS_ERR_IO, true,
    642                             PS_ERRORTEXT_psMetadataIO_PARSE_FAILED,
    643                             strValue, strName, strType, lineCount, fileName);
     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:
     664                    (*nFail)++;
     665                    psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FILE_TYPE_INVALID, mdType, lineCount,
     666                            fileName);
    644667                    continue;
    645                 }
    646                 break;
    647             case PS_META_F32:
    648             case PS_META_F64:
    649                 tempDbl = parseValue(strValue, &status);
    650                 if(!status) {
    651                     psMetadataAdd(*md, PS_LIST_TAIL, strName, mdType, strComment, tempDbl);
    652                 } else {
    653                     status = 0;
    654                     failedLines++;
    655                     psError(PS_ERR_IO, true,
    656                             PS_ERRORTEXT_psMetadataIO_PARSE_FAILED,
    657                             strValue, strName, strType, lineCount, fileName);
    658                     continue;
    659                 }
    660                 break;
    661             case PS_META_STR:
    662                 psMetadataAdd(*md, PS_LIST_TAIL, strName, mdType, strComment, strValue);
    663                 break;
    664             case PS_META_VEC:
    665                 tempVec = parseVector(strValue, elemType, &status);
    666                 if(!status) {
    667                     psMetadataAdd(*md, PS_LIST_TAIL, strName+1, mdType, strComment, tempVec);
    668                 } else {
    669                     status = 0;
    670                     failedLines++;
    671                     psError(PS_ERR_IO, true,
    672                             PS_ERRORTEXT_psMetadataIO_PARSE_FAILED,
    673                             strValue, strName, strType, lineCount, fileName);
    674                     continue;
    675                 }
     668                } // switch
    676669                break;
    677670            default:
    678                 failedLines++;
    679                 psError(PS_ERR_IO, true,
    680                         PS_ERRORTEXT_psMetadataIO_FILE_TYPE_INVALID,
    681                         mdType, lineCount, fileName);
     671                (*nFail)++;
     672                psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FILE_TYPE_INVALID, mdType, lineCount,
     673                        fileName);
    682674                continue;
    683675            } // switch
     
    687679    psFree(line);
    688680
    689     return failedLines;
     681    return md;
    690682}
    691683
     
    753745
    754746    // Add attributes to metadata
    755     psMetadataAdd(md, PS_LIST_TAIL, "htAtts", PS_META_HASH, NULL, htAtts);
     747    psMetadataAdd(md, PS_LIST_TAIL, "htAtts", PS_TYPE_PTR, PS_META_HASH, NULL, htAtts);
    756748
    757749    psFree(psTagName);
     
    765757    psBool tempBool = false;
    766758    psS32 status = 0;
    767     psU64 lineNumber = 0;
     759    psU32 lineNumber = 0;
    768760    psF64 tempDbl = 0.0;
    769761    psS32 tempInt = 0.0;
    770     psElemType elemType;
     762    psElemType pType;
    771763    psMetadataType mdType;
    772764    char *fileName = NULL;
     
    790782    metadataItem = psMetadataLookup(md, "htAtts");
    791783    PS_PTR_CHECK_NULL_GENERAL(metadataItem, return);
    792     PS_PTR_CHECK_NULL_GENERAL(metadataItem->items, return);
    793     psListSetIterator(metadataItem->items, PS_LIST_TAIL);
    794     metadataItem = (psMetadataItem*)psListGetCurrent(metadataItem->items);
    795     htAtts = (psHash*)metadataItem->data.V;
     784    PS_PTR_CHECK_NULL_GENERAL(metadataItem->data.list, return);
     785    psListSetIterator(metadataItem->data.list, PS_LIST_TAIL);
     786    metadataItem = (psMetadataItem*)psListGetCurrent(metadataItem->data.list);
     787    htAtts = (psHash*)metadataItem->data.list;
    796788    PS_PTR_CHECK_NULL_GENERAL(htAtts, return);
    797789    fileName = (char*)input->filename;
     
    811803        if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psString")) {
    812804            mdType = PS_META_STR;
    813             elemType = PS_TYPE_PTR;
     805            pType = PS_TYPE_PTR;
    814806        } else if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psBool")) {
    815             mdType = PS_META_BOOL;
    816             elemType = PS_TYPE_U8;
     807            mdType = PS_META_PRIMITIVE;
     808            pType = PS_TYPE_U8;
    817809        } else if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psS32")) {
    818             mdType = PS_META_S32;
    819             elemType = PS_TYPE_S32;
     810            mdType = PS_META_PRIMITIVE;
     811            pType = PS_TYPE_S32;
    820812        } else if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psF32")) {
    821             mdType = PS_META_F32;
    822             elemType = PS_TYPE_F32;
     813            mdType = PS_META_PRIMITIVE;
     814            pType = PS_TYPE_F32;
    823815        } else if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psF64")) {
    824             mdType = PS_META_F64;
    825             elemType = PS_TYPE_F64;
     816            mdType = PS_META_PRIMITIVE;
     817            pType = PS_TYPE_F64;
    826818        } else {
    827819            psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_TYPE_INVALID_LINE_FILE, strType, lineNumber,
     
    847839        metadataItem = psMetadataLookup(md, strName);
    848840        if(metadataItem != NULL) {
    849             if(metadataItem->type != PS_META_ITEM_SET) {
     841            if(metadataItem->type != PS_META_LIST) {
    850842                if(overwrite) {
    851843                    psMetadataRemove(md, PS_LIST_UNKNOWN, strName);
     
    861853    // Create metadata item and add to metadata
    862854    switch(mdType) {
    863     case PS_META_ITEM_SET:
    864         psMetadataAdd(md, PS_LIST_TAIL, strName, mdType, NULL, NULL);
    865         break;
    866     case PS_META_BOOL:
    867         tempBool = parseBool((char*)strValue, &status);
    868         if(!status) {
    869             psMetadataAdd(md, PS_LIST_TAIL, strName, mdType, NULL, tempBool);
    870         } else {
    871             status = 0;
    872             psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, strType,
    873                     lineNumber, fileName);
    874         }
    875         break;
    876     case PS_META_S32:
    877         tempInt = (psS32)parseValue((char*)strValue, &status);
    878         if(!status) {
    879             psMetadataAdd(md, PS_LIST_TAIL, strName, mdType, NULL, tempInt);
    880         } else {
    881             status = 0;
    882             psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, strType,
    883                     lineNumber, fileName);
    884         }
    885         break;
    886     case PS_META_F32:
    887     case PS_META_F64:
    888         tempDbl = parseValue((char*)strValue, &status);
    889         if(!status) {
    890             psMetadataAdd(md, PS_LIST_TAIL, strName, mdType, NULL, tempDbl);
    891         } else {
    892             status = 0;
    893             psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, strType,
    894                     lineNumber, fileName);
    895         }
     855    case PS_META_LIST:
     856        psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, NULL, NULL);
    896857        break;
    897858    case PS_META_STR:
    898         psMetadataAdd(md, PS_LIST_TAIL, strName, mdType, NULL, strValue);
     859        psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, NULL, strValue);
     860        break;
     861    case PS_META_PRIMITIVE:
     862        switch(pType) {
     863        case PS_TYPE_BOOL:
     864            tempBool = parseBool((char*)strValue, &status);
     865            if(!status) {
     866                psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, NULL, tempBool);
     867            } else {
     868                status = 0;
     869                psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, strType,
     870                        lineNumber, fileName);
     871            }
     872            break;
     873        case PS_TYPE_S32:
     874            tempInt = (psS32)parseValue((char*)strValue, &status);
     875            if(!status) {
     876                psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, NULL, tempInt);
     877            } else {
     878                status = 0;
     879                psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, strType,
     880                        lineNumber, fileName);
     881            }
     882            break;
     883        case PS_TYPE_F32:
     884        case PS_TYPE_F64:
     885            tempDbl = parseValue((char*)strValue, &status);
     886            if(!status) {
     887                psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, NULL, tempDbl);
     888            } else {
     889                status = 0;
     890                psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, strType,
     891                        lineNumber, fileName);
     892            }
     893            break;
     894        default:
     895            psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FILE_TYPE_INVALID, strType, lineNumber, fileName);
     896        } // End switch
    899897        break;
    900898    default:
     
    902900    } // End switch
    903901
     902
    904903    return;
    905904}
     
    910909    bool overwrite = false;
    911910    psS32 status = 0;
    912     psU64 lineNumber = 0;
    913     psElemType elemType;
     911    psU32 lineNumber = 0;
     912    psElemType pType;
    914913    psMetadataType mdType;
    915914    char *strName = NULL;
     
    936935    tables = psMetadataLookup(md, "htAtts");
    937936    PS_PTR_CHECK_NULL_GENERAL(tables, return);
    938     PS_PTR_CHECK_NULL_GENERAL(tables->items, return);
    939     psListSetIterator(tables->items, PS_LIST_TAIL);
    940     table = (psMetadataItem*)psListGetCurrent(tables->items);
    941     htAtts = (psHash*)table->data.V;
     937    PS_PTR_CHECK_NULL_GENERAL(tables->data.list, return);
     938    psListSetIterator(tables->data.list, PS_LIST_TAIL);
     939    table = (psMetadataItem*)psListGetCurrent(tables->data.list);
     940    htAtts = (psHash*)table->data.list;
    942941    PS_PTR_CHECK_NULL_GENERAL(htAtts, return);
    943942    fileName = (char*)input->filename;
     
    957956        if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psString")) {
    958957            mdType = PS_META_STR;
    959             elemType = PS_TYPE_PTR;
     958            pType = PS_TYPE_PTR;
    960959        } else if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psBool")) {
    961             mdType = PS_META_BOOL;
    962             elemType = PS_TYPE_U8;
     960            mdType = PS_META_PRIMITIVE;
     961            pType = PS_TYPE_U8;
    963962        } else if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psS32")) {
    964             mdType = PS_META_S32;
    965             elemType = PS_TYPE_S32;
     963            mdType = PS_META_PRIMITIVE;
     964            pType = PS_TYPE_S32;
    966965        } else if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psF32")) {
    967             mdType = PS_META_F32;
    968             elemType = PS_TYPE_F32;
     966            mdType = PS_META_PRIMITIVE;
     967            pType = PS_TYPE_F32;
    969968        } else if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psF64")) {
    970             mdType = PS_META_F64;
    971             elemType = PS_TYPE_F64;
     969            mdType = PS_META_PRIMITIVE;
     970            pType = PS_TYPE_F64;
    972971        } else {
    973972            psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_TYPE_INVALID_LINE_FILE, strName, lineNumber,
     
    994993        metadataItem = psMetadataLookup(md, strName);
    995994        if(metadataItem != NULL) {
    996             if(metadataItem->type != PS_META_ITEM_SET) {
     995            if(metadataItem->type != PS_META_LIST) {
    997996                if(overwrite) {
    998997                    psMetadataRemove(md, PS_LIST_UNKNOWN, strName);
     
    10071006
    10081007    // Get value
    1009     vec = parseVector((char*)strValue, elemType, &status);
     1008    vec = parseVector((char*)strValue, pType, &status);
    10101009    if(!status) {
    1011         psMetadataAdd(md, PS_LIST_TAIL, strName+1, mdType, NULL, vec);
     1010        psMetadataAdd(md, PS_LIST_TAIL, strName+1, pType, mdType, NULL, vec);
    10121011    } else {
    10131012        psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, strType,
     
    10381037    tables = psMetadataLookup(md, "htAtts");
    10391038    PS_PTR_CHECK_NULL_GENERAL(tables, return);
    1040     PS_PTR_CHECK_NULL_GENERAL(tables->items, return);
    1041     psListSetIterator(tables->items, PS_LIST_TAIL);
    1042     table = (psMetadataItem*)psListGetCurrent(tables->items);
    1043     htAtts = (psHash*)table->data.V;
     1039    PS_PTR_CHECK_NULL_GENERAL(tables->data.list, return);
     1040    psListSetIterator(tables->data.list, PS_LIST_TAIL);
     1041    table = (psMetadataItem*)psListGetCurrent(tables->data.list);
     1042    htAtts = (psHash*)table->data.list;
    10441043    PS_PTR_CHECK_NULL_GENERAL(htAtts, return);
    10451044
     
    10641063
    10651064    // Free temporary metadata item and its hash table
    1066     psListRemove(tables->items, PS_LIST_TAIL, table);
     1065    psListRemove(tables->data.list, PS_LIST_TAIL, table);
    10671066
    10681067    psFree(psEndTagName);
     
    10711070}
    10721071
    1073 psS32 psMetadataParseConfigXml(psMetadata** md, const char *fileName)
     1072psMetadata*  psMetadataParseConfigXml(psMetadata* md, psU32 *nFail, const char *fileName, psBool overwrite)
    10741073{
    10751074    xmlSAXHandler saxHandler;
     
    10771076
    10781077    // Error checks
    1079     PS_PTR_CHECK_NULL(fileName,-1);
     1078    PS_PTR_CHECK_NULL(fileName, NULL);
    10801079
    10811080    // Allocate metadata if necessary
    1082     if (*md == NULL) {
    1083         *md = psMetadataAlloc();
     1081    if (md == NULL) {
     1082        md = psMetadataAlloc();
    10841083    }
    10851084
     
    11131112    saxHandler.externalSubset           = NULL;
    11141113    saxHandler.initialized              = 1;
    1115     saxHandler._private                 = *md;
     1114    saxHandler._private                 = md;
    11161115    saxHandler.startElementNs           = NULL;
    11171116    saxHandler.endElementNs             = NULL;
     
    11211120    if (xmlSAXUserParseFile(&saxHandler, NULL, fileName)) {
    11221121        psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FILE_OPEN_FAILED, fileName);
    1123         return -1;
     1122        return NULL;
    11241123    }
    11251124
  • trunk/psLib/src/xml/psXML.h

    r2529 r2607  
    99*  @author Ross Harman, MHPCC
    1010*
    11 *  @version $Revision: 1.5 $ $Name: not supported by cvs2svn $
    12 *  @date $Date: 2004-11-30 01:24:32 $
     11*  @version $Revision: 1.6 $ $Name: not supported by cvs2svn $
     12*  @date $Date: 2004-12-03 23:14:46 $
    1313*
    1414*  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    5858 *  Loads pre-defined settings by parsing a configuration file into a psMetadata structure.
    5959 *
    60  *  @return psS32 : Number of lines that failed to be read.
     60 *  @return psMetadata* : Resulting metadata from read.
    6161 */
    62 psS32 psMetadataParseConfig(
    63     psMetadata** md,                   ///< Resulting metadata from read.
     62psMetadata* psMetadataParseConfig(
     63    psMetadata* md,                    ///< Resulting metadata from read.
     64    psU32 *nFail,                      ///< Number of failed lines.
    6465    const char *fileName,              ///< Name of file to read.
    6566    psBool overwrite                   ///< Allow overwrite of duplicate specifications.
     
    7071 *  Loads pre-defined XML settings by parsing a configuration file into a psMetadata structure.
    7172 *
    72  *  @return psS32 : Number of lines that failed to be read.
     73 *  @return psMetadata* : Resulting metadata from read.
    7374 */
    74 psS32 psMetadataParseConfigXml(
    75     psMetadata** md,                   ///< Resulting metadata from read.
    76     const char *fileName               ///< Name of file to read.
     75
     76psMetadata*  psMetadataParseConfigXml(
     77    psMetadata* md,                    ///< Resulting metadata from read.
     78    psU32 *nFail,                      ///< Number of failed lines.
     79    const char *fileName,              ///< Name of file to read.
     80    psBool overwrite                   ///< Allow overwrite of duplicate specifications.
    7781);
    7882
  • trunk/psLib/test/astronomy/tst_psMetadataIO.c

    r2392 r2607  
    1313*  @author  Ross Harman, MHPCC
    1414*
    15 *  @version $Revision: 1.4 $  $Name: not supported by cvs2svn $
    16 *  @date  $Date: 2004-11-22 20:53:39 $
     15*  @version $Revision: 1.5 $  $Name: not supported by cvs2svn $
     16*  @date  $Date: 2004-12-03 23:19:07 $
    1717*
    1818*  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    2525
    2626static void printMetadataItem(psMetadataItem *metadataItem, char *spaces);
     27static void printMetadata(psMetadata *metadata);
     28static void printMetadataList(psList *metadataItemList, char* spaces);
     29static void printMetadataTable(psHash *mdTable);
    2730
    28 static void printMetadataItemList(psList *metadataItemList)
     31static void printMetadata(psMetadata *metadata)
     32{
     33    printf("Contents of metadata list:\n");
     34    printMetadataList(metadata->list, " ");
     35    printf("\nContents of metadata table:\n");
     36    printMetadataTable(metadata->table);
     37}
     38
     39static void printMetadataList(psList *metadataItemList, char* spaces)
    2940{
    3041    psMetadataItem *entryChild = NULL;
     
    3344    entryChild = psListGetCurrent(metadataItemList);
    3445    while (entryChild != NULL) {
    35         printMetadataItem(entryChild, "    ");
     46        printMetadataItem(entryChild, spaces);
    3647        entryChild = psListGetNext(metadataItemList);
    37     }
    38 }
    39 
    40 static void printMetadataList(psList *metadataItemList)
    41 {
    42     psMetadataItem *entryChild = NULL;
    43 
    44     psListSetIterator(metadataItemList, PS_LIST_HEAD);
    45     entryChild = psListGetCurrent(metadataItemList);
    46     while (entryChild != NULL) {
    47         printMetadataItem(entryChild, " ");
    48         entryChild = psListGetNext(metadataItemList);
    49     }
    50 }
    51 static void printMetadataItem(psMetadataItem *metadataItem, char *spaces)
    52 {
    53 
    54     psVector *vec = NULL;
    55 
    56 
    57     printf("%sKey Name: %8s  ", spaces, metadataItem->name);
    58     printf("Key Type: %2d  ", metadataItem->type);
    59 
    60     switch (metadataItem->type ) {
    61     case PS_META_ITEM_SET:
    62         printf("Key Value: %17c", ' ');
    63         break;
    64     case PS_META_BOOL:
    65         printf("Key Value: %15d  ", metadataItem->data.B);
    66         break;
    67     case PS_META_S32:
    68         printf("Key Value: %15d  ", metadataItem->data.S32);
    69         break;
    70     case PS_META_F32:
    71         printf("Key Value: %15.3f  ", metadataItem->data.F32);
    72         break;
    73     case PS_META_F64:
    74         printf("Key Value: %15.3f  ", metadataItem->data.F64);
    75         break;
    76     case PS_META_STR:
    77         printf("Key Value: %15s  ", (char*)metadataItem->data.V);
    78         break;
    79     case PS_META_VEC:
    80         vec = (psVector*)metadataItem->data.V;
    81         printf("Key Value: ");
    82         for(psS32 i=0; i<vec->nalloc;i++) {
    83             printf("%d ", vec->data.S32[i]);
    84         }
    85         break;
    86     case PS_META_IMG:
    87     case PS_META_JPEG:
    88     case PS_META_PNG:
    89     case PS_META_ASTROM:
    90     case PS_META_UNKNOWN:
    91         printf("Value: unknown ");
    92         break;
    93     default:
    94         printf("Bad type: %d ", metadataItem->type);
    95     }
    96     printf("Key Comment: %s\n", metadataItem->comment);
    97 
    98     if(metadataItem->items->size) {
    99         printMetadataItemList(metadataItem->items);
    10048    }
    10149}
     
    11462}
    11563
    116 static void printMetadata(psMetadata *metadata)
     64static void printMetadataItem(psMetadataItem *metadataItem, char *spaces)
    11765{
    118     printf("\nContents of metadata list:\n");
    119     printMetadataList(metadata->list);
    120     printf("\nContents of metadata table:\n");
    121     printMetadataTable(metadata->table);
     66    printf("%sKey Name: %8s  ", spaces, metadataItem->name);
     67    printf("Key pType: %d  ", metadataItem->pType);
     68    printf("Key mdType: %d  ", metadataItem->type);
     69
     70    switch (metadataItem->type) {
     71    case PS_META_LIST:
     72        printf("Key Value: %17c", ' ');
     73        break;
     74    case PS_META_PRIMITIVE:
     75        switch(metadataItem->pType) {
     76        case PS_TYPE_BOOL:
     77            printf("Key Value: %15d  ", metadataItem->data.B);
     78            break;
     79        case PS_TYPE_S32:
     80            printf("Key Value: %15d  ", metadataItem->data.S32);
     81            break;
     82        case PS_TYPE_F32:
     83            printf("Key Value: %15.3f  ", metadataItem->data.F32);
     84            break;
     85        case PS_TYPE_F64:
     86            printf("Key Value: %15.3f  ", metadataItem->data.F64);
     87            break;
     88        default:
     89            printf("Bad type: %d ", metadataItem->pType);
     90        }
     91        break;
     92    case PS_META_STR:
     93        printf("Key Value: %15s  ", (char*)metadataItem->data.V);
     94        break;
     95    default:
     96        printf("Bad type: %d ", metadataItem->type);
     97    }
     98    printf("Key Comment: %s\n", metadataItem->comment);
     99
     100    if(metadataItem->data.V && metadataItem->type==PS_META_LIST) {
     101        printMetadataList(metadataItem->data.V, "    ");
     102    }
    122103}
    123104
     
    128109    printPositiveTestHeader(stdout, "psMetadata", "Test A - Read config file with overwrite set true");
    129110    psMetadata *metadata1 = NULL;
    130     psS32 failedLines1 = 0;
    131     failedLines1 = psMetadataParseConfig(&metadata1, "test.config", true);
     111    psU32 failedLines1 = 0;
     112    metadata1 = psMetadataParseConfig(metadata1, &failedLines1, "test.config", true);
    132113    printf("Failed lines: %d Expected: 6\n", failedLines1);
    133114    printMetadata(metadata1);
     
    139120    psMetadata *metadata2 = NULL;
    140121    psS32 failedLines2 = 0;
    141     failedLines2 = psMetadataParseConfig(&metadata2, "test.config", false);
    142     printf("Failed lines: %d Expected: 7", failedLines2);
     122    metadata2 = psMetadataParseConfig(metadata2, &failedLines2, "test.config", false);
     123    printf("Failed lines: %d Expected: 7 ", failedLines2);
    143124    printMetadata(metadata2);
    144125    printFooter(stdout, "psMetadata", "Test B - Read config file with overwrite set false", true);
     
    149130    psMetadata *metadata3 = psMetadataAlloc();
    150131    psS32 failedLines3 = 0;
    151     failedLines3 = psMetadataParseConfig(&metadata3, "test.config", false);
    152     printf("Failed lines: %d Expected: 7", failedLines3);
     132    metadata3 = psMetadataParseConfig(metadata3, &failedLines3, "test.config", true);
     133    printf("Failed lines: %d Expected: 6 ", failedLines3);
    153134    printMetadata(metadata3);
    154135    printFooter(stdout, "psMetadata", "Test C - Read config file without auto-allocation of metadata", true);
     
    158139    printNegativeTestHeader(stdout,"psMetadataIO", "Test D - Attempt to use null fileName argument",
    159140                            "Null failedLines not allowed", 0);
    160     psMetadataParseConfig(&metadata1, NULL, true);
     141    psMetadataParseConfig(metadata1, &failedLines1, NULL, true);
    161142    printFooter(stdout, "psMetadata", "Test D - Attempt to use null fileName argument", true);
    162143
     
    165146    printNegativeTestHeader(stdout,"psMetadataIO", "Test E - Attempt to open nonexistant file",
    166147                            "Error opening file", 0);
    167     psMetadataParseConfig(&metadata1, "abcedfg", true);
     148    psMetadataParseConfig(metadata1, &failedLines1, "abcedfg", true);
    168149    printFooter(stdout, "psMetadata", "Test E - Attempt to open nonexistant file", true);
    169150
  • trunk/psLib/test/astronomy/tst_psMetadata_01.c

    r2392 r2607  
    1313*     Test H - Attempt to use bad extNum
    1414*     Test I - Attempt to use bad extNameTest
    15 *     Test J - Free psMetadataData
     15*     Test J - Read named hdr w/ invalid extnum
     16*     Test K - Free psMetadata
    1617*
    1718*  @author  Ross Harman, MHPCC
    1819*
    19 *  @version $Revision: 1.15 $  $Name: not supported by cvs2svn $
    20 *  @date  $Date: 2004-11-22 20:54:50 $
     20*  @version $Revision: 1.16 $  $Name: not supported by cvs2svn $
     21*  @date  $Date: 2004-12-03 23:19:07 $
    2122*
    2223*  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    2930
    3031static void printMetadataItem(psMetadataItem *metadataItem, char *spaces);
    31 
    32 static void printMetadataItemList(psList *metadataItemList)
     32static void printMetadata(psMetadata *metadata);
     33static void printMetadataList(psList *metadataItemList, char* spaces);
     34static void printMetadataTable(psHash *mdTable);
     35
     36static void printMetadata(psMetadata *metadata)
     37{
     38    printf("Contents of metadata list:\n");
     39    printMetadataList(metadata->list, " ");
     40    printf("\nContents of metadata table:\n");
     41    printMetadataTable(metadata->table);
     42}
     43
     44static void printMetadataList(psList *metadataItemList, char* spaces)
    3345{
    3446    psMetadataItem *entryChild = NULL;
     
    3749    entryChild = psListGetCurrent(metadataItemList);
    3850    while (entryChild != NULL) {
    39         printMetadataItem(entryChild, "    ");
     51        printMetadataItem(entryChild, spaces);
    4052        entryChild = psListGetNext(metadataItemList);
    41     }
    42 }
    43 
    44 static void printMetadataList(psList *metadataItemList)
    45 {
    46     psMetadataItem *entryChild = NULL;
    47 
    48     psListSetIterator(metadataItemList, PS_LIST_HEAD);
    49     entryChild = psListGetCurrent(metadataItemList);
    50     while (entryChild != NULL) {
    51         printMetadataItem(entryChild, " ");
    52         entryChild = psListGetNext(metadataItemList);
    53     }
    54 }
    55 static void printMetadataItem(psMetadataItem *metadataItem, char *spaces)
    56 {
    57     printf("%sKey Name: %8s  ", spaces, metadataItem->name);
    58     printf("Key Type: %2d  ", metadataItem->type);
    59 
    60     switch (metadataItem->type ) {
    61     case PS_META_ITEM_SET:
    62         printf("Key Value: %17c", ' ');
    63         break;
    64     case PS_META_BOOL:
    65         printf("Key Value: %15d  ", metadataItem->data.B);
    66         break;
    67     case PS_META_S32:
    68         printf("Key Value: %15d  ", metadataItem->data.S32);
    69         break;
    70     case PS_META_F32:
    71         printf("Key Value: %15.3f  ", metadataItem->data.F32);
    72         break;
    73     case PS_META_F64:
    74         printf("Key Value: %15.3f  ", metadataItem->data.F64);
    75         break;
    76     case PS_META_STR:
    77         printf("Key Value: %15s  ", (char*)metadataItem->data.V);
    78         break;
    79     case PS_META_IMG:
    80     case PS_META_JPEG:
    81     case PS_META_PNG:
    82     case PS_META_ASTROM:
    83     case PS_META_UNKNOWN:
    84         printf("Value: unknown ");
    85         break;
    86     default:
    87         printf("Bad type: %d ", metadataItem->type);
    88     }
    89     printf("Key Comment: %s\n", metadataItem->comment);
    90 
    91     if(metadataItem->items->size) {
    92         printMetadataItemList(metadataItem->items);
    9353    }
    9454}
     
    10767}
    10868
    109 static void printMetadata(psMetadata *metadata)
    110 {
    111     printf("Contents of metadata list:\n");
    112     printMetadataList(metadata->list);
    113     printf("\nContents of metadata table:\n");
    114     printMetadataTable(metadata->table);
     69static void printMetadataItem(psMetadataItem *metadataItem, char *spaces)
     70{
     71    printf("%sKey Name: %8s  ", spaces, metadataItem->name);
     72    printf("Key pType: %d  ", metadataItem->pType);
     73    printf("Key mdType: %d  ", metadataItem->type);
     74
     75    switch (metadataItem->type) {
     76    case PS_META_LIST:
     77        printf("Key Value: %17c", ' ');
     78        break;
     79    case PS_META_PRIMITIVE:
     80        switch(metadataItem->pType) {
     81        case PS_TYPE_BOOL:
     82            printf("Key Value: %15d  ", metadataItem->data.B);
     83            break;
     84        case PS_TYPE_S32:
     85            printf("Key Value: %15d  ", metadataItem->data.S32);
     86            break;
     87        case PS_TYPE_F32:
     88            printf("Key Value: %15.3f  ", metadataItem->data.F32);
     89            break;
     90        case PS_TYPE_F64:
     91            printf("Key Value: %15.3f  ", metadataItem->data.F64);
     92            break;
     93        default:
     94            printf("Bad type: %d ", metadataItem->pType);
     95        }
     96        break;
     97    case PS_META_STR:
     98        printf("Key Value: %15s  ", (char*)metadataItem->data.V);
     99        break;
     100    default:
     101        printf("Bad type: %d ", metadataItem->type);
     102    }
     103    printf("Key Comment: %s\n", metadataItem->comment);
     104
     105    if(metadataItem->data.V && metadataItem->type==PS_META_LIST) {
     106        printMetadataList(metadataItem->data.V, "    ");
     107    }
    115108}
    116109
     
    244237
    245238
    246     // Test I1 - Attempt to use a valid named extension with invalid extnum
    247     printNegativeTestHeader(stdout, "psMetadata", "Test I1 - Read named hdr w/ invalid extnum",
     239    // Test J - Read named hdr w/ invalid extnum
     240    printNegativeTestHeader(stdout, "psMetadata", "Test J - Read named hdr w/ invalid extnum",
    248241                            "If extName specified, extNum should be -1.", 0);
    249     metadata1 = psMetadataReadHeader(NULL, "MY_DATA_2", 0, "header_2.fits");
     242    metadata1 = psMetadataReadHeader(NULL, NULL, 0, "header_2.fits");
    250243    if (metadata1 != NULL ) {
    251244        psError(PS_ERR_UNKNOWN, true,"psMetadataReadHeader did not return null w/ valid extname, invalid extnum");
    252245        return 12;
    253246    }
    254     printFooter(stdout, "psMetadata", "Test C - Read named hdr from complex FITS file", true);
    255 
    256 
    257     // Test J - Free psMetadata
    258     printPositiveTestHeader(stdout, "psMetadata", "Test J - Free psMetadata");
     247    printFooter(stdout, "psMetadata", "Test J - Read named hdr w/ invalid extnum", true);
     248
     249
     250    // Test K - Free psMetadata
     251    printPositiveTestHeader(stdout, "psMetadata", "Test K - Free psMetadata");
    259252    psFree(metadata1);
    260253    psFree(metadata2);
     
    262255    if(psMemCheckLeaks(0, NULL, stdout,false)) {
    263256        psError(PS_ERR_UNKNOWN,true,"Memory leaks detected.");
    264         return 10;
    265257    }
    266258    psMemCheckCorruption(0);
     
    269261        printf("ERROR: Found %d bad memory blocks\n", nBad);
    270262    }
    271     printFooter(stdout, "psMetadata", "Test J - Free psMetadata", true);
     263    printFooter(stdout, "psMetadata", "Test K - Free psMetadata", true);
    272264
    273265    return 0;
  • trunk/psLib/test/astronomy/tst_psMetadata_02.c

    r2392 r2607  
    1414*  @author  Ross Harman, MHPCC
    1515*
    16 *  @version $Revision: 1.8 $  $Name: not supported by cvs2svn $
    17 *  @date  $Date: 2004-11-22 20:54:50 $
     16*  @version $Revision: 1.9 $  $Name: not supported by cvs2svn $
     17*  @date  $Date: 2004-12-03 23:19:07 $
    1818*
    1919*  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    2525#include <string.h>
    2626
    27 static void printMetadataItem(psMetadataItem *item)
     27static void printMetadataItem(psMetadataItem *metadataItem)
    2828{
    29     printf("Key Name: %8s  ", item->name);
    30     printf("Key Type: %2d  ", item->type);
     29    printf("Key Name: %8s  ", metadataItem->name);
     30    printf("Key pType: %2d  ", metadataItem->pType);
     31    printf("Key mdType: %2d  ", metadataItem->type);
    3132
    32     switch (item->type ) {
    33     case PS_META_BOOL:
    34         printf("Key Value: %15d  ", item->data.B);
     33    switch (metadataItem->type) {
     34    case PS_META_LIST:
     35        printf("Key Value: %17c", ' ');
    3536        break;
    36     case PS_META_S32:
    37         printf("Key Value: %15d  ", item->data.S32);
    38         break;
    39     case PS_META_F32:
    40         printf("Key Value: %15.3f  ", item->data.F32);
    41         break;
    42     case PS_META_F64:
    43         printf("Key Value: %15.3f  ", item->data.F64);
     37    case PS_META_PRIMITIVE:
     38        switch(metadataItem->pType) {
     39        case PS_TYPE_BOOL:
     40            printf("Key Value: %15d  ", metadataItem->data.B);
     41            break;
     42        case PS_TYPE_S32:
     43            printf("Key Value: %15d  ", metadataItem->data.S32);
     44            break;
     45        case PS_TYPE_F32:
     46            printf("Key Value: %15.3f  ", metadataItem->data.F32);
     47            break;
     48        case PS_TYPE_F64:
     49            printf("Key Value: %15.3f  ", metadataItem->data.F64);
     50            break;
     51        default:
     52            printf("Bad type: %d ", metadataItem->pType);
     53        }
    4454        break;
    4555    case PS_META_STR:
    46         printf("Key Value: %15s  ", (char*)item->data.V);
    47         break;
    48     case PS_META_IMG:
    49     case PS_META_JPEG:
    50     case PS_META_PNG:
    51     case PS_META_ASTROM:
    52     case PS_META_UNKNOWN:
    53         printf("Value: unknown ");
     56        printf("Key Value: %15s  ", (char*)metadataItem->data.V);
    5457        break;
    5558    default:
    56         printf("Bad type: %d ", item->type);
     59        printf("Bad type: %d ", metadataItem->type);
    5760    }
    58     printf("Key Comment: %s\n", item->comment);
     61    printf("Key Comment: %s\n", metadataItem->comment);
    5962}
    6063
     
    7376    // Test A - Allocate metadata items
    7477    printPositiveTestHeader(stdout, "psMetadata", "Test A - Allocate metadata items");
    75     item1 = psMetadataItemAlloc("myItem1", PS_META_BOOL, "I am a boolean", true);
    76     item2 = psMetadataItemAlloc("myItem2", PS_META_S32, "I am a signed integer", 111);
    77     item3 = psMetadataItemAlloc("myItem3", PS_META_F32, "I am a single precision floating point", 222.222);
    78     item4 = psMetadataItemAlloc("myItem4", PS_META_F64, "I am a double precision floating point", 333.333);
    79     item5 = psMetadataItemAlloc("myItem5", PS_META_STR, "I am a string", "HELLO WORLD");
     78    item1 = psMetadataItemAlloc("myItem1", PS_TYPE_BOOL, PS_META_PRIMITIVE, "I am a boolean", true);
     79    item2 = psMetadataItemAlloc("myItem2", PS_TYPE_S32, PS_META_PRIMITIVE, "I am a signed integer", 111);
     80    item3 = psMetadataItemAlloc("myItem3", PS_TYPE_F32, PS_META_PRIMITIVE, "I am a single precision floating point", 222.222);
     81    item4 = psMetadataItemAlloc("myItem4", PS_TYPE_F64, PS_META_PRIMITIVE, "I am a double precision floating point", 333.333);
     82    item5 = psMetadataItemAlloc("myItem5", PS_TYPE_PTR, PS_META_STR, "I am a string", "HELLO WORLD");
    8083    printMetadataItem(item1);
    8184    printMetadataItem(item2);
     
    9093                            "Null value for name not allowed", 0);
    9194    psLogMsg(__func__,PS_LOG_INFO,"Following should produce error for null name.");
    92     badItem = psMetadataItemAlloc(NULL, PS_META_STR, "I am a string", "HELLO WORLD");
     95    badItem = psMetadataItemAlloc(NULL, PS_TYPE_PTR, PS_META_STR, "I am a string", "HELLO WORLD");
    9396    if (badItem != NULL) {
    9497        psError(PS_ERR_UNKNOWN, true,"psMetadataItemAlloc did not return null with null name item.");
     
    101104    printNegativeTestHeader(stdout,"psMetadata", "Test C - Attempt to create metadata item with invalid type",
    102105                            "Invalid psMetadataType: 6", 0);
    103     badItem = psMetadataItemAlloc("badItem", PS_META_IMG, "I am bad", "Bad comment");
     106    badItem = psMetadataItemAlloc("badItem", PS_TYPE_PTR, PS_META_NTYPE, "I am bad", "Bad comment");
    104107    printFooter(stdout, "psMetadata", "Test C - Attempt to create metadata item with invalid type", true);
    105108
  • trunk/psLib/test/astronomy/tst_psMetadata_03.c

    r2392 r2607  
    1010*     Test E - Attempt to remove non-existant metadata item by name
    1111*     Test F - Attempt to remove non-existant metadata item by index
    12 *     Test G - Free psMetadata
    13  *
     12*     Test G - Attempt to add item to an invalid metadata structure
     13*     Test H - Attempt to add item to an invalid metadata structure
     14*     Test I - Attempt to add item with a null name
     15*     Test J - Attempt to add item to an invalid metadata structure
     16*     Test K - Free psMetadata
     17*
    1418*  @author  Ross Harman, MHPCC
    1519*
    16 *  @version $Revision: 1.10 $  $Name: not supported by cvs2svn $
    17 *  @date  $Date: 2004-11-22 20:54:50 $
     20*  @version $Revision: 1.11 $  $Name: not supported by cvs2svn $
     21*  @date  $Date: 2004-12-03 23:19:07 $
    1822*
    1923*  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    2529#include <string.h>
    2630
    27 static void printMetadataItem(psMetadataItem *item)
     31static void printMetadataItem(psMetadataItem *metadataItem)
    2832{
    29     printf("Key Name: %8s  ", item->name);
    30     printf("Key Type: %2d  ", item->type);
    31 
    32     switch (item->type ) {
    33     case PS_META_BOOL:
    34         printf("Key Value: %15d  ", item->data.B);
     33    printf("Key Name: %8s  ", metadataItem->name);
     34    printf("Key pType: %2d  ", metadataItem->pType);
     35    printf("Key mdType: %2d  ", metadataItem->type);
     36
     37    switch (metadataItem->type) {
     38    case PS_META_LIST:
     39        printf("Key Value: %17c", ' ');
    3540        break;
    36     case PS_META_S32:
    37         printf("Key Value: %15d  ", item->data.S32);
    38         break;
    39     case PS_META_F32:
    40         printf("Key Value: %15.3f  ", item->data.F32);
    41         break;
    42     case PS_META_F64:
    43         printf("Key Value: %15.3f  ", item->data.F64);
     41    case PS_META_PRIMITIVE:
     42        switch(metadataItem->pType) {
     43        case PS_TYPE_BOOL:
     44            printf("Key Value: %15d  ", metadataItem->data.B);
     45            break;
     46        case PS_TYPE_S32:
     47            printf("Key Value: %15d  ", metadataItem->data.S32);
     48            break;
     49        case PS_TYPE_F32:
     50            printf("Key Value: %15.3f  ", metadataItem->data.F32);
     51            break;
     52        case PS_TYPE_F64:
     53            printf("Key Value: %15.3f  ", metadataItem->data.F64);
     54            break;
     55        default:
     56            printf("Bad type: %d ", metadataItem->pType);
     57        }
    4458        break;
    4559    case PS_META_STR:
    46         printf("Key Value: %15s  ", (char*)item->data.V);
    47         break;
    48     case PS_META_IMG:
    49     case PS_META_JPEG:
    50     case PS_META_PNG:
    51     case PS_META_ASTROM:
    52     case PS_META_UNKNOWN:
    53         printf("Value: unknown ");
     60        printf("Key Value: %15s  ", (char*)metadataItem->data.V);
    5461        break;
    5562    default:
    56         printf("Bad type: %d ", item->type);
    57     }
    58     printf("Key Comment: %s\n", item->comment);
     63        printf("Bad type: %d ", metadataItem->type);
     64    }
     65    printf("Key Comment: %s\n", metadataItem->comment);
    5966}
    6067
     
    7683    printPositiveTestHeader(stdout, "psMetadata", "Test A - Allocate metadata items");
    7784    metadata = psMetadataAlloc();
    78     item1 = psMetadataItemAlloc("myItem1", PS_META_BOOL, "I am a boolean", true);
    79     item2 = psMetadataItemAlloc("myItem2", PS_META_S32, "I am a integer", 55);
    80     item3 = psMetadataItemAlloc("myItem3", PS_META_BOOL, "I am a boolean", false);
    81     item4 = psMetadataItemAlloc("myItem4", PS_META_S32, "I am a integer", 66);
    82     errItem = psMetadataItemAlloc("errItem", PS_META_S32, "I am a integer", 99);
     85    item1 = psMetadataItemAlloc("myItem1", PS_TYPE_BOOL, PS_META_PRIMITIVE, "I am a boolean", true);
     86    item2 = psMetadataItemAlloc("myItem2", PS_TYPE_S32, PS_META_PRIMITIVE, "I am a integer", 55);
     87    item3 = psMetadataItemAlloc("myItem3", PS_TYPE_BOOL, PS_META_PRIMITIVE, "I am a boolean", false);
     88    item4 = psMetadataItemAlloc("myItem4", PS_TYPE_S32, PS_META_PRIMITIVE, "I am a integer", 66);
     89    errItem = psMetadataItemAlloc("errItem", PS_TYPE_S32, PS_META_PRIMITIVE, "I am a integer", 99);
    8390    printMetadataItem(item1);
    8491    printMetadataItem(item2);
     
    9097    // Test B - Remove items from metadata by name
    9198    printPositiveTestHeader(stdout, "psMetadata", "Test B - Remove items from metadata by name");
    92     if( ! psMetadataAddItem(metadata, item1, PS_LIST_HEAD) ) {
     99    if(!psMetadataAddItem(metadata, item1, PS_LIST_HEAD)) {
    93100        psError(PS_ERR_UNKNOWN, true,"psMetadataAddItem did not return true when adding by name.");
    94101        return 10;
    95102    }
    96     if( ! psMetadataAdd(metadata,PS_LIST_HEAD,"myItem2",PS_META_S32,"I am S32 integer",77) ) {
     103    if(!psMetadataAdd(metadata,PS_LIST_HEAD,"myItem2", PS_TYPE_S32, PS_META_PRIMITIVE, "I am S32 integer",77)) {
    97104        psError(PS_ERR_UNKNOWN, true,"psMetadataAddItem did not return true when adding by name.");
    98105        return 11;
    99106    }
    100     if ( ! psMetadataRemove(metadata, 0, "myItem1" ) ) {
     107    if (!psMetadataRemove(metadata, 0, "myItem1")) {
    101108        psError(PS_ERR_UNKNOWN, true,"psMetadataRemove did not return true when removing by name.");
    102109        return 12;
    103110    }
    104     if ( ! psMetadataRemove(metadata, 0, "myItem2" ) ) {
     111    if (!psMetadataRemove(metadata, 0, "myItem2")) {
    105112        psError(PS_ERR_UNKNOWN, true,"psMetadataRemove did not return true when removing by name.");
    106113        return 13;
     
    115122        return 14;
    116123    }
    117     if ( ! psMetadataAdd(metadata,PS_LIST_HEAD,"myItem4",PS_META_S32,"I am S32 integer",88) ) {
     124    if ( ! psMetadataAdd(metadata,PS_LIST_HEAD,"myItem4", PS_TYPE_S32, PS_META_PRIMITIVE, "I am S32 integer",88) ) {
    118125        psError(PS_ERR_UNKNOWN, true,"psMetadataAddItem did not return true when adding by index.");
    119126        return 15;
     
    160167
    161168
    162     // Test H - Attempt to add item to an invalid metadata structure
    163     printNegativeTestHeader(stdout,"psMetadata","Test H - Attempt to add item to metadata w/o hash table",
     169    // Test G - Attempt to add item to an invalid metadata structure
     170    printNegativeTestHeader(stdout,"psMetadata","Test G - Attempt to add item to metadata w/o hash table",
    164171                            "Couldn't add item to invalid metadata structure.",0);
    165172    errMetadata = psMetadataAlloc();
     
    175182    }
    176183    errMetadata->table = mdTable;
    177     printFooter(stdout,"psMetadata","Test H - Attempt to add item to invalid metadata w/o hash table", true);
    178 
    179     // Test J - Attempt to add item to an invalid metadata structure
    180     printNegativeTestHeader(stdout,"psMetadata","Test J - Attempt to add item to metadata w/o link list",
     184    printFooter(stdout,"psMetadata","Test G - Attempt to add item to invalid metadata w/o hash table", true);
     185
     186    // Test H - Attempt to add item to an invalid metadata structure
     187    printNegativeTestHeader(stdout,"psMetadata","Test H - Attempt to add item to metadata w/o link list",
    181188                            "Couldn't add item to invalid metadata structure.",0);
    182189    mdList = errMetadata->list;
     
    191198    }
    192199    errMetadata->list = mdList;
    193     printFooter(stdout,"psMetadata","Test J - Attempt to add item to invalid metadata w/o link list", true);
    194 
    195     // Test K - Attempt to add item with a null name
    196     printNegativeTestHeader(stdout,"psMetadata","Test K - Attempt to add item with null name",
     200    printFooter(stdout,"psMetadata","Test H - Attempt to add item to invalid metadata w/o link list", true);
     201
     202    // Test I - Attempt to add item with a null name
     203    printNegativeTestHeader(stdout,"psMetadata","Test I - Attempt to add item with null name",
    197204                            "Couldn't add item with null name.",0);
    198205    errName = errItem->name;
     
    203210    }
    204211    errItem->name = errName;
    205     printFooter(stdout,"psMetadata","Test K - Attempt to add item with null name", true);
    206 
    207     // Test L - Attempt to add item to an invalid metadata structure
    208     printNegativeTestHeader(stdout,"psMetadata","Test L - Attempt to add item to metadata w/o hash table",
     212    printFooter(stdout,"psMetadata","Test I - Attempt to add item with null name", true);
     213
     214    // Test J - Attempt to add item to an invalid metadata structure
     215    printNegativeTestHeader(stdout,"psMetadata","Test J - Attempt to add item to metadata w/o hash table",
    209216                            "Couldn't add item to invalid metadata structure.",0);
    210217    mdTable = errMetadata->table;
    211218    errMetadata->table = NULL;
    212     if ( psMetadataAdd(errMetadata, PS_LIST_HEAD, "errItem", PS_META_S32,"Integer",22) ) {
     219    if (psMetadataAdd(errMetadata, PS_LIST_HEAD, "errItem", PS_TYPE_S32, PS_META_PRIMITIVE, "Integer",22) ) {
    213220        psError(PS_ERR_UNKNOWN, true,"psMetadataAddItem did not return false w/ invalid metadata struct w/o hash table.");
    214221        return 24;
    215222    }
    216223    errMetadata->table = mdTable;
    217     printFooter(stdout,"psMetadata","Test L - Attempt to add item to invalid metadata w/o hash table", true);
    218 
    219     // Test G - Free psMetadata
    220     printPositiveTestHeader(stdout, "psMetadata", "Test G - Free psMetadata");
     224    printFooter(stdout,"psMetadata","Test J - Attempt to add item to invalid metadata w/o hash table", true);
     225
     226    // Test K - Free psMetadata
     227    printPositiveTestHeader(stdout, "psMetadata", "Test K - Free psMetadata");
    221228    psFree(metadata);
    222229    psFree(item1);
     
    235242        printf("ERROR: Found %d bad memory blocks\n", nBad);
    236243    }
    237     printFooter(stdout, "psMetadata", "Test G - Free psMetadata", true);
     244    printFooter(stdout, "psMetadata", "Test K - Free psMetadata", true);
    238245
    239246
  • trunk/psLib/test/astronomy/tst_psMetadata_04.c

    r2392 r2607  
    1313*     Test G - Attempt to use null metadata
    1414*     Test H - Attempt to get non-existant metadata item
    15 *     Test I - Free psMetadata
    16 *     Test J - Attempt to look up with an invalid metadata object
     15*     Test I - Attempt to look up with an invalid metadata object
     16*     Test J - Attempt get item  with an invalid metadata object
     17*     Test K - Free psMetadata
    1718*
    1819*  @author  Ross Harman, MHPCC
    1920*
    20 *  @version $Revision: 1.8 $  $Name: not supported by cvs2svn $
    21 *  @date  $Date: 2004-11-22 20:54:50 $
     21*  @version $Revision: 1.9 $  $Name: not supported by cvs2svn $
     22*  @date  $Date: 2004-12-03 23:19:07 $
    2223*
    2324*  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    2930#include <string.h>
    3031
    31 static void printMetadataItem(psMetadataItem *item)
     32static void printMetadataItem(psMetadataItem *metadataItem)
    3233{
    33     printf("Key Name: %8s  ", item->name);
    34     printf("Key Type: %2d  ", item->type);
    35 
    36     switch (item->type ) {
    37     case PS_META_BOOL:
    38         printf("Key Value: %15d  ", item->data.B);
     34    printf("Key Name: %8s  ", metadataItem->name);
     35    printf("Key pType: %2d  ", metadataItem->pType);
     36    printf("Key mdType: %2d  ", metadataItem->type);
     37
     38    switch (metadataItem->type) {
     39    case PS_META_LIST:
     40        printf("Key Value: %17c", ' ');
    3941        break;
    40     case PS_META_S32:
    41         printf("Key Value: %15d  ", item->data.S32);
    42         break;
    43     case PS_META_F32:
    44         printf("Key Value: %15.3f  ", item->data.F32);
    45         break;
    46     case PS_META_F64:
    47         printf("Key Value: %15.3f  ", item->data.F64);
     42    case PS_META_PRIMITIVE:
     43        switch(metadataItem->pType) {
     44        case PS_TYPE_BOOL:
     45            printf("Key Value: %15d  ", metadataItem->data.B);
     46            break;
     47        case PS_TYPE_S32:
     48            printf("Key Value: %15d  ", metadataItem->data.S32);
     49            break;
     50        case PS_TYPE_F32:
     51            printf("Key Value: %15.3f  ", metadataItem->data.F32);
     52            break;
     53        case PS_TYPE_F64:
     54            printf("Key Value: %15.3f  ", metadataItem->data.F64);
     55            break;
     56        default:
     57            printf("Bad type: %d ", metadataItem->pType);
     58        }
    4859        break;
    4960    case PS_META_STR:
    50         printf("Key Value: %15s  ", (char*)item->data.V);
    51         break;
    52     case PS_META_IMG:
    53     case PS_META_JPEG:
    54     case PS_META_PNG:
    55     case PS_META_ASTROM:
    56     case PS_META_UNKNOWN:
    57         printf("Value: unknown ");
     61        printf("Key Value: %15s  ", (char*)metadataItem->data.V);
    5862        break;
    5963    default:
    60         printf("Bad type: %d ", item->type);
    61     }
    62     printf("Key Comment: %s\n", item->comment);
     64        printf("Bad type: %d ", metadataItem->type);
     65    }
     66    printf("Key Comment: %s\n", metadataItem->comment);
    6367}
    6468
     
    7579    psList* tmpList = NULL;
    7680
     81
    7782    // Test A - Allocate metadata and items
    7883    printPositiveTestHeader(stdout, "psMetadata", "Test A - Allocate metadata items");
    7984    metadata = psMetadataAlloc();
    80     item1 = psMetadataItemAlloc("myItem1", PS_META_BOOL, "I am a boolean", true);
    81     item2 = psMetadataItemAlloc("myItem2", PS_META_S32, "I am a integer", 55);
    82     item3 = psMetadataItemAlloc("myItem3", PS_META_BOOL, "I am a boolean", false);
    83     item4 = psMetadataItemAlloc("myItem4", PS_META_S32, "I am a integer", 66);
     85    item1 = psMetadataItemAlloc("myItem1", PS_TYPE_BOOL, PS_META_PRIMITIVE, "I am a boolean", true);
     86    item2 = psMetadataItemAlloc("myItem2", PS_TYPE_S32, PS_META_PRIMITIVE, "I am a integer", 55);
     87    item3 = psMetadataItemAlloc("myItem3", PS_TYPE_BOOL, PS_META_PRIMITIVE, "I am a boolean", false);
     88    item4 = psMetadataItemAlloc("myItem4", PS_TYPE_S32, PS_META_PRIMITIVE, "I am a integer", 66);
    8489    printMetadataItem(item1);
    8590    printMetadataItem(item2);
     
    165170    printFooter(stdout, "psMetadata", "Test H - Attempt to get non-existant metadata item", true);
    166171
    167     // Test J - Attempt to look up with an invalid metadata object
    168     printNegativeTestHeader(stdout,"psMetadata","Test J - Attemp to look up with an invalid metadata",
     172    // Test I - Attempt to look up with an invalid metadata object
     173    printNegativeTestHeader(stdout,"psMetadata","Test I - Attemp to look up with an invalid metadata",
    169174                            "Lookup item with invalid metadata object.", 0 );
    170175    tmpTable = metadata->table;
     
    175180    }
    176181    metadata->table = tmpTable;
    177     printFooter(stdout, "psMetadata","Test J - Attempt to lookup an invalid metadata object.",true);
    178 
    179     // Test K - Attempt get item  with an invalid metadata object
    180     printNegativeTestHeader(stdout,"psMetadata","Test K - Attemp to get item with an invalid metadata",
     182    printFooter(stdout, "psMetadata","Test I - Attempt to lookup an invalid metadata object.",true);
     183
     184    // Test J - Attempt get item  with an invalid metadata object
     185    printNegativeTestHeader(stdout,"psMetadata","Test J - Attemp to get item with an invalid metadata",
    181186                            "Get item with invalid metadata object.", 0 );
    182187    tmpList = metadata->list;
     
    187192    }
    188193    metadata->list = tmpList;
    189     printFooter(stdout, "psMetadata","Test K - Attempt to get item with  invalid metadata object.",true);
    190 
    191     // Test I - Free psMetadata
    192     printPositiveTestHeader(stdout, "psMetadata", "Test I - Free psMetadata");
     194    printFooter(stdout, "psMetadata","Test J - Attempt to get item with  invalid metadata object.",true);
     195
     196    // Test K - Free psMetadata
     197    printPositiveTestHeader(stdout, "psMetadata", "Test K - Free psMetadata");
    193198    psFree(metadata);
    194199    psFree(item1);
     
    206211        return 21;
    207212    }
    208     printFooter(stdout, "psMetadata", "Test I - Free psMetadata", true);
     213    printFooter(stdout, "psMetadata", "Test K - Free psMetadata", true);
    209214
    210215
  • trunk/psLib/test/astronomy/tst_psMetadata_05.c

    r2527 r2607  
    2222*  @author  Ross Harman, MHPCC
    2323*
    24 *  @version $Revision: 1.12 $  $Name: not supported by cvs2svn $
    25 *  @date  $Date: 2004-11-30 01:16:43 $
     24*  @version $Revision: 1.13 $  $Name: not supported by cvs2svn $
     25*  @date  $Date: 2004-12-03 23:19:07 $
    2626*
    2727*  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    3333#include <string.h>
    3434
    35 static void printMetadataItem(psMetadataItem *item)
     35static void printMetadataItem(psMetadataItem *metadataItem)
    3636{
    37     printf("Key Name: %8s  ", item->name);
    38     printf("Key Type: %2d  ", item->type);
    39 
    40     switch (item->type ) {
    41     case PS_META_BOOL:
    42         printf("Key Value: %15d  ", item->data.B);
     37    printf("Key Name: %8s  ", metadataItem->name);
     38    printf("Key pType: %2d  ", metadataItem->pType);
     39    printf("Key mdType: %2d  ", metadataItem->type);
     40
     41    switch (metadataItem->type) {
     42    case PS_META_LIST:
     43        printf("Key Value: %17c", ' ');
    4344        break;
    44     case PS_META_S32:
    45         printf("Key Value: %15d  ", item->data.S32);
    46         break;
    47     case PS_META_F32:
    48         printf("Key Value: %15.3f  ", item->data.F32);
    49         break;
    50     case PS_META_F64:
    51         printf("Key Value: %15.3f  ", item->data.F64);
     45    case PS_META_PRIMITIVE:
     46        switch(metadataItem->pType) {
     47        case PS_TYPE_BOOL:
     48            printf("Key Value: %15d  ", metadataItem->data.B);
     49            break;
     50        case PS_TYPE_S32:
     51            printf("Key Value: %15d  ", metadataItem->data.S32);
     52            break;
     53        case PS_TYPE_F32:
     54            printf("Key Value: %15.3f  ", metadataItem->data.F32);
     55            break;
     56        case PS_TYPE_F64:
     57            printf("Key Value: %15.3f  ", metadataItem->data.F64);
     58            break;
     59        default:
     60            printf("Bad type: %d ", metadataItem->pType);
     61        }
    5262        break;
    5363    case PS_META_STR:
    54         printf("Key Value: %15s  ", (char*)item->data.V);
    55         break;
    56     case PS_META_IMG:
    57     case PS_META_JPEG:
    58     case PS_META_PNG:
    59     case PS_META_ASTROM:
    60     case PS_META_UNKNOWN:
    61         printf("Value: unknown ");
     64        printf("Key Value: %15s  ", (char*)metadataItem->data.V);
    6265        break;
    6366    default:
    64         printf("Bad type: %d ", item->type);
    65     }
    66     printf("Key Comment: %s\n", item->comment);
     67        printf("Bad type: %d ", metadataItem->type);
     68    }
     69    printf("Key Comment: %s\n", metadataItem->comment);
    6770}
    6871
     
    7073psS32 main( psS32 argc, char* argv[] )
    7174{
    72     psS64 data;
    73     psF32 fpdata;
    7475    psMetadataItem *item1 = NULL;
    7576    psMetadataItem *item2 = NULL;
     
    8081    psMetadataItem *item7 = NULL;
    8182    psMetadataItem *item8 = NULL;
    82     psMetadataItem *item = NULL;
    8383    psMetadata *metadata = NULL;
    8484    FILE *fd = NULL;
    85     char str[7];
    86     psList* tmpList = NULL;
    8785
    8886    // Test A - Allocate metadata and items
    8987    printPositiveTestHeader(stdout, "psMetadata", "Test A - Allocate metadata items");
    9088    metadata = psMetadataAlloc();
    91     item1 = psMetadataItemAlloc("myItem1", PS_META_BOOL, "I am a boolean", true);
    92     item2 = psMetadataItemAlloc("myItem2", PS_META_S32, "I am a integer", 55);
    93     item3 = psMetadataItemAlloc("myItem3", PS_META_BOOL, "I am a boolean", false);
    94     item4 = psMetadataItemAlloc("myItem4", PS_META_S32, "I am a integer", 66);
    95     item5 = psMetadataItemAlloc("myItem5", PS_META_F32, "I am a float", 3.14);
    96     item6 = psMetadataItemAlloc("myItem6", PS_META_F64, "I am a double", 6.28);
    97     item7 = psMetadataItemAlloc("myItem7", PS_META_STR, "I am a string", "GNIRTS");
    98     item8 = psMetadataItemAlloc("myItem8", PS_META_UNKNOWN, "I am unknown");
     89    item1 = psMetadataItemAlloc("myItem1", PS_TYPE_BOOL, PS_META_PRIMITIVE, "I am a boolean", true);
     90    item2 = psMetadataItemAlloc("myItem2", PS_TYPE_S32, PS_META_PRIMITIVE, "I am a integer", 55);
     91    item3 = psMetadataItemAlloc("myItem3", PS_TYPE_BOOL, PS_META_PRIMITIVE, "I am a boolean", false);
     92    item4 = psMetadataItemAlloc("myItem4", PS_TYPE_S32, PS_META_PRIMITIVE, "I am a integer", 66);
     93    item5 = psMetadataItemAlloc("myItem5", PS_TYPE_F32, PS_META_PRIMITIVE, "I am a float", 3.14);
     94    item6 = psMetadataItemAlloc("myItem6", PS_TYPE_F64, PS_META_PRIMITIVE,"I am a double", 6.28);
     95    item7 = psMetadataItemAlloc("myItem7", PS_TYPE_PTR, PS_META_STR, "I am a string", "GNIRTS");
     96    item8 = psMetadataItemAlloc("myItem8", PS_TYPE_PTR, PS_META_UNKNOWN, "I am unknown");
    9997    printMetadataItem(item1);
    10098    printMetadataItem(item2);
     
    107105    printFooter(stdout, "psMetadata", "Test A - Allocate metadata items", true);
    108106
    109 
    110     // Test B - Set iterator at second index
    111     printPositiveTestHeader(stdout, "psMetadata", "Test B - Set iterator at second index");
    112     if ( !psMetadataSetIterator(metadata, 2)) {
    113         psError(PS_ERR_UNKNOWN,true,"Failed to set iterator");
    114         return 100;
    115     }
    116     printFooter(stdout, "psMetadata", "Test B - Set iterator at second index", true);
    117 
    118 
    119     // Test C - Get next item at index
    120     printPositiveTestHeader(stdout, "psMetadata", "Test C - Get next item at index");
    121     item = psMetadataGetNext(metadata, NULL, 2);
    122     if(item == NULL) {
    123         printf("ERROR: Item should not be null\n");
    124     } else {
    125         printf("Found item named %s\n", item->name);
    126     }
    127     printFooter(stdout, "psMetadata", "Test C - Get next item at index", true);
    128 
    129 
    130     // Test D - Get next item at index and string
    131     printPositiveTestHeader(stdout, "psMetadata", "Test D - Get next item at index and string");
    132     item = psMetadataGetNext(metadata, "myItem1", 1);
    133     if(item == NULL) {
    134         printf("ERROR: Item should not be null\n");
    135     } else {
    136         printf("Found item named %s\n", item->name);
    137     }
    138     printFooter(stdout, "psMetadata", "Test D - Get next item at index and string", true);
    139 
    140 
    141     // Test E - Get previous item at index
    142     printPositiveTestHeader(stdout, "psMetadata", "Test E - Get previous item at index");
    143     item = psMetadataGetPrevious(metadata, NULL, 1);
    144     if(item == NULL) {
    145         printf("ERROR: Item should not be null\n");
    146     } else {
    147         printf("Found item named %s\n", item->name);
    148     }
    149     if( psMetadataGetPrevious(metadata,"myItem3",1) == NULL) {
    150         psError(PS_ERR_UNKNOWN, true,"psMetadataGetPrevious did not return an item from metadata.");
    151         return 45;
    152     }
    153     tmpList = metadata->list;
    154     metadata->list = NULL;
    155     if ( psMetadataGetPrevious(metadata,NULL,1) != NULL) {
    156         psError(PS_ERR_UNKNOWN, true,"psMetadataGetPrevious did not return null for invalid metadata.");
    157         return 50;
    158     }
    159     metadata->list = tmpList;
    160     printFooter(stdout, "psMetadata", "Test E - Get previous item at index", true);
    161 
    162 
     107    /*
     108        // Test B - Set iterator at second index
     109        printPositiveTestHeader(stdout, "psMetadata", "Test B - Set iterator at second index");
     110        if (!psMetadataSetIterator(metadata, 2)) {
     111            psError(PS_ERR_UNKNOWN,true,"Failed to set iterator");
     112            return 100;
     113        }
     114        printFooter(stdout, "psMetadata", "Test B - Set iterator at second index", true);
     115     
     116     
     117        // Test C - Get next item at index
     118        printPositiveTestHeader(stdout, "psMetadata", "Test C - Get next item at index");
     119        item = psMetadataGetNext(metadata, NULL, 2);
     120        if(item == NULL) {
     121            printf("ERROR: Item should not be null\n");
     122        } else {
     123            printf("Found item named %s\n", item->name);
     124        }
     125        printFooter(stdout, "psMetadata", "Test C - Get next item at index", true);
     126     
     127     
     128        // Test D - Get next item at index and string
     129        printPositiveTestHeader(stdout, "psMetadata", "Test D - Get next item at index and string");
     130        item = psMetadataGetNext(metadata, "myItem1", 1);
     131        if(item == NULL) {
     132            printf("ERROR: Item should not be null\n");
     133        } else {
     134            printf("Found item named %s\n", item->name);
     135        }
     136        printFooter(stdout, "psMetadata", "Test D - Get next item at index and string", true);
     137     
     138     
     139        // Test E - Get previous item at index
     140        printPositiveTestHeader(stdout, "psMetadata", "Test E - Get previous item at index");
     141        item = psMetadataGetPrevious(metadata, NULL, 1);
     142        if(item == NULL) {
     143            printf("ERROR: Item should not be null\n");
     144        } else {
     145            printf("Found item named %s\n", item->name);
     146        }
     147        if( psMetadataGetPrevious(metadata,"myItem3",1) == NULL) {
     148            psError(PS_ERR_UNKNOWN, true,"psMetadataGetPrevious did not return an item from metadata.");
     149            return 45;
     150        }
     151        tmpList = metadata->list;
     152        metadata->list = NULL;
     153        if ( psMetadataGetPrevious(metadata,NULL,1) != NULL) {
     154            psError(PS_ERR_UNKNOWN, true,"psMetadataGetPrevious did not return null for invalid metadata.");
     155            return 50;
     156        }
     157        metadata->list = tmpList;
     158        printFooter(stdout, "psMetadata", "Test E - Get previous item at index", true);
     159     
     160    */
    163161    // Test F - Write metadata item to file
    164162    printPositiveTestHeader(stdout, "psMetadata", "Test F - Write metadata item to file");
     
    167165        printf("ERROR: Couldn't open file for writing\n");
    168166    }
    169     psMetadataItemPrint(fd, "S32  = %ld\n", item2);
    170     psMetadataItemPrint(fd, "BOL  = %ld\n", item3);
    171     psMetadataItemPrint(fd, "F32  = %g\n", item5);
    172     psMetadataItemPrint(fd, "F64  = %g\n", item6);
    173     psMetadataItemPrint(fd, "STR  = %s\n", item7);
    174     psMetadataItemPrint(fd, "UNK  = \n", item8);
    175     printFooter(stdout, "psMetadata", "Test F - Write metadata item to file", true);
     167    psMetadataItemPrint(fd, "S32 = %ld\n", item2);
     168    psMetadataItemPrint(fd, "BOL = %ld\n", item3);
     169    psMetadataItemPrint(fd, "F32 = %g\n", item5);
     170    psMetadataItemPrint(fd, "F64 = %g\n", item6);
     171    psMetadataItemPrint(fd, "STR = %s\n", item7);
     172    psMetadataItemPrint(fd, "UNK = \n", item8);
    176173    fclose(fd);
    177174    fd = fopen("./tst_psMetadata05_OUT", "r");
     
    179176        printf("ERROR: Couldn't open file for reading\n");
    180177    }
    181     fscanf(fd, "S64 = %lld\n", &data);
    182     if(data != 55) {
    183         printf("ERROR: Data in file is not as expected. Value: %lld. Should be: 55.\n", data);
    184     }
    185     fscanf(fd, "BOL = %lld\n", &data);
    186     if(data != 0) {
    187         printf("ERROR: Data in file is not as expected. Value: %lld. Should be: 0.\n", data);
    188     }
    189     fscanf(fd, "F32 = %g\n", &fpdata);
    190     if ( (fpdata <= 3.1) || (fpdata >= 3.2) ) {
    191         printf("ERROR: Data in file is not as expected. Value: %g. Should be: 3.14.\n", fpdata);
    192     }
    193     fscanf(fd, "F64 = %g\n", &fpdata);
    194     if ( (fpdata <= 6.2) || ( fpdata >= 6.3) ) {
    195         printf("ERROR: Data in file is not as expected. Value: %g. Should be: 6.28.\n", fpdata);
    196     }
    197     fscanf(fd, "STR = %s\n", str);
    198     if ( strcmp(str,"GNIRTS") != 0 ) {
    199         printf("ERROR: Data is file is not as expected. Value: %s. Should be: GNIRTS.\n", str);
    200     }
     178
     179    char line[256];
     180    char truth1[] = "S32 = 55";
     181    fgets(line, 256, fd);
     182    if(strncmp(line, truth1, 8)) {
     183        printf("ERROR: Data in file is not as expected. Value: %s. Should be: %s\n", line, truth1);
     184    }
     185
     186    char truth2[] = "BOL = 0";
     187    fgets(line, 256, fd);
     188    if(strncmp(line, truth2, 7)) {
     189        printf("ERROR: Data in file is not as expected. Value: %s. Should be: %s\n", line, truth2);
     190    }
     191
     192    char truth3[] = "F32 = 3.14";
     193    fgets(line, 256, fd);
     194    if(strncmp(line, truth3, 10)) {
     195        printf("ERROR: Data in file is not as expected. Value: %s. Should be: %s\n", line, truth3);
     196    }
     197
     198    char truth4[] = "F64 = 6.28";
     199    fgets(line, 256, fd);
     200    if(strncmp(line, truth4, 10)) {
     201        printf("ERROR: Data in file is not as expected. Value: %s. Should be: %s\n", line, truth4);
     202    }
     203
     204    char truth5[] = "STR = GNIRTS";
     205    fgets(line, 256, fd);
     206    if(strncmp(line, truth5, 12)) {
     207        printf("ERROR: Data in file is not as expected. Value: %s. Should be: %s\n", line, truth5);
     208    }
     209
    201210    fclose(fd);
    202 
    203     // Test G - Attempt to use null metadata with setIterator
    204     printNegativeTestHeader(stdout,"psMetadata", "Test G - Attempt to use null metadata with setIterator",
    205                             "Null metadata collection not allowed", 0);
    206     if( psMetadataSetIterator(NULL, 0)) {
    207         psError(PS_ERR_UNKNOWN,true,"Set iterator did not detect invalid parameter.");
    208         return 101;
    209     }
    210     tmpList = metadata->list;
    211     metadata->list = NULL;
    212     if( psMetadataSetIterator(metadata,0)) {
    213         psError(PS_ERR_UNKNOWN,true,"Set iterator did not detect null list.");
    214         return 102;
    215     }
    216     metadata->list = tmpList;
    217     printFooter(stdout, "psMetadata", "Test G - Attempt to use null metadata with setIterator", true);
    218 
    219 
    220     // Test H - Attempt to use null metadata with getNext
    221     printNegativeTestHeader(stdout,"psMetadata", "Test H - Attempt to use null metadata with getNext",
    222                             "Null metadata collection not allowed", 0);
    223     if( psMetadataGetNext(NULL, "myItem2", 0) != NULL ) {
    224         psError(PS_ERR_UNKNOWN, true,"psMetadataGetNext did not return null for null metadata.");
    225         return 40;
    226     }
    227     tmpList = metadata->list;
    228     metadata->list = NULL;
    229     if ( psMetadataGetNext(metadata, "myItem2", 0) != NULL ) {
    230         psError(PS_ERR_UNKNOWN, true,"psMetadataGetNext did not return null for invalid metadata.");
    231         return 41;
    232     }
    233     metadata->list = tmpList;
    234 
    235     printFooter(stdout, "psMetadata", "Test H - Attempt to use null metadata with getNext", true);
    236 
    237 
    238     // Test I - Attempt to use null metadata with getPrevious
    239     printNegativeTestHeader(stdout,"psMetadata", "Test I - Attempt to use null metadata with getPrevious",
    240                             "Null metadata collection not allowed", 0);
    241     psMetadataGetPrevious(NULL, "myItem2", 0);
    242     printFooter(stdout, "psMetadata", "Test I - Attempt to use null metadata with getPrevious", true);
    243 
    244 
     211    printFooter(stdout, "psMetadata", "Test F - Write metadata item to file", true);
     212    /*
     213        // Test G - Attempt to use null metadata with setIterator
     214        printNegativeTestHeader(stdout,"psMetadata", "Test G - Attempt to use null metadata with setIterator",
     215                                "Null metadata collection not allowed", 0);
     216        if( psMetadataSetIterator(NULL, 0)) {
     217            psError(PS_ERR_UNKNOWN,true,"Set iterator did not detect invalid parameter.");
     218            return 101;
     219        }
     220        tmpList = metadata->list;
     221        metadata->list = NULL;
     222        if( psMetadataSetIterator(metadata,0)) {
     223            psError(PS_ERR_UNKNOWN,true,"Set iterator did not detect null list.");
     224            return 102;
     225        }
     226        metadata->list = tmpList;
     227        printFooter(stdout, "psMetadata", "Test G - Attempt to use null metadata with setIterator", true);
     228     
     229     
     230        // Test H - Attempt to use null metadata with getNext
     231        printNegativeTestHeader(stdout,"psMetadata", "Test H - Attempt to use null metadata with getNext",
     232                                "Null metadata collection not allowed", 0);
     233        if( psMetadataGetNext(NULL, "myItem2", 0) != NULL ) {
     234            psError(PS_ERR_UNKNOWN, true,"psMetadataGetNext did not return null for null metadata.");
     235            return 40;
     236        }
     237        tmpList = metadata->list;
     238        metadata->list = NULL;
     239        if ( psMetadataGetNext(metadata, "myItem2", 0) != NULL ) {
     240            psError(PS_ERR_UNKNOWN, true,"psMetadataGetNext did not return null for invalid metadata.");
     241            return 41;
     242        }
     243        metadata->list = tmpList;
     244     
     245        printFooter(stdout, "psMetadata", "Test H - Attempt to use null metadata with getNext", true);
     246     
     247     
     248        // Test I - Attempt to use null metadata with getPrevious
     249        printNegativeTestHeader(stdout,"psMetadata", "Test I - Attempt to use null metadata with getPrevious",
     250                                "Null metadata collection not allowed", 0);
     251        psMetadataGetPrevious(NULL, "myItem2", 0);
     252        printFooter(stdout, "psMetadata", "Test I - Attempt to use null metadata with getPrevious", true);
     253     
     254    */
    245255    // Test J - Attempt to use null file with itemPrint
    246256    printNegativeTestHeader(stdout,"psMetadata", "Test J - Attempt to use null file with itemPrint",
  • trunk/psLib/test/astronomy/tst_psMetadata_06.c

    r2392 r2607  
    1313*  @author  Ross Harman, MHPCC
    1414*
    15 *  @version $Revision: 1.6 $  $Name: not supported by cvs2svn $
    16 *  @date  $Date: 2004-11-22 20:54:50 $
     15*  @version $Revision: 1.7 $  $Name: not supported by cvs2svn $
     16*  @date  $Date: 2004-12-03 23:19:07 $
    1717*
    1818*  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    2424#include <string.h>
    2525
    26 static void printMetadataItem(psMetadataItem *item)
     26static void printMetadataItem(psMetadataItem *metadataItem)
    2727{
    28     printf("Key Name: %8s  ", item->name);
    29     printf("Key Type: %2d  ", item->type);
     28    printf("Key Name: %8s  ", metadataItem->name);
     29    printf("Key pType: %2d  ", metadataItem->pType);
     30    printf("Key mdType: %2d  ", metadataItem->type);
    3031
    31     switch (item->type ) {
    32     case PS_META_BOOL:
    33         printf("Key Value: %15d  ", item->data.B);
     32    switch (metadataItem->type) {
     33    case PS_META_LIST:
     34        printf("Key Value: %17c", ' ');
    3435        break;
    35     case PS_META_S32:
    36         printf("Key Value: %15d  ", item->data.S32);
    37         break;
    38     case PS_META_F32:
    39         printf("Key Value: %15.3f  ", item->data.F32);
    40         break;
    41     case PS_META_F64:
    42         printf("Key Value: %15.3f  ", item->data.F64);
     36    case PS_META_PRIMITIVE:
     37        switch(metadataItem->pType) {
     38        case PS_TYPE_BOOL:
     39            printf("Key Value: %15d  ", metadataItem->data.B);
     40            break;
     41        case PS_TYPE_S32:
     42            printf("Key Value: %15d  ", metadataItem->data.S32);
     43            break;
     44        case PS_TYPE_F32:
     45            printf("Key Value: %15.3f  ", metadataItem->data.F32);
     46            break;
     47        case PS_TYPE_F64:
     48            printf("Key Value: %15.3f  ", metadataItem->data.F64);
     49            break;
     50        default:
     51            printf("Bad type: %d ", metadataItem->pType);
     52        }
    4353        break;
    4454    case PS_META_STR:
    45         printf("Key Value: %15s  ", (char*)item->data.V);
    46         break;
    47     case PS_META_IMG:
    48     case PS_META_JPEG:
    49     case PS_META_PNG:
    50     case PS_META_ASTROM:
    51     case PS_META_UNKNOWN:
    52         printf("Value: unknown ");
     55        printf("Key Value: %15s  ", (char*)metadataItem->data.V);
    5356        break;
    5457    default:
    55         printf("Bad type: %d ", item->type);
     58        printf("Bad type: %d ", metadataItem->type);
    5659    }
    57     printf("Key Comment: %s\n", item->comment);
     60    printf("Key Comment: %s\n", metadataItem->comment);
    5861}
    5962
     
    7174    // Test A - Allocate metadata and items
    7275    printPositiveTestHeader(stdout, "psMetadata", "Test A - Allocate metadata and items");
    73     item1a = psMetadataItemAlloc("myItem1", PS_META_BOOL, "I am a boolean", true);
    74     item1b = psMetadataItemAlloc("myItem1", PS_META_S32, "I am a signed integer", 111);
    75     item1c = psMetadataItemAlloc("myItem1", PS_META_S32, "I am a signed integer", 222);
    76     item2a = psMetadataItemAlloc("myItem2", PS_META_S32, "I am a signed integer", 333);
    77     item2b = psMetadataItemAlloc("myItem2", PS_META_ITEM_SET, "I am a folder node", NULL);
     76    item1a = psMetadataItemAlloc("myItem1", PS_TYPE_BOOL, PS_META_PRIMITIVE, "I am a boolean", true);
     77    item1b = psMetadataItemAlloc("myItem1", PS_TYPE_S32, PS_META_PRIMITIVE, "I am a signed integer", 111);
     78    item1c = psMetadataItemAlloc("myItem1", PS_TYPE_S32, PS_META_PRIMITIVE, "I am a signed integer", 222);
     79    item2a = psMetadataItemAlloc("myItem2", PS_TYPE_S32, PS_META_PRIMITIVE, "I am a signed integer", 333);
     80    item2b = psMetadataItemAlloc("myItem2", PS_TYPE_PTR, PS_META_LIST, "I am a folder node", NULL);
    7881    metadata = psMetadataAlloc();
    7982    printMetadataItem(item1a);
     
    8790    // Test B - Add leaf node on top of existing leaf node
    8891    printPositiveTestHeader(stdout, "psMetadata", "Test B - Add leaf node on top of existing leaf node");
    89     if( ! psMetadataAddItem(metadata, item1a, PS_LIST_HEAD) ) {
     92    if(!psMetadataAddItem(metadata, item1a, PS_LIST_HEAD)) {
    9093        psError(PS_ERR_UNKNOWN, true,"psMetadataAddItem returned false for adding a node top.");
    9194        return 20;
    9295    }
    93     if ( ! psMetadataAddItem(metadata, item1b, PS_LIST_HEAD) ) {
     96    if (!psMetadataAddItem(metadata, item1b, PS_LIST_HEAD)) {
    9497        psError(PS_ERR_UNKNOWN, true,"psMetadataAddItem returned false for adding a node top.");
    9598        return 21;
     
    101104    // Test C - Add leaf node to existing folder node
    102105    printPositiveTestHeader(stdout, "psMetadata", "Test C - Add leaf node to existing folder node");
    103     if ( ! psMetadataAddItem(metadata, item1c, PS_LIST_HEAD) ) {
     106    if (!psMetadataAddItem(metadata, item1c, PS_LIST_HEAD)) {
    104107        psError(PS_ERR_UNKNOWN, true,"psMetadataAddItem return false for adding a not to existing node.");
    105108        return 22;
     
    110113    // Test D - Add folder node on top of existing leaf node
    111114    printPositiveTestHeader(stdout, "psMetadata", "Test D - Add folder node on top of existing leaf node");
    112     if ( ! psMetadataAddItem(metadata, item2a, PS_LIST_HEAD) ) {
     115    if (!psMetadataAddItem(metadata, item2a, PS_LIST_HEAD)) {
    113116        psError(PS_ERR_UNKNOWN, true,"psMetadataAddItem returned false for adding a node to existing leaf node.");
    114117        return 23;
    115118    }
    116     if ( ! psMetadataAddItem(metadata, item2b, PS_LIST_HEAD) ) {
     119    if (!psMetadataAddItem(metadata, item2b, PS_LIST_HEAD)) {
    117120        psError(PS_ERR_UNKNOWN, true,"psMetadataAddItem returned false for adding a nod to existing leaf node.");
    118121        return 24;
  • trunk/psLib/test/collections/tst_psMetadataIO.c

    r2392 r2607  
    1313*  @author  Ross Harman, MHPCC
    1414*
    15 *  @version $Revision: 1.4 $  $Name: not supported by cvs2svn $
    16 *  @date  $Date: 2004-11-22 20:53:39 $
     15*  @version $Revision: 1.5 $  $Name: not supported by cvs2svn $
     16*  @date  $Date: 2004-12-03 23:19:07 $
    1717*
    1818*  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    2525
    2626static void printMetadataItem(psMetadataItem *metadataItem, char *spaces);
     27static void printMetadata(psMetadata *metadata);
     28static void printMetadataList(psList *metadataItemList, char* spaces);
     29static void printMetadataTable(psHash *mdTable);
    2730
    28 static void printMetadataItemList(psList *metadataItemList)
     31static void printMetadata(psMetadata *metadata)
     32{
     33    printf("Contents of metadata list:\n");
     34    printMetadataList(metadata->list, " ");
     35    printf("\nContents of metadata table:\n");
     36    printMetadataTable(metadata->table);
     37}
     38
     39static void printMetadataList(psList *metadataItemList, char* spaces)
    2940{
    3041    psMetadataItem *entryChild = NULL;
     
    3344    entryChild = psListGetCurrent(metadataItemList);
    3445    while (entryChild != NULL) {
    35         printMetadataItem(entryChild, "    ");
     46        printMetadataItem(entryChild, spaces);
    3647        entryChild = psListGetNext(metadataItemList);
    37     }
    38 }
    39 
    40 static void printMetadataList(psList *metadataItemList)
    41 {
    42     psMetadataItem *entryChild = NULL;
    43 
    44     psListSetIterator(metadataItemList, PS_LIST_HEAD);
    45     entryChild = psListGetCurrent(metadataItemList);
    46     while (entryChild != NULL) {
    47         printMetadataItem(entryChild, " ");
    48         entryChild = psListGetNext(metadataItemList);
    49     }
    50 }
    51 static void printMetadataItem(psMetadataItem *metadataItem, char *spaces)
    52 {
    53 
    54     psVector *vec = NULL;
    55 
    56 
    57     printf("%sKey Name: %8s  ", spaces, metadataItem->name);
    58     printf("Key Type: %2d  ", metadataItem->type);
    59 
    60     switch (metadataItem->type ) {
    61     case PS_META_ITEM_SET:
    62         printf("Key Value: %17c", ' ');
    63         break;
    64     case PS_META_BOOL:
    65         printf("Key Value: %15d  ", metadataItem->data.B);
    66         break;
    67     case PS_META_S32:
    68         printf("Key Value: %15d  ", metadataItem->data.S32);
    69         break;
    70     case PS_META_F32:
    71         printf("Key Value: %15.3f  ", metadataItem->data.F32);
    72         break;
    73     case PS_META_F64:
    74         printf("Key Value: %15.3f  ", metadataItem->data.F64);
    75         break;
    76     case PS_META_STR:
    77         printf("Key Value: %15s  ", (char*)metadataItem->data.V);
    78         break;
    79     case PS_META_VEC:
    80         vec = (psVector*)metadataItem->data.V;
    81         printf("Key Value: ");
    82         for(psS32 i=0; i<vec->nalloc;i++) {
    83             printf("%d ", vec->data.S32[i]);
    84         }
    85         break;
    86     case PS_META_IMG:
    87     case PS_META_JPEG:
    88     case PS_META_PNG:
    89     case PS_META_ASTROM:
    90     case PS_META_UNKNOWN:
    91         printf("Value: unknown ");
    92         break;
    93     default:
    94         printf("Bad type: %d ", metadataItem->type);
    95     }
    96     printf("Key Comment: %s\n", metadataItem->comment);
    97 
    98     if(metadataItem->items->size) {
    99         printMetadataItemList(metadataItem->items);
    10048    }
    10149}
     
    11462}
    11563
    116 static void printMetadata(psMetadata *metadata)
     64static void printMetadataItem(psMetadataItem *metadataItem, char *spaces)
    11765{
    118     printf("\nContents of metadata list:\n");
    119     printMetadataList(metadata->list);
    120     printf("\nContents of metadata table:\n");
    121     printMetadataTable(metadata->table);
     66    printf("%sKey Name: %8s  ", spaces, metadataItem->name);
     67    printf("Key pType: %d  ", metadataItem->pType);
     68    printf("Key mdType: %d  ", metadataItem->type);
     69
     70    switch (metadataItem->type) {
     71    case PS_META_LIST:
     72        printf("Key Value: %17c", ' ');
     73        break;
     74    case PS_META_PRIMITIVE:
     75        switch(metadataItem->pType) {
     76        case PS_TYPE_BOOL:
     77            printf("Key Value: %15d  ", metadataItem->data.B);
     78            break;
     79        case PS_TYPE_S32:
     80            printf("Key Value: %15d  ", metadataItem->data.S32);
     81            break;
     82        case PS_TYPE_F32:
     83            printf("Key Value: %15.3f  ", metadataItem->data.F32);
     84            break;
     85        case PS_TYPE_F64:
     86            printf("Key Value: %15.3f  ", metadataItem->data.F64);
     87            break;
     88        default:
     89            printf("Bad type: %d ", metadataItem->pType);
     90        }
     91        break;
     92    case PS_META_STR:
     93        printf("Key Value: %15s  ", (char*)metadataItem->data.V);
     94        break;
     95    default:
     96        printf("Bad type: %d ", metadataItem->type);
     97    }
     98    printf("Key Comment: %s\n", metadataItem->comment);
     99
     100    if(metadataItem->data.V && metadataItem->type==PS_META_LIST) {
     101        printMetadataList(metadataItem->data.V, "    ");
     102    }
    122103}
    123104
     
    128109    printPositiveTestHeader(stdout, "psMetadata", "Test A - Read config file with overwrite set true");
    129110    psMetadata *metadata1 = NULL;
    130     psS32 failedLines1 = 0;
    131     failedLines1 = psMetadataParseConfig(&metadata1, "test.config", true);
     111    psU32 failedLines1 = 0;
     112    metadata1 = psMetadataParseConfig(metadata1, &failedLines1, "test.config", true);
    132113    printf("Failed lines: %d Expected: 6\n", failedLines1);
    133114    printMetadata(metadata1);
     
    139120    psMetadata *metadata2 = NULL;
    140121    psS32 failedLines2 = 0;
    141     failedLines2 = psMetadataParseConfig(&metadata2, "test.config", false);
    142     printf("Failed lines: %d Expected: 7", failedLines2);
     122    metadata2 = psMetadataParseConfig(metadata2, &failedLines2, "test.config", false);
     123    printf("Failed lines: %d Expected: 7 ", failedLines2);
    143124    printMetadata(metadata2);
    144125    printFooter(stdout, "psMetadata", "Test B - Read config file with overwrite set false", true);
     
    149130    psMetadata *metadata3 = psMetadataAlloc();
    150131    psS32 failedLines3 = 0;
    151     failedLines3 = psMetadataParseConfig(&metadata3, "test.config", false);
    152     printf("Failed lines: %d Expected: 7", failedLines3);
     132    metadata3 = psMetadataParseConfig(metadata3, &failedLines3, "test.config", true);
     133    printf("Failed lines: %d Expected: 6 ", failedLines3);
    153134    printMetadata(metadata3);
    154135    printFooter(stdout, "psMetadata", "Test C - Read config file without auto-allocation of metadata", true);
     
    158139    printNegativeTestHeader(stdout,"psMetadataIO", "Test D - Attempt to use null fileName argument",
    159140                            "Null failedLines not allowed", 0);
    160     psMetadataParseConfig(&metadata1, NULL, true);
     141    psMetadataParseConfig(metadata1, &failedLines1, NULL, true);
    161142    printFooter(stdout, "psMetadata", "Test D - Attempt to use null fileName argument", true);
    162143
     
    165146    printNegativeTestHeader(stdout,"psMetadataIO", "Test E - Attempt to open nonexistant file",
    166147                            "Error opening file", 0);
    167     psMetadataParseConfig(&metadata1, "abcedfg", true);
     148    psMetadataParseConfig(metadata1, &failedLines1, "abcedfg", true);
    168149    printFooter(stdout, "psMetadata", "Test E - Attempt to open nonexistant file", true);
    169150
  • trunk/psLib/test/collections/tst_psMetadata_01.c

    r2392 r2607  
    1313*     Test H - Attempt to use bad extNum
    1414*     Test I - Attempt to use bad extNameTest
    15 *     Test J - Free psMetadataData
     15*     Test J - Read named hdr w/ invalid extnum
     16*     Test K - Free psMetadata
    1617*
    1718*  @author  Ross Harman, MHPCC
    1819*
    19 *  @version $Revision: 1.15 $  $Name: not supported by cvs2svn $
    20 *  @date  $Date: 2004-11-22 20:54:50 $
     20*  @version $Revision: 1.16 $  $Name: not supported by cvs2svn $
     21*  @date  $Date: 2004-12-03 23:19:07 $
    2122*
    2223*  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    2930
    3031static void printMetadataItem(psMetadataItem *metadataItem, char *spaces);
    31 
    32 static void printMetadataItemList(psList *metadataItemList)
     32static void printMetadata(psMetadata *metadata);
     33static void printMetadataList(psList *metadataItemList, char* spaces);
     34static void printMetadataTable(psHash *mdTable);
     35
     36static void printMetadata(psMetadata *metadata)
     37{
     38    printf("Contents of metadata list:\n");
     39    printMetadataList(metadata->list, " ");
     40    printf("\nContents of metadata table:\n");
     41    printMetadataTable(metadata->table);
     42}
     43
     44static void printMetadataList(psList *metadataItemList, char* spaces)
    3345{
    3446    psMetadataItem *entryChild = NULL;
     
    3749    entryChild = psListGetCurrent(metadataItemList);
    3850    while (entryChild != NULL) {
    39         printMetadataItem(entryChild, "    ");
     51        printMetadataItem(entryChild, spaces);
    4052        entryChild = psListGetNext(metadataItemList);
    41     }
    42 }
    43 
    44 static void printMetadataList(psList *metadataItemList)
    45 {
    46     psMetadataItem *entryChild = NULL;
    47 
    48     psListSetIterator(metadataItemList, PS_LIST_HEAD);
    49     entryChild = psListGetCurrent(metadataItemList);
    50     while (entryChild != NULL) {
    51         printMetadataItem(entryChild, " ");
    52         entryChild = psListGetNext(metadataItemList);
    53     }
    54 }
    55 static void printMetadataItem(psMetadataItem *metadataItem, char *spaces)
    56 {
    57     printf("%sKey Name: %8s  ", spaces, metadataItem->name);
    58     printf("Key Type: %2d  ", metadataItem->type);
    59 
    60     switch (metadataItem->type ) {
    61     case PS_META_ITEM_SET:
    62         printf("Key Value: %17c", ' ');
    63         break;
    64     case PS_META_BOOL:
    65         printf("Key Value: %15d  ", metadataItem->data.B);
    66         break;
    67     case PS_META_S32:
    68         printf("Key Value: %15d  ", metadataItem->data.S32);
    69         break;
    70     case PS_META_F32:
    71         printf("Key Value: %15.3f  ", metadataItem->data.F32);
    72         break;
    73     case PS_META_F64:
    74         printf("Key Value: %15.3f  ", metadataItem->data.F64);
    75         break;
    76     case PS_META_STR:
    77         printf("Key Value: %15s  ", (char*)metadataItem->data.V);
    78         break;
    79     case PS_META_IMG:
    80     case PS_META_JPEG:
    81     case PS_META_PNG:
    82     case PS_META_ASTROM:
    83     case PS_META_UNKNOWN:
    84         printf("Value: unknown ");
    85         break;
    86     default:
    87         printf("Bad type: %d ", metadataItem->type);
    88     }
    89     printf("Key Comment: %s\n", metadataItem->comment);
    90 
    91     if(metadataItem->items->size) {
    92         printMetadataItemList(metadataItem->items);
    9353    }
    9454}
     
    10767}
    10868
    109 static void printMetadata(psMetadata *metadata)
    110 {
    111     printf("Contents of metadata list:\n");
    112     printMetadataList(metadata->list);
    113     printf("\nContents of metadata table:\n");
    114     printMetadataTable(metadata->table);
     69static void printMetadataItem(psMetadataItem *metadataItem, char *spaces)
     70{
     71    printf("%sKey Name: %8s  ", spaces, metadataItem->name);
     72    printf("Key pType: %d  ", metadataItem->pType);
     73    printf("Key mdType: %d  ", metadataItem->type);
     74
     75    switch (metadataItem->type) {
     76    case PS_META_LIST:
     77        printf("Key Value: %17c", ' ');
     78        break;
     79    case PS_META_PRIMITIVE:
     80        switch(metadataItem->pType) {
     81        case PS_TYPE_BOOL:
     82            printf("Key Value: %15d  ", metadataItem->data.B);
     83            break;
     84        case PS_TYPE_S32:
     85            printf("Key Value: %15d  ", metadataItem->data.S32);
     86            break;
     87        case PS_TYPE_F32:
     88            printf("Key Value: %15.3f  ", metadataItem->data.F32);
     89            break;
     90        case PS_TYPE_F64:
     91            printf("Key Value: %15.3f  ", metadataItem->data.F64);
     92            break;
     93        default:
     94            printf("Bad type: %d ", metadataItem->pType);
     95        }
     96        break;
     97    case PS_META_STR:
     98        printf("Key Value: %15s  ", (char*)metadataItem->data.V);
     99        break;
     100    default:
     101        printf("Bad type: %d ", metadataItem->type);
     102    }
     103    printf("Key Comment: %s\n", metadataItem->comment);
     104
     105    if(metadataItem->data.V && metadataItem->type==PS_META_LIST) {
     106        printMetadataList(metadataItem->data.V, "    ");
     107    }
    115108}
    116109
     
    244237
    245238
    246     // Test I1 - Attempt to use a valid named extension with invalid extnum
    247     printNegativeTestHeader(stdout, "psMetadata", "Test I1 - Read named hdr w/ invalid extnum",
     239    // Test J - Read named hdr w/ invalid extnum
     240    printNegativeTestHeader(stdout, "psMetadata", "Test J - Read named hdr w/ invalid extnum",
    248241                            "If extName specified, extNum should be -1.", 0);
    249     metadata1 = psMetadataReadHeader(NULL, "MY_DATA_2", 0, "header_2.fits");
     242    metadata1 = psMetadataReadHeader(NULL, NULL, 0, "header_2.fits");
    250243    if (metadata1 != NULL ) {
    251244        psError(PS_ERR_UNKNOWN, true,"psMetadataReadHeader did not return null w/ valid extname, invalid extnum");
    252245        return 12;
    253246    }
    254     printFooter(stdout, "psMetadata", "Test C - Read named hdr from complex FITS file", true);
    255 
    256 
    257     // Test J - Free psMetadata
    258     printPositiveTestHeader(stdout, "psMetadata", "Test J - Free psMetadata");
     247    printFooter(stdout, "psMetadata", "Test J - Read named hdr w/ invalid extnum", true);
     248
     249
     250    // Test K - Free psMetadata
     251    printPositiveTestHeader(stdout, "psMetadata", "Test K - Free psMetadata");
    259252    psFree(metadata1);
    260253    psFree(metadata2);
     
    262255    if(psMemCheckLeaks(0, NULL, stdout,false)) {
    263256        psError(PS_ERR_UNKNOWN,true,"Memory leaks detected.");
    264         return 10;
    265257    }
    266258    psMemCheckCorruption(0);
     
    269261        printf("ERROR: Found %d bad memory blocks\n", nBad);
    270262    }
    271     printFooter(stdout, "psMetadata", "Test J - Free psMetadata", true);
     263    printFooter(stdout, "psMetadata", "Test K - Free psMetadata", true);
    272264
    273265    return 0;
  • trunk/psLib/test/collections/tst_psMetadata_02.c

    r2392 r2607  
    1414*  @author  Ross Harman, MHPCC
    1515*
    16 *  @version $Revision: 1.8 $  $Name: not supported by cvs2svn $
    17 *  @date  $Date: 2004-11-22 20:54:50 $
     16*  @version $Revision: 1.9 $  $Name: not supported by cvs2svn $
     17*  @date  $Date: 2004-12-03 23:19:07 $
    1818*
    1919*  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    2525#include <string.h>
    2626
    27 static void printMetadataItem(psMetadataItem *item)
     27static void printMetadataItem(psMetadataItem *metadataItem)
    2828{
    29     printf("Key Name: %8s  ", item->name);
    30     printf("Key Type: %2d  ", item->type);
     29    printf("Key Name: %8s  ", metadataItem->name);
     30    printf("Key pType: %2d  ", metadataItem->pType);
     31    printf("Key mdType: %2d  ", metadataItem->type);
    3132
    32     switch (item->type ) {
    33     case PS_META_BOOL:
    34         printf("Key Value: %15d  ", item->data.B);
     33    switch (metadataItem->type) {
     34    case PS_META_LIST:
     35        printf("Key Value: %17c", ' ');
    3536        break;
    36     case PS_META_S32:
    37         printf("Key Value: %15d  ", item->data.S32);
    38         break;
    39     case PS_META_F32:
    40         printf("Key Value: %15.3f  ", item->data.F32);
    41         break;
    42     case PS_META_F64:
    43         printf("Key Value: %15.3f  ", item->data.F64);
     37    case PS_META_PRIMITIVE:
     38        switch(metadataItem->pType) {
     39        case PS_TYPE_BOOL:
     40            printf("Key Value: %15d  ", metadataItem->data.B);
     41            break;
     42        case PS_TYPE_S32:
     43            printf("Key Value: %15d  ", metadataItem->data.S32);
     44            break;
     45        case PS_TYPE_F32:
     46            printf("Key Value: %15.3f  ", metadataItem->data.F32);
     47            break;
     48        case PS_TYPE_F64:
     49            printf("Key Value: %15.3f  ", metadataItem->data.F64);
     50            break;
     51        default:
     52            printf("Bad type: %d ", metadataItem->pType);
     53        }
    4454        break;
    4555    case PS_META_STR:
    46         printf("Key Value: %15s  ", (char*)item->data.V);
    47         break;
    48     case PS_META_IMG:
    49     case PS_META_JPEG:
    50     case PS_META_PNG:
    51     case PS_META_ASTROM:
    52     case PS_META_UNKNOWN:
    53         printf("Value: unknown ");
     56        printf("Key Value: %15s  ", (char*)metadataItem->data.V);
    5457        break;
    5558    default:
    56         printf("Bad type: %d ", item->type);
     59        printf("Bad type: %d ", metadataItem->type);
    5760    }
    58     printf("Key Comment: %s\n", item->comment);
     61    printf("Key Comment: %s\n", metadataItem->comment);
    5962}
    6063
     
    7376    // Test A - Allocate metadata items
    7477    printPositiveTestHeader(stdout, "psMetadata", "Test A - Allocate metadata items");
    75     item1 = psMetadataItemAlloc("myItem1", PS_META_BOOL, "I am a boolean", true);
    76     item2 = psMetadataItemAlloc("myItem2", PS_META_S32, "I am a signed integer", 111);
    77     item3 = psMetadataItemAlloc("myItem3", PS_META_F32, "I am a single precision floating point", 222.222);
    78     item4 = psMetadataItemAlloc("myItem4", PS_META_F64, "I am a double precision floating point", 333.333);
    79     item5 = psMetadataItemAlloc("myItem5", PS_META_STR, "I am a string", "HELLO WORLD");
     78    item1 = psMetadataItemAlloc("myItem1", PS_TYPE_BOOL, PS_META_PRIMITIVE, "I am a boolean", true);
     79    item2 = psMetadataItemAlloc("myItem2", PS_TYPE_S32, PS_META_PRIMITIVE, "I am a signed integer", 111);
     80    item3 = psMetadataItemAlloc("myItem3", PS_TYPE_F32, PS_META_PRIMITIVE, "I am a single precision floating point", 222.222);
     81    item4 = psMetadataItemAlloc("myItem4", PS_TYPE_F64, PS_META_PRIMITIVE, "I am a double precision floating point", 333.333);
     82    item5 = psMetadataItemAlloc("myItem5", PS_TYPE_PTR, PS_META_STR, "I am a string", "HELLO WORLD");
    8083    printMetadataItem(item1);
    8184    printMetadataItem(item2);
     
    9093                            "Null value for name not allowed", 0);
    9194    psLogMsg(__func__,PS_LOG_INFO,"Following should produce error for null name.");
    92     badItem = psMetadataItemAlloc(NULL, PS_META_STR, "I am a string", "HELLO WORLD");
     95    badItem = psMetadataItemAlloc(NULL, PS_TYPE_PTR, PS_META_STR, "I am a string", "HELLO WORLD");
    9396    if (badItem != NULL) {
    9497        psError(PS_ERR_UNKNOWN, true,"psMetadataItemAlloc did not return null with null name item.");
     
    101104    printNegativeTestHeader(stdout,"psMetadata", "Test C - Attempt to create metadata item with invalid type",
    102105                            "Invalid psMetadataType: 6", 0);
    103     badItem = psMetadataItemAlloc("badItem", PS_META_IMG, "I am bad", "Bad comment");
     106    badItem = psMetadataItemAlloc("badItem", PS_TYPE_PTR, PS_META_NTYPE, "I am bad", "Bad comment");
    104107    printFooter(stdout, "psMetadata", "Test C - Attempt to create metadata item with invalid type", true);
    105108
  • trunk/psLib/test/collections/tst_psMetadata_03.c

    r2392 r2607  
    1010*     Test E - Attempt to remove non-existant metadata item by name
    1111*     Test F - Attempt to remove non-existant metadata item by index
    12 *     Test G - Free psMetadata
    13  *
     12*     Test G - Attempt to add item to an invalid metadata structure
     13*     Test H - Attempt to add item to an invalid metadata structure
     14*     Test I - Attempt to add item with a null name
     15*     Test J - Attempt to add item to an invalid metadata structure
     16*     Test K - Free psMetadata
     17*
    1418*  @author  Ross Harman, MHPCC
    1519*
    16 *  @version $Revision: 1.10 $  $Name: not supported by cvs2svn $
    17 *  @date  $Date: 2004-11-22 20:54:50 $
     20*  @version $Revision: 1.11 $  $Name: not supported by cvs2svn $
     21*  @date  $Date: 2004-12-03 23:19:07 $
    1822*
    1923*  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    2529#include <string.h>
    2630
    27 static void printMetadataItem(psMetadataItem *item)
     31static void printMetadataItem(psMetadataItem *metadataItem)
    2832{
    29     printf("Key Name: %8s  ", item->name);
    30     printf("Key Type: %2d  ", item->type);
    31 
    32     switch (item->type ) {
    33     case PS_META_BOOL:
    34         printf("Key Value: %15d  ", item->data.B);
     33    printf("Key Name: %8s  ", metadataItem->name);
     34    printf("Key pType: %2d  ", metadataItem->pType);
     35    printf("Key mdType: %2d  ", metadataItem->type);
     36
     37    switch (metadataItem->type) {
     38    case PS_META_LIST:
     39        printf("Key Value: %17c", ' ');
    3540        break;
    36     case PS_META_S32:
    37         printf("Key Value: %15d  ", item->data.S32);
    38         break;
    39     case PS_META_F32:
    40         printf("Key Value: %15.3f  ", item->data.F32);
    41         break;
    42     case PS_META_F64:
    43         printf("Key Value: %15.3f  ", item->data.F64);
     41    case PS_META_PRIMITIVE:
     42        switch(metadataItem->pType) {
     43        case PS_TYPE_BOOL:
     44            printf("Key Value: %15d  ", metadataItem->data.B);
     45            break;
     46        case PS_TYPE_S32:
     47            printf("Key Value: %15d  ", metadataItem->data.S32);
     48            break;
     49        case PS_TYPE_F32:
     50            printf("Key Value: %15.3f  ", metadataItem->data.F32);
     51            break;
     52        case PS_TYPE_F64:
     53            printf("Key Value: %15.3f  ", metadataItem->data.F64);
     54            break;
     55        default:
     56            printf("Bad type: %d ", metadataItem->pType);
     57        }
    4458        break;
    4559    case PS_META_STR:
    46         printf("Key Value: %15s  ", (char*)item->data.V);
    47         break;
    48     case PS_META_IMG:
    49     case PS_META_JPEG:
    50     case PS_META_PNG:
    51     case PS_META_ASTROM:
    52     case PS_META_UNKNOWN:
    53         printf("Value: unknown ");
     60        printf("Key Value: %15s  ", (char*)metadataItem->data.V);
    5461        break;
    5562    default:
    56         printf("Bad type: %d ", item->type);
    57     }
    58     printf("Key Comment: %s\n", item->comment);
     63        printf("Bad type: %d ", metadataItem->type);
     64    }
     65    printf("Key Comment: %s\n", metadataItem->comment);
    5966}
    6067
     
    7683    printPositiveTestHeader(stdout, "psMetadata", "Test A - Allocate metadata items");
    7784    metadata = psMetadataAlloc();
    78     item1 = psMetadataItemAlloc("myItem1", PS_META_BOOL, "I am a boolean", true);
    79     item2 = psMetadataItemAlloc("myItem2", PS_META_S32, "I am a integer", 55);
    80     item3 = psMetadataItemAlloc("myItem3", PS_META_BOOL, "I am a boolean", false);
    81     item4 = psMetadataItemAlloc("myItem4", PS_META_S32, "I am a integer", 66);
    82     errItem = psMetadataItemAlloc("errItem", PS_META_S32, "I am a integer", 99);
     85    item1 = psMetadataItemAlloc("myItem1", PS_TYPE_BOOL, PS_META_PRIMITIVE, "I am a boolean", true);
     86    item2 = psMetadataItemAlloc("myItem2", PS_TYPE_S32, PS_META_PRIMITIVE, "I am a integer", 55);
     87    item3 = psMetadataItemAlloc("myItem3", PS_TYPE_BOOL, PS_META_PRIMITIVE, "I am a boolean", false);
     88    item4 = psMetadataItemAlloc("myItem4", PS_TYPE_S32, PS_META_PRIMITIVE, "I am a integer", 66);
     89    errItem = psMetadataItemAlloc("errItem", PS_TYPE_S32, PS_META_PRIMITIVE, "I am a integer", 99);
    8390    printMetadataItem(item1);
    8491    printMetadataItem(item2);
     
    9097    // Test B - Remove items from metadata by name
    9198    printPositiveTestHeader(stdout, "psMetadata", "Test B - Remove items from metadata by name");
    92     if( ! psMetadataAddItem(metadata, item1, PS_LIST_HEAD) ) {
     99    if(!psMetadataAddItem(metadata, item1, PS_LIST_HEAD)) {
    93100        psError(PS_ERR_UNKNOWN, true,"psMetadataAddItem did not return true when adding by name.");
    94101        return 10;
    95102    }
    96     if( ! psMetadataAdd(metadata,PS_LIST_HEAD,"myItem2",PS_META_S32,"I am S32 integer",77) ) {
     103    if(!psMetadataAdd(metadata,PS_LIST_HEAD,"myItem2", PS_TYPE_S32, PS_META_PRIMITIVE, "I am S32 integer",77)) {
    97104        psError(PS_ERR_UNKNOWN, true,"psMetadataAddItem did not return true when adding by name.");
    98105        return 11;
    99106    }
    100     if ( ! psMetadataRemove(metadata, 0, "myItem1" ) ) {
     107    if (!psMetadataRemove(metadata, 0, "myItem1")) {
    101108        psError(PS_ERR_UNKNOWN, true,"psMetadataRemove did not return true when removing by name.");
    102109        return 12;
    103110    }
    104     if ( ! psMetadataRemove(metadata, 0, "myItem2" ) ) {
     111    if (!psMetadataRemove(metadata, 0, "myItem2")) {
    105112        psError(PS_ERR_UNKNOWN, true,"psMetadataRemove did not return true when removing by name.");
    106113        return 13;
     
    115122        return 14;
    116123    }
    117     if ( ! psMetadataAdd(metadata,PS_LIST_HEAD,"myItem4",PS_META_S32,"I am S32 integer",88) ) {
     124    if ( ! psMetadataAdd(metadata,PS_LIST_HEAD,"myItem4", PS_TYPE_S32, PS_META_PRIMITIVE, "I am S32 integer",88) ) {
    118125        psError(PS_ERR_UNKNOWN, true,"psMetadataAddItem did not return true when adding by index.");
    119126        return 15;
     
    160167
    161168
    162     // Test H - Attempt to add item to an invalid metadata structure
    163     printNegativeTestHeader(stdout,"psMetadata","Test H - Attempt to add item to metadata w/o hash table",
     169    // Test G - Attempt to add item to an invalid metadata structure
     170    printNegativeTestHeader(stdout,"psMetadata","Test G - Attempt to add item to metadata w/o hash table",
    164171                            "Couldn't add item to invalid metadata structure.",0);
    165172    errMetadata = psMetadataAlloc();
     
    175182    }
    176183    errMetadata->table = mdTable;
    177     printFooter(stdout,"psMetadata","Test H - Attempt to add item to invalid metadata w/o hash table", true);
    178 
    179     // Test J - Attempt to add item to an invalid metadata structure
    180     printNegativeTestHeader(stdout,"psMetadata","Test J - Attempt to add item to metadata w/o link list",
     184    printFooter(stdout,"psMetadata","Test G - Attempt to add item to invalid metadata w/o hash table", true);
     185
     186    // Test H - Attempt to add item to an invalid metadata structure
     187    printNegativeTestHeader(stdout,"psMetadata","Test H - Attempt to add item to metadata w/o link list",
    181188                            "Couldn't add item to invalid metadata structure.",0);
    182189    mdList = errMetadata->list;
     
    191198    }
    192199    errMetadata->list = mdList;
    193     printFooter(stdout,"psMetadata","Test J - Attempt to add item to invalid metadata w/o link list", true);
    194 
    195     // Test K - Attempt to add item with a null name
    196     printNegativeTestHeader(stdout,"psMetadata","Test K - Attempt to add item with null name",
     200    printFooter(stdout,"psMetadata","Test H - Attempt to add item to invalid metadata w/o link list", true);
     201
     202    // Test I - Attempt to add item with a null name
     203    printNegativeTestHeader(stdout,"psMetadata","Test I - Attempt to add item with null name",
    197204                            "Couldn't add item with null name.",0);
    198205    errName = errItem->name;
     
    203210    }
    204211    errItem->name = errName;
    205     printFooter(stdout,"psMetadata","Test K - Attempt to add item with null name", true);
    206 
    207     // Test L - Attempt to add item to an invalid metadata structure
    208     printNegativeTestHeader(stdout,"psMetadata","Test L - Attempt to add item to metadata w/o hash table",
     212    printFooter(stdout,"psMetadata","Test I - Attempt to add item with null name", true);
     213
     214    // Test J - Attempt to add item to an invalid metadata structure
     215    printNegativeTestHeader(stdout,"psMetadata","Test J - Attempt to add item to metadata w/o hash table",
    209216                            "Couldn't add item to invalid metadata structure.",0);
    210217    mdTable = errMetadata->table;
    211218    errMetadata->table = NULL;
    212     if ( psMetadataAdd(errMetadata, PS_LIST_HEAD, "errItem", PS_META_S32,"Integer",22) ) {
     219    if (psMetadataAdd(errMetadata, PS_LIST_HEAD, "errItem", PS_TYPE_S32, PS_META_PRIMITIVE, "Integer",22) ) {
    213220        psError(PS_ERR_UNKNOWN, true,"psMetadataAddItem did not return false w/ invalid metadata struct w/o hash table.");
    214221        return 24;
    215222    }
    216223    errMetadata->table = mdTable;
    217     printFooter(stdout,"psMetadata","Test L - Attempt to add item to invalid metadata w/o hash table", true);
    218 
    219     // Test G - Free psMetadata
    220     printPositiveTestHeader(stdout, "psMetadata", "Test G - Free psMetadata");
     224    printFooter(stdout,"psMetadata","Test J - Attempt to add item to invalid metadata w/o hash table", true);
     225
     226    // Test K - Free psMetadata
     227    printPositiveTestHeader(stdout, "psMetadata", "Test K - Free psMetadata");
    221228    psFree(metadata);
    222229    psFree(item1);
     
    235242        printf("ERROR: Found %d bad memory blocks\n", nBad);
    236243    }
    237     printFooter(stdout, "psMetadata", "Test G - Free psMetadata", true);
     244    printFooter(stdout, "psMetadata", "Test K - Free psMetadata", true);
    238245
    239246
  • trunk/psLib/test/collections/tst_psMetadata_04.c

    r2392 r2607  
    1313*     Test G - Attempt to use null metadata
    1414*     Test H - Attempt to get non-existant metadata item
    15 *     Test I - Free psMetadata
    16 *     Test J - Attempt to look up with an invalid metadata object
     15*     Test I - Attempt to look up with an invalid metadata object
     16*     Test J - Attempt get item  with an invalid metadata object
     17*     Test K - Free psMetadata
    1718*
    1819*  @author  Ross Harman, MHPCC
    1920*
    20 *  @version $Revision: 1.8 $  $Name: not supported by cvs2svn $
    21 *  @date  $Date: 2004-11-22 20:54:50 $
     21*  @version $Revision: 1.9 $  $Name: not supported by cvs2svn $
     22*  @date  $Date: 2004-12-03 23:19:07 $
    2223*
    2324*  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    2930#include <string.h>
    3031
    31 static void printMetadataItem(psMetadataItem *item)
     32static void printMetadataItem(psMetadataItem *metadataItem)
    3233{
    33     printf("Key Name: %8s  ", item->name);
    34     printf("Key Type: %2d  ", item->type);
    35 
    36     switch (item->type ) {
    37     case PS_META_BOOL:
    38         printf("Key Value: %15d  ", item->data.B);
     34    printf("Key Name: %8s  ", metadataItem->name);
     35    printf("Key pType: %2d  ", metadataItem->pType);
     36    printf("Key mdType: %2d  ", metadataItem->type);
     37
     38    switch (metadataItem->type) {
     39    case PS_META_LIST:
     40        printf("Key Value: %17c", ' ');
    3941        break;
    40     case PS_META_S32:
    41         printf("Key Value: %15d  ", item->data.S32);
    42         break;
    43     case PS_META_F32:
    44         printf("Key Value: %15.3f  ", item->data.F32);
    45         break;
    46     case PS_META_F64:
    47         printf("Key Value: %15.3f  ", item->data.F64);
     42    case PS_META_PRIMITIVE:
     43        switch(metadataItem->pType) {
     44        case PS_TYPE_BOOL:
     45            printf("Key Value: %15d  ", metadataItem->data.B);
     46            break;
     47        case PS_TYPE_S32:
     48            printf("Key Value: %15d  ", metadataItem->data.S32);
     49            break;
     50        case PS_TYPE_F32:
     51            printf("Key Value: %15.3f  ", metadataItem->data.F32);
     52            break;
     53        case PS_TYPE_F64:
     54            printf("Key Value: %15.3f  ", metadataItem->data.F64);
     55            break;
     56        default:
     57            printf("Bad type: %d ", metadataItem->pType);
     58        }
    4859        break;
    4960    case PS_META_STR:
    50         printf("Key Value: %15s  ", (char*)item->data.V);
    51         break;
    52     case PS_META_IMG:
    53     case PS_META_JPEG:
    54     case PS_META_PNG:
    55     case PS_META_ASTROM:
    56     case PS_META_UNKNOWN:
    57         printf("Value: unknown ");
     61        printf("Key Value: %15s  ", (char*)metadataItem->data.V);
    5862        break;
    5963    default:
    60         printf("Bad type: %d ", item->type);
    61     }
    62     printf("Key Comment: %s\n", item->comment);
     64        printf("Bad type: %d ", metadataItem->type);
     65    }
     66    printf("Key Comment: %s\n", metadataItem->comment);
    6367}
    6468
     
    7579    psList* tmpList = NULL;
    7680
     81
    7782    // Test A - Allocate metadata and items
    7883    printPositiveTestHeader(stdout, "psMetadata", "Test A - Allocate metadata items");
    7984    metadata = psMetadataAlloc();
    80     item1 = psMetadataItemAlloc("myItem1", PS_META_BOOL, "I am a boolean", true);
    81     item2 = psMetadataItemAlloc("myItem2", PS_META_S32, "I am a integer", 55);
    82     item3 = psMetadataItemAlloc("myItem3", PS_META_BOOL, "I am a boolean", false);
    83     item4 = psMetadataItemAlloc("myItem4", PS_META_S32, "I am a integer", 66);
     85    item1 = psMetadataItemAlloc("myItem1", PS_TYPE_BOOL, PS_META_PRIMITIVE, "I am a boolean", true);
     86    item2 = psMetadataItemAlloc("myItem2", PS_TYPE_S32, PS_META_PRIMITIVE, "I am a integer", 55);
     87    item3 = psMetadataItemAlloc("myItem3", PS_TYPE_BOOL, PS_META_PRIMITIVE, "I am a boolean", false);
     88    item4 = psMetadataItemAlloc("myItem4", PS_TYPE_S32, PS_META_PRIMITIVE, "I am a integer", 66);
    8489    printMetadataItem(item1);
    8590    printMetadataItem(item2);
     
    165170    printFooter(stdout, "psMetadata", "Test H - Attempt to get non-existant metadata item", true);
    166171
    167     // Test J - Attempt to look up with an invalid metadata object
    168     printNegativeTestHeader(stdout,"psMetadata","Test J - Attemp to look up with an invalid metadata",
     172    // Test I - Attempt to look up with an invalid metadata object
     173    printNegativeTestHeader(stdout,"psMetadata","Test I - Attemp to look up with an invalid metadata",
    169174                            "Lookup item with invalid metadata object.", 0 );
    170175    tmpTable = metadata->table;
     
    175180    }
    176181    metadata->table = tmpTable;
    177     printFooter(stdout, "psMetadata","Test J - Attempt to lookup an invalid metadata object.",true);
    178 
    179     // Test K - Attempt get item  with an invalid metadata object
    180     printNegativeTestHeader(stdout,"psMetadata","Test K - Attemp to get item with an invalid metadata",
     182    printFooter(stdout, "psMetadata","Test I - Attempt to lookup an invalid metadata object.",true);
     183
     184    // Test J - Attempt get item  with an invalid metadata object
     185    printNegativeTestHeader(stdout,"psMetadata","Test J - Attemp to get item with an invalid metadata",
    181186                            "Get item with invalid metadata object.", 0 );
    182187    tmpList = metadata->list;
     
    187192    }
    188193    metadata->list = tmpList;
    189     printFooter(stdout, "psMetadata","Test K - Attempt to get item with  invalid metadata object.",true);
    190 
    191     // Test I - Free psMetadata
    192     printPositiveTestHeader(stdout, "psMetadata", "Test I - Free psMetadata");
     194    printFooter(stdout, "psMetadata","Test J - Attempt to get item with  invalid metadata object.",true);
     195
     196    // Test K - Free psMetadata
     197    printPositiveTestHeader(stdout, "psMetadata", "Test K - Free psMetadata");
    193198    psFree(metadata);
    194199    psFree(item1);
     
    206211        return 21;
    207212    }
    208     printFooter(stdout, "psMetadata", "Test I - Free psMetadata", true);
     213    printFooter(stdout, "psMetadata", "Test K - Free psMetadata", true);
    209214
    210215
  • trunk/psLib/test/collections/tst_psMetadata_05.c

    r2527 r2607  
    2222*  @author  Ross Harman, MHPCC
    2323*
    24 *  @version $Revision: 1.12 $  $Name: not supported by cvs2svn $
    25 *  @date  $Date: 2004-11-30 01:16:43 $
     24*  @version $Revision: 1.13 $  $Name: not supported by cvs2svn $
     25*  @date  $Date: 2004-12-03 23:19:07 $
    2626*
    2727*  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    3333#include <string.h>
    3434
    35 static void printMetadataItem(psMetadataItem *item)
     35static void printMetadataItem(psMetadataItem *metadataItem)
    3636{
    37     printf("Key Name: %8s  ", item->name);
    38     printf("Key Type: %2d  ", item->type);
    39 
    40     switch (item->type ) {
    41     case PS_META_BOOL:
    42         printf("Key Value: %15d  ", item->data.B);
     37    printf("Key Name: %8s  ", metadataItem->name);
     38    printf("Key pType: %2d  ", metadataItem->pType);
     39    printf("Key mdType: %2d  ", metadataItem->type);
     40
     41    switch (metadataItem->type) {
     42    case PS_META_LIST:
     43        printf("Key Value: %17c", ' ');
    4344        break;
    44     case PS_META_S32:
    45         printf("Key Value: %15d  ", item->data.S32);
    46         break;
    47     case PS_META_F32:
    48         printf("Key Value: %15.3f  ", item->data.F32);
    49         break;
    50     case PS_META_F64:
    51         printf("Key Value: %15.3f  ", item->data.F64);
     45    case PS_META_PRIMITIVE:
     46        switch(metadataItem->pType) {
     47        case PS_TYPE_BOOL:
     48            printf("Key Value: %15d  ", metadataItem->data.B);
     49            break;
     50        case PS_TYPE_S32:
     51            printf("Key Value: %15d  ", metadataItem->data.S32);
     52            break;
     53        case PS_TYPE_F32:
     54            printf("Key Value: %15.3f  ", metadataItem->data.F32);
     55            break;
     56        case PS_TYPE_F64:
     57            printf("Key Value: %15.3f  ", metadataItem->data.F64);
     58            break;
     59        default:
     60            printf("Bad type: %d ", metadataItem->pType);
     61        }
    5262        break;
    5363    case PS_META_STR:
    54         printf("Key Value: %15s  ", (char*)item->data.V);
    55         break;
    56     case PS_META_IMG:
    57     case PS_META_JPEG:
    58     case PS_META_PNG:
    59     case PS_META_ASTROM:
    60     case PS_META_UNKNOWN:
    61         printf("Value: unknown ");
     64        printf("Key Value: %15s  ", (char*)metadataItem->data.V);
    6265        break;
    6366    default:
    64         printf("Bad type: %d ", item->type);
    65     }
    66     printf("Key Comment: %s\n", item->comment);
     67        printf("Bad type: %d ", metadataItem->type);
     68    }
     69    printf("Key Comment: %s\n", metadataItem->comment);
    6770}
    6871
     
    7073psS32 main( psS32 argc, char* argv[] )
    7174{
    72     psS64 data;
    73     psF32 fpdata;
    7475    psMetadataItem *item1 = NULL;
    7576    psMetadataItem *item2 = NULL;
     
    8081    psMetadataItem *item7 = NULL;
    8182    psMetadataItem *item8 = NULL;
    82     psMetadataItem *item = NULL;
    8383    psMetadata *metadata = NULL;
    8484    FILE *fd = NULL;
    85     char str[7];
    86     psList* tmpList = NULL;
    8785
    8886    // Test A - Allocate metadata and items
    8987    printPositiveTestHeader(stdout, "psMetadata", "Test A - Allocate metadata items");
    9088    metadata = psMetadataAlloc();
    91     item1 = psMetadataItemAlloc("myItem1", PS_META_BOOL, "I am a boolean", true);
    92     item2 = psMetadataItemAlloc("myItem2", PS_META_S32, "I am a integer", 55);
    93     item3 = psMetadataItemAlloc("myItem3", PS_META_BOOL, "I am a boolean", false);
    94     item4 = psMetadataItemAlloc("myItem4", PS_META_S32, "I am a integer", 66);
    95     item5 = psMetadataItemAlloc("myItem5", PS_META_F32, "I am a float", 3.14);
    96     item6 = psMetadataItemAlloc("myItem6", PS_META_F64, "I am a double", 6.28);
    97     item7 = psMetadataItemAlloc("myItem7", PS_META_STR, "I am a string", "GNIRTS");
    98     item8 = psMetadataItemAlloc("myItem8", PS_META_UNKNOWN, "I am unknown");
     89    item1 = psMetadataItemAlloc("myItem1", PS_TYPE_BOOL, PS_META_PRIMITIVE, "I am a boolean", true);
     90    item2 = psMetadataItemAlloc("myItem2", PS_TYPE_S32, PS_META_PRIMITIVE, "I am a integer", 55);
     91    item3 = psMetadataItemAlloc("myItem3", PS_TYPE_BOOL, PS_META_PRIMITIVE, "I am a boolean", false);
     92    item4 = psMetadataItemAlloc("myItem4", PS_TYPE_S32, PS_META_PRIMITIVE, "I am a integer", 66);
     93    item5 = psMetadataItemAlloc("myItem5", PS_TYPE_F32, PS_META_PRIMITIVE, "I am a float", 3.14);
     94    item6 = psMetadataItemAlloc("myItem6", PS_TYPE_F64, PS_META_PRIMITIVE,"I am a double", 6.28);
     95    item7 = psMetadataItemAlloc("myItem7", PS_TYPE_PTR, PS_META_STR, "I am a string", "GNIRTS");
     96    item8 = psMetadataItemAlloc("myItem8", PS_TYPE_PTR, PS_META_UNKNOWN, "I am unknown");
    9997    printMetadataItem(item1);
    10098    printMetadataItem(item2);
     
    107105    printFooter(stdout, "psMetadata", "Test A - Allocate metadata items", true);
    108106
    109 
    110     // Test B - Set iterator at second index
    111     printPositiveTestHeader(stdout, "psMetadata", "Test B - Set iterator at second index");
    112     if ( !psMetadataSetIterator(metadata, 2)) {
    113         psError(PS_ERR_UNKNOWN,true,"Failed to set iterator");
    114         return 100;
    115     }
    116     printFooter(stdout, "psMetadata", "Test B - Set iterator at second index", true);
    117 
    118 
    119     // Test C - Get next item at index
    120     printPositiveTestHeader(stdout, "psMetadata", "Test C - Get next item at index");
    121     item = psMetadataGetNext(metadata, NULL, 2);
    122     if(item == NULL) {
    123         printf("ERROR: Item should not be null\n");
    124     } else {
    125         printf("Found item named %s\n", item->name);
    126     }
    127     printFooter(stdout, "psMetadata", "Test C - Get next item at index", true);
    128 
    129 
    130     // Test D - Get next item at index and string
    131     printPositiveTestHeader(stdout, "psMetadata", "Test D - Get next item at index and string");
    132     item = psMetadataGetNext(metadata, "myItem1", 1);
    133     if(item == NULL) {
    134         printf("ERROR: Item should not be null\n");
    135     } else {
    136         printf("Found item named %s\n", item->name);
    137     }
    138     printFooter(stdout, "psMetadata", "Test D - Get next item at index and string", true);
    139 
    140 
    141     // Test E - Get previous item at index
    142     printPositiveTestHeader(stdout, "psMetadata", "Test E - Get previous item at index");
    143     item = psMetadataGetPrevious(metadata, NULL, 1);
    144     if(item == NULL) {
    145         printf("ERROR: Item should not be null\n");
    146     } else {
    147         printf("Found item named %s\n", item->name);
    148     }
    149     if( psMetadataGetPrevious(metadata,"myItem3",1) == NULL) {
    150         psError(PS_ERR_UNKNOWN, true,"psMetadataGetPrevious did not return an item from metadata.");
    151         return 45;
    152     }
    153     tmpList = metadata->list;
    154     metadata->list = NULL;
    155     if ( psMetadataGetPrevious(metadata,NULL,1) != NULL) {
    156         psError(PS_ERR_UNKNOWN, true,"psMetadataGetPrevious did not return null for invalid metadata.");
    157         return 50;
    158     }
    159     metadata->list = tmpList;
    160     printFooter(stdout, "psMetadata", "Test E - Get previous item at index", true);
    161 
    162 
     107    /*
     108        // Test B - Set iterator at second index
     109        printPositiveTestHeader(stdout, "psMetadata", "Test B - Set iterator at second index");
     110        if (!psMetadataSetIterator(metadata, 2)) {
     111            psError(PS_ERR_UNKNOWN,true,"Failed to set iterator");
     112            return 100;
     113        }
     114        printFooter(stdout, "psMetadata", "Test B - Set iterator at second index", true);
     115     
     116     
     117        // Test C - Get next item at index
     118        printPositiveTestHeader(stdout, "psMetadata", "Test C - Get next item at index");
     119        item = psMetadataGetNext(metadata, NULL, 2);
     120        if(item == NULL) {
     121            printf("ERROR: Item should not be null\n");
     122        } else {
     123            printf("Found item named %s\n", item->name);
     124        }
     125        printFooter(stdout, "psMetadata", "Test C - Get next item at index", true);
     126     
     127     
     128        // Test D - Get next item at index and string
     129        printPositiveTestHeader(stdout, "psMetadata", "Test D - Get next item at index and string");
     130        item = psMetadataGetNext(metadata, "myItem1", 1);
     131        if(item == NULL) {
     132            printf("ERROR: Item should not be null\n");
     133        } else {
     134            printf("Found item named %s\n", item->name);
     135        }
     136        printFooter(stdout, "psMetadata", "Test D - Get next item at index and string", true);
     137     
     138     
     139        // Test E - Get previous item at index
     140        printPositiveTestHeader(stdout, "psMetadata", "Test E - Get previous item at index");
     141        item = psMetadataGetPrevious(metadata, NULL, 1);
     142        if(item == NULL) {
     143            printf("ERROR: Item should not be null\n");
     144        } else {
     145            printf("Found item named %s\n", item->name);
     146        }
     147        if( psMetadataGetPrevious(metadata,"myItem3",1) == NULL) {
     148            psError(PS_ERR_UNKNOWN, true,"psMetadataGetPrevious did not return an item from metadata.");
     149            return 45;
     150        }
     151        tmpList = metadata->list;
     152        metadata->list = NULL;
     153        if ( psMetadataGetPrevious(metadata,NULL,1) != NULL) {
     154            psError(PS_ERR_UNKNOWN, true,"psMetadataGetPrevious did not return null for invalid metadata.");
     155            return 50;
     156        }
     157        metadata->list = tmpList;
     158        printFooter(stdout, "psMetadata", "Test E - Get previous item at index", true);
     159     
     160    */
    163161    // Test F - Write metadata item to file
    164162    printPositiveTestHeader(stdout, "psMetadata", "Test F - Write metadata item to file");
     
    167165        printf("ERROR: Couldn't open file for writing\n");
    168166    }
    169     psMetadataItemPrint(fd, "S32  = %ld\n", item2);
    170     psMetadataItemPrint(fd, "BOL  = %ld\n", item3);
    171     psMetadataItemPrint(fd, "F32  = %g\n", item5);
    172     psMetadataItemPrint(fd, "F64  = %g\n", item6);
    173     psMetadataItemPrint(fd, "STR  = %s\n", item7);
    174     psMetadataItemPrint(fd, "UNK  = \n", item8);
    175     printFooter(stdout, "psMetadata", "Test F - Write metadata item to file", true);
     167    psMetadataItemPrint(fd, "S32 = %ld\n", item2);
     168    psMetadataItemPrint(fd, "BOL = %ld\n", item3);
     169    psMetadataItemPrint(fd, "F32 = %g\n", item5);
     170    psMetadataItemPrint(fd, "F64 = %g\n", item6);
     171    psMetadataItemPrint(fd, "STR = %s\n", item7);
     172    psMetadataItemPrint(fd, "UNK = \n", item8);
    176173    fclose(fd);
    177174    fd = fopen("./tst_psMetadata05_OUT", "r");
     
    179176        printf("ERROR: Couldn't open file for reading\n");
    180177    }
    181     fscanf(fd, "S64 = %lld\n", &data);
    182     if(data != 55) {
    183         printf("ERROR: Data in file is not as expected. Value: %lld. Should be: 55.\n", data);
    184     }
    185     fscanf(fd, "BOL = %lld\n", &data);
    186     if(data != 0) {
    187         printf("ERROR: Data in file is not as expected. Value: %lld. Should be: 0.\n", data);
    188     }
    189     fscanf(fd, "F32 = %g\n", &fpdata);
    190     if ( (fpdata <= 3.1) || (fpdata >= 3.2) ) {
    191         printf("ERROR: Data in file is not as expected. Value: %g. Should be: 3.14.\n", fpdata);
    192     }
    193     fscanf(fd, "F64 = %g\n", &fpdata);
    194     if ( (fpdata <= 6.2) || ( fpdata >= 6.3) ) {
    195         printf("ERROR: Data in file is not as expected. Value: %g. Should be: 6.28.\n", fpdata);
    196     }
    197     fscanf(fd, "STR = %s\n", str);
    198     if ( strcmp(str,"GNIRTS") != 0 ) {
    199         printf("ERROR: Data is file is not as expected. Value: %s. Should be: GNIRTS.\n", str);
    200     }
     178
     179    char line[256];
     180    char truth1[] = "S32 = 55";
     181    fgets(line, 256, fd);
     182    if(strncmp(line, truth1, 8)) {
     183        printf("ERROR: Data in file is not as expected. Value: %s. Should be: %s\n", line, truth1);
     184    }
     185
     186    char truth2[] = "BOL = 0";
     187    fgets(line, 256, fd);
     188    if(strncmp(line, truth2, 7)) {
     189        printf("ERROR: Data in file is not as expected. Value: %s. Should be: %s\n", line, truth2);
     190    }
     191
     192    char truth3[] = "F32 = 3.14";
     193    fgets(line, 256, fd);
     194    if(strncmp(line, truth3, 10)) {
     195        printf("ERROR: Data in file is not as expected. Value: %s. Should be: %s\n", line, truth3);
     196    }
     197
     198    char truth4[] = "F64 = 6.28";
     199    fgets(line, 256, fd);
     200    if(strncmp(line, truth4, 10)) {
     201        printf("ERROR: Data in file is not as expected. Value: %s. Should be: %s\n", line, truth4);
     202    }
     203
     204    char truth5[] = "STR = GNIRTS";
     205    fgets(line, 256, fd);
     206    if(strncmp(line, truth5, 12)) {
     207        printf("ERROR: Data in file is not as expected. Value: %s. Should be: %s\n", line, truth5);
     208    }
     209
    201210    fclose(fd);
    202 
    203     // Test G - Attempt to use null metadata with setIterator
    204     printNegativeTestHeader(stdout,"psMetadata", "Test G - Attempt to use null metadata with setIterator",
    205                             "Null metadata collection not allowed", 0);
    206     if( psMetadataSetIterator(NULL, 0)) {
    207         psError(PS_ERR_UNKNOWN,true,"Set iterator did not detect invalid parameter.");
    208         return 101;
    209     }
    210     tmpList = metadata->list;
    211     metadata->list = NULL;
    212     if( psMetadataSetIterator(metadata,0)) {
    213         psError(PS_ERR_UNKNOWN,true,"Set iterator did not detect null list.");
    214         return 102;
    215     }
    216     metadata->list = tmpList;
    217     printFooter(stdout, "psMetadata", "Test G - Attempt to use null metadata with setIterator", true);
    218 
    219 
    220     // Test H - Attempt to use null metadata with getNext
    221     printNegativeTestHeader(stdout,"psMetadata", "Test H - Attempt to use null metadata with getNext",
    222                             "Null metadata collection not allowed", 0);
    223     if( psMetadataGetNext(NULL, "myItem2", 0) != NULL ) {
    224         psError(PS_ERR_UNKNOWN, true,"psMetadataGetNext did not return null for null metadata.");
    225         return 40;
    226     }
    227     tmpList = metadata->list;
    228     metadata->list = NULL;
    229     if ( psMetadataGetNext(metadata, "myItem2", 0) != NULL ) {
    230         psError(PS_ERR_UNKNOWN, true,"psMetadataGetNext did not return null for invalid metadata.");
    231         return 41;
    232     }
    233     metadata->list = tmpList;
    234 
    235     printFooter(stdout, "psMetadata", "Test H - Attempt to use null metadata with getNext", true);
    236 
    237 
    238     // Test I - Attempt to use null metadata with getPrevious
    239     printNegativeTestHeader(stdout,"psMetadata", "Test I - Attempt to use null metadata with getPrevious",
    240                             "Null metadata collection not allowed", 0);
    241     psMetadataGetPrevious(NULL, "myItem2", 0);
    242     printFooter(stdout, "psMetadata", "Test I - Attempt to use null metadata with getPrevious", true);
    243 
    244 
     211    printFooter(stdout, "psMetadata", "Test F - Write metadata item to file", true);
     212    /*
     213        // Test G - Attempt to use null metadata with setIterator
     214        printNegativeTestHeader(stdout,"psMetadata", "Test G - Attempt to use null metadata with setIterator",
     215                                "Null metadata collection not allowed", 0);
     216        if( psMetadataSetIterator(NULL, 0)) {
     217            psError(PS_ERR_UNKNOWN,true,"Set iterator did not detect invalid parameter.");
     218            return 101;
     219        }
     220        tmpList = metadata->list;
     221        metadata->list = NULL;
     222        if( psMetadataSetIterator(metadata,0)) {
     223            psError(PS_ERR_UNKNOWN,true,"Set iterator did not detect null list.");
     224            return 102;
     225        }
     226        metadata->list = tmpList;
     227        printFooter(stdout, "psMetadata", "Test G - Attempt to use null metadata with setIterator", true);
     228     
     229     
     230        // Test H - Attempt to use null metadata with getNext
     231        printNegativeTestHeader(stdout,"psMetadata", "Test H - Attempt to use null metadata with getNext",
     232                                "Null metadata collection not allowed", 0);
     233        if( psMetadataGetNext(NULL, "myItem2", 0) != NULL ) {
     234            psError(PS_ERR_UNKNOWN, true,"psMetadataGetNext did not return null for null metadata.");
     235            return 40;
     236        }
     237        tmpList = metadata->list;
     238        metadata->list = NULL;
     239        if ( psMetadataGetNext(metadata, "myItem2", 0) != NULL ) {
     240            psError(PS_ERR_UNKNOWN, true,"psMetadataGetNext did not return null for invalid metadata.");
     241            return 41;
     242        }
     243        metadata->list = tmpList;
     244     
     245        printFooter(stdout, "psMetadata", "Test H - Attempt to use null metadata with getNext", true);
     246     
     247     
     248        // Test I - Attempt to use null metadata with getPrevious
     249        printNegativeTestHeader(stdout,"psMetadata", "Test I - Attempt to use null metadata with getPrevious",
     250                                "Null metadata collection not allowed", 0);
     251        psMetadataGetPrevious(NULL, "myItem2", 0);
     252        printFooter(stdout, "psMetadata", "Test I - Attempt to use null metadata with getPrevious", true);
     253     
     254    */
    245255    // Test J - Attempt to use null file with itemPrint
    246256    printNegativeTestHeader(stdout,"psMetadata", "Test J - Attempt to use null file with itemPrint",
  • trunk/psLib/test/collections/tst_psMetadata_06.c

    r2392 r2607  
    1313*  @author  Ross Harman, MHPCC
    1414*
    15 *  @version $Revision: 1.6 $  $Name: not supported by cvs2svn $
    16 *  @date  $Date: 2004-11-22 20:54:50 $
     15*  @version $Revision: 1.7 $  $Name: not supported by cvs2svn $
     16*  @date  $Date: 2004-12-03 23:19:07 $
    1717*
    1818*  Copyright 2004 Maui High Performance Computing Center, University of Hawaii
     
    2424#include <string.h>
    2525
    26 static void printMetadataItem(psMetadataItem *item)
     26static void printMetadataItem(psMetadataItem *metadataItem)
    2727{
    28     printf("Key Name: %8s  ", item->name);
    29     printf("Key Type: %2d  ", item->type);
     28    printf("Key Name: %8s  ", metadataItem->name);
     29    printf("Key pType: %2d  ", metadataItem->pType);
     30    printf("Key mdType: %2d  ", metadataItem->type);
    3031
    31     switch (item->type ) {
    32     case PS_META_BOOL:
    33         printf("Key Value: %15d  ", item->data.B);
     32    switch (metadataItem->type) {
     33    case PS_META_LIST:
     34        printf("Key Value: %17c", ' ');
    3435        break;
    35     case PS_META_S32:
    36         printf("Key Value: %15d  ", item->data.S32);
    37         break;
    38     case PS_META_F32:
    39         printf("Key Value: %15.3f  ", item->data.F32);
    40         break;
    41     case PS_META_F64:
    42         printf("Key Value: %15.3f  ", item->data.F64);
     36    case PS_META_PRIMITIVE:
     37        switch(metadataItem->pType) {
     38        case PS_TYPE_BOOL:
     39            printf("Key Value: %15d  ", metadataItem->data.B);
     40            break;
     41        case PS_TYPE_S32:
     42            printf("Key Value: %15d  ", metadataItem->data.S32);
     43            break;
     44        case PS_TYPE_F32:
     45            printf("Key Value: %15.3f  ", metadataItem->data.F32);
     46            break;
     47        case PS_TYPE_F64:
     48            printf("Key Value: %15.3f  ", metadataItem->data.F64);
     49            break;
     50        default:
     51            printf("Bad type: %d ", metadataItem->pType);
     52        }
    4353        break;
    4454    case PS_META_STR:
    45         printf("Key Value: %15s  ", (char*)item->data.V);
    46         break;
    47     case PS_META_IMG:
    48     case PS_META_JPEG:
    49     case PS_META_PNG:
    50     case PS_META_ASTROM:
    51     case PS_META_UNKNOWN:
    52         printf("Value: unknown ");
     55        printf("Key Value: %15s  ", (char*)metadataItem->data.V);
    5356        break;
    5457    default:
    55         printf("Bad type: %d ", item->type);
     58        printf("Bad type: %d ", metadataItem->type);
    5659    }
    57     printf("Key Comment: %s\n", item->comment);
     60    printf("Key Comment: %s\n", metadataItem->comment);
    5861}
    5962
     
    7174    // Test A - Allocate metadata and items
    7275    printPositiveTestHeader(stdout, "psMetadata", "Test A - Allocate metadata and items");
    73     item1a = psMetadataItemAlloc("myItem1", PS_META_BOOL, "I am a boolean", true);
    74     item1b = psMetadataItemAlloc("myItem1", PS_META_S32, "I am a signed integer", 111);
    75     item1c = psMetadataItemAlloc("myItem1", PS_META_S32, "I am a signed integer", 222);
    76     item2a = psMetadataItemAlloc("myItem2", PS_META_S32, "I am a signed integer", 333);
    77     item2b = psMetadataItemAlloc("myItem2", PS_META_ITEM_SET, "I am a folder node", NULL);
     76    item1a = psMetadataItemAlloc("myItem1", PS_TYPE_BOOL, PS_META_PRIMITIVE, "I am a boolean", true);
     77    item1b = psMetadataItemAlloc("myItem1", PS_TYPE_S32, PS_META_PRIMITIVE, "I am a signed integer", 111);
     78    item1c = psMetadataItemAlloc("myItem1", PS_TYPE_S32, PS_META_PRIMITIVE, "I am a signed integer", 222);
     79    item2a = psMetadataItemAlloc("myItem2", PS_TYPE_S32, PS_META_PRIMITIVE, "I am a signed integer", 333);
     80    item2b = psMetadataItemAlloc("myItem2", PS_TYPE_PTR, PS_META_LIST, "I am a folder node", NULL);
    7881    metadata = psMetadataAlloc();
    7982    printMetadataItem(item1a);
     
    8790    // Test B - Add leaf node on top of existing leaf node
    8891    printPositiveTestHeader(stdout, "psMetadata", "Test B - Add leaf node on top of existing leaf node");
    89     if( ! psMetadataAddItem(metadata, item1a, PS_LIST_HEAD) ) {
     92    if(!psMetadataAddItem(metadata, item1a, PS_LIST_HEAD)) {
    9093        psError(PS_ERR_UNKNOWN, true,"psMetadataAddItem returned false for adding a node top.");
    9194        return 20;
    9295    }
    93     if ( ! psMetadataAddItem(metadata, item1b, PS_LIST_HEAD) ) {
     96    if (!psMetadataAddItem(metadata, item1b, PS_LIST_HEAD)) {
    9497        psError(PS_ERR_UNKNOWN, true,"psMetadataAddItem returned false for adding a node top.");
    9598        return 21;
     
    101104    // Test C - Add leaf node to existing folder node
    102105    printPositiveTestHeader(stdout, "psMetadata", "Test C - Add leaf node to existing folder node");
    103     if ( ! psMetadataAddItem(metadata, item1c, PS_LIST_HEAD) ) {
     106    if (!psMetadataAddItem(metadata, item1c, PS_LIST_HEAD)) {
    104107        psError(PS_ERR_UNKNOWN, true,"psMetadataAddItem return false for adding a not to existing node.");
    105108        return 22;
     
    110113    // Test D - Add folder node on top of existing leaf node
    111114    printPositiveTestHeader(stdout, "psMetadata", "Test D - Add folder node on top of existing leaf node");
    112     if ( ! psMetadataAddItem(metadata, item2a, PS_LIST_HEAD) ) {
     115    if (!psMetadataAddItem(metadata, item2a, PS_LIST_HEAD)) {
    113116        psError(PS_ERR_UNKNOWN, true,"psMetadataAddItem returned false for adding a node to existing leaf node.");
    114117        return 23;
    115118    }
    116     if ( ! psMetadataAddItem(metadata, item2b, PS_LIST_HEAD) ) {
     119    if (!psMetadataAddItem(metadata, item2b, PS_LIST_HEAD)) {
    117120        psError(PS_ERR_UNKNOWN, true,"psMetadataAddItem returned false for adding a nod to existing leaf node.");
    118121        return 24;
Note: See TracChangeset for help on using the changeset viewer.