IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Apr 19, 2004, 9:41:51 AM (22 years ago)
Author:
rhl
Message:

Fixed up code for changes in organisation and APIs

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/archive/pslib/src/Metadata/metadata.c

    r164 r446  
    66#include <assert.h>
    77#include <string.h>
    8 #include "psUtils.h"
    9 #include "psMetaData.h"
     8#include "psLib.h"
     9#include "psMetadata.h"
    1010
    1111/*****************************************************************************/
     
    1313 * Handle sets of metadata
    1414 */
    15 psMetaDataSet *psMetaDataSetAlloc(void) // make a new set of metadata
    16 {
    17     psMetaDataSet *ms = psAlloc(sizeof(psMetaDataSet));
     15psMetadata *psMetadataAlloc(void)       // make a new set of metadata
     16{
     17    psMetadata *ms = psAlloc(sizeof(psMetadata));
    1818
    1919    ms->list = psDlistAlloc(NULL);      // list of metadata
    20     ms->table = psHashAlloc(128);       // hash table
     20    ms->table = psHashAlloc();          // hash table
    2121
    2222    return ms;
    2323}
    2424
    25 void psMetaDataSetFree(psMetaDataSet *ms) // destroy a set of metadata
     25void psMetadataFree(psMetadata *ms) // destroy a set of metadata
    2626{
    2727    if (ms == NULL) {
     
    3030   
    3131    psDlistFree(ms->list, (void (*)(void *))NULL);
    32     psHashFree(ms->table, (void (*)(void *))psMetaDataItemFree);
     32    psHashFree(ms->table, (void (*)(void *))psMetadataItemFree);
    3333
    3434    psFree(ms);
     
    3737/*****************************************************************************/
    3838/*
    39  * Return a properly filled-out psMetaDataItem
     39 * Return a properly filled-out psMetadataItem
    4040 *
    4141 * N.b. For types PS_META_FLOAT, PS_META_INT, and PS_META_STR, a COPY
     
    4343 * to the data will be kept.
    4444 */
    45 psMetaDataItem *psMetaDataItemAlloc(
     45psMetadataItem *psMetadataItemAlloc(
    4646    int typeFlags,                      // type of this piece of metadata + flags
    4747    const void *data,                   // value of new item
     
    5151    )
    5252{
    53     const psMetaDataType type = typeFlags & PS_META_TYPE_MASK; // the type part of typeFlags
    54     psMetaDataFlags flags = typeFlags & ~PS_META_TYPE_MASK;    // the flags part of typeFlags
     53    const psMetadataType type = typeFlags & PS_META_TYPE_MASK; // the type part of typeFlags
     54    psMetadataFlags flags = typeFlags & ~PS_META_TYPE_MASK;    // the flags part of typeFlags
    5555    static int id = 0;                  // unique ID for an item of metadata
    56     psMetaDataItem *ms = psAlloc(sizeof(psMetaDataItem));
     56    psMetadataItem *ms = psAlloc(sizeof(psMetadataItem));
    5757
    5858    *(int *)&ms->id = id++;             // need to cast away const
     
    125125}
    126126
    127 void psMetaDataItemFree(psMetaDataItem *ms) // piece of metadata to destroy
     127void psMetadataItemFree(psMetadataItem *ms) // piece of metadata to destroy
    128128{
    129129    if(ms == NULL) {
     
    167167/*****************************************************************************/
    168168/*
    169  * Add an new psMetaDataItem to a psMetaDataSet
    170  */
    171 psMetaDataItem *psMetaDataAppend(psMetaDataSet *restrict ms, psMetaDataItem *restrict item)
    172 {
    173     psMetaDataItem *meta = NULL;        // an item of metadata
     169 * Add an new psMetadataItem to a psMetadata
     170 */
     171psMetadataItem *psMetadataAppend(psMetadata *restrict ms, psMetadataItem *restrict item)
     172{
     173    psMetadataItem *meta = NULL;        // an item of metadata
    174174    assert (ms != NULL && ms->list != NULL && ms->table != NULL);
    175175
     
    178178   
    179179    if (item->flags & PS_META_NON_UNIQUE) {
    180         psMetaDataItem *head = meta;
     180        psMetadataItem *head = meta;
    181181        if (head == NULL) {             // this is the first item of this name
    182             head = psMetaDataAppend(ms, psMetaDataItemAlloc(PS_META_ITEM_SET, NULL, NULL, item->name));
     182            head = psMetadataAppend(ms, psMetadataItemAlloc(PS_META_ITEM_SET, NULL, NULL, item->name));
    183183        }           
    184184
     
    202202
    203203        psDlistAppend(head->items, item);
    204         psHashInsert(ms->table, item->name, item, (void (*)(void *))psMetaDataItemFree);
     204        psHashInsert(ms->table, item->name, item, (void (*)(void *))psMetadataItemFree);
    205205
    206206        return item;
    207207    } else if (meta != NULL) {
    208         psError(__func__, "Key \"%s\" is already present in the metaDataSet 0x%x", item->name, ms);
    209         //psMetaDataItemFree(item);
     208        psError(__func__, PS_ERR_UNKNOWN, PS_NEW_ERROR,
     209                "Key \"%s\" is already present in the metaDataSet 0x%x", item->name, ms);
     210        //psMetadataItemFree(item);
    210211
    211212        return NULL;
     
    213214
    214215    psDlistAppend(ms->list, item);
    215     psHashInsert(ms->table, item->name, item, (void (*)(void *))psMetaDataItemFree);
     216    psHashInsert(ms->table, item->name, item, (void (*)(void *))psMetadataItemFree);
    216217
    217218    return item;
     
    222223 * Remove and return an item of metadata from a set
    223224 */
    224 psMetaDataItem *psMetaDataRemove(psMetaDataSet *restrict ms, const char *restrict key)
     225psMetadataItem *psMetadataRemove(psMetadata *restrict ms, const char *restrict key)
    225226{
    226227    assert (ms != NULL && ms->list != NULL && ms->table != NULL);
    227228
    228     psMetaDataItem *meta = psHashRemove(ms->table, key);
     229    psMetadataItem *meta = psHashRemove(ms->table, key);
    229230
    230231    if (meta == NULL) {
     
    239240            *ptr = '\0';
    240241
    241             psMetaDataItem *base = psHashLookup(ms->table, baseKey); // here's the non-qualified metadata
     242            psMetadataItem *base = psHashLookup(ms->table, baseKey); // here's the non-qualified metadata
    242243            assert (base != NULL);
    243244
     
    253254 * Iterators for the psDlist representation of the metadata
    254255 */
    255 void psMetaDataSetIterator(psMetaDataSet *ms)
     256void psMetadataIterator(psMetadata *ms)
    256257{
    257258    assert (ms != NULL);
     
    259260}
    260261
    261 psMetaDataItem *psMetaDataGetNext(psMetaDataSet *restrict ms,
     262psMetadataItem *psMetadataGetNext(psMetadata *restrict ms,
    262263                                  const char *restrict match)
    263264{
    264265    assert (ms != NULL);
    265     psMetaDataItem *meta = psDlistGetNext(ms->list, 0);
     266    psMetadataItem *meta = psDlistGetNext(ms->list, 0);
    266267
    267268    if (match == NULL || meta == NULL) {
     
    271272            return meta;
    272273        } else {
    273             return psMetaDataGetNext(ms, match);
     274            return psMetadataGetNext(ms, match);
    274275        }
    275276    }
     
    280281 * Access using the hash table
    281282 */
    282 psMetaDataItem *psMetaDataLookup(const psMetaDataSet *restrict ms,
     283psMetadataItem *psMetadataLookup(const psMetadata *restrict ms,
    283284                                 const char *restrict key)
    284285{
     
    289290
    290291/*****************************************************************************/
    291 void psMetaDataItemPrint(FILE *fd,              // file descriptor to write to
    292                          const psMetaDataItem *restrict ms, // item of metadata to print
     292void psMetadataItemPrint(FILE *fd,              // file descriptor to write to
     293                         const psMetadataItem *restrict ms, // item of metadata to print
    293294                         const char *prefix)       // print this at the beginning of each line
    294295{
     
    308309      case PS_META_ITEM_SET:
    309310        {                               // gcc 3.3 doesn't allow a declaration here
    310             psMetaDataItem *meta = NULL;
     311            psMetadataItem *meta = NULL;
    311312
    312313            fprintf(fd, "\n");
    313314            psDlistSetIterator(ms->items, PS_DLIST_HEAD, 0);
    314315            while ((meta = psDlistGetNext(ms->items, 0)) != NULL) {
    315                 psMetaDataItemPrint(fd, meta, "\t");
     316                psMetadataItemPrint(fd, meta, "\t");
    316317            }
    317318        }
     
    369370    psSetLogFormat("NM");               // suppress some of the psLogMsg verbosity
    370371
    371     psMetaDataSet *ms = psMetaDataSetAlloc(); // set of metadata
    372     psMetaDataItem *meta = NULL;            // used to traverse a set of metadata
     372    psMetadata *ms = psMetadataAlloc(); // set of metadata
     373    psMetadataItem *meta = NULL;            // used to traverse a set of metadata
    373374
    374375    for (int i = 0; i < 10; i += 5) {
    375376        float sqrti = sqrt(i);
    376         psMetaDataAppend(ms, psMetaDataItemAlloc(PS_META_INT, &i, NULL, "const.%d", i));
    377         psMetaDataAppend(ms, psMetaDataItemAlloc(PS_META_FLOAT, &sqrti, "square root", "const.sqrt%d", i));
    378     }
    379     psMetaDataAppend(ms, psMetaDataItemAlloc(PS_META_STR | PS_META_NON_UNIQUE,
     377        psMetadataAppend(ms, psMetadataItemAlloc(PS_META_INT, &i, NULL, "const.%d", i));
     378        psMetadataAppend(ms, psMetadataItemAlloc(PS_META_FLOAT, &sqrti, "square root", "const.sqrt%d", i));
     379    }
     380    psMetadataAppend(ms, psMetadataItemAlloc(PS_META_STR | PS_META_NON_UNIQUE,
    380381                                           "Bonjour", "French", "lang.hello"));
    381     psMetaDataAppend(ms, psMetaDataItemAlloc(PS_META_STR | PS_META_NON_UNIQUE,
     382    psMetadataAppend(ms, psMetadataItemAlloc(PS_META_STR | PS_META_NON_UNIQUE,
    382383                                           "Aloha", "Hawaiian", "lang.hello"));
    383     psMetaDataAppend(ms, psMetaDataItemAlloc(PS_META_STR | PS_META_NON_UNIQUE,
     384    psMetadataAppend(ms, psMetadataItemAlloc(PS_META_STR | PS_META_NON_UNIQUE,
    384385                                           "Good Morning", "English", "lang.hello"));
    385386    /*
    386387     * Print all metadata starting "lang"
    387388     */
    388     psMetaDataItemFree(psMetaDataRemove(ms, "lang.hello.0"));
    389 
    390     psMetaDataSetIterator(ms);
    391     while ((meta = psMetaDataGetNext(ms, "lang")) != NULL) {
    392         psMetaDataItemPrint(stdout, meta, "");
     389    psMetadataItemFree(psMetadataRemove(ms, "lang.hello.0"));
     390
     391    psMetadataIterator(ms);
     392    while ((meta = psMetadataGetNext(ms, "lang")) != NULL) {
     393        psMetadataItemPrint(stdout, meta, "");
    393394    }
    394395    /*
    395396     * Remove a key
    396397     */
    397     psMetaDataItemFree(psMetaDataRemove(ms, "lang.hello"));
     398    psMetadataItemFree(psMetadataRemove(ms, "lang.hello"));
    398399    /*
    399400     * Print all metadata
    400401     */
    401402    fprintf(stdout, "------\n");
    402     psMetaDataSetIterator(ms);
    403     while ((meta = psMetaDataGetNext(ms, NULL)) != NULL) {
    404         psMetaDataItemPrint(stdout, meta, "");
     403    psMetadataIterator(ms);
     404    while ((meta = psMetadataGetNext(ms, NULL)) != NULL) {
     405        psMetadataItemPrint(stdout, meta, "");
    405406    }
    406407    /*
     
    409410    fprintf(stdout, "------\n");
    410411    fprintf(stdout, "Looking up by name:\n");
    411     meta = psMetaDataLookup(ms, "const.5");
     412    meta = psMetadataLookup(ms, "const.5");
    412413    if (meta != NULL) {
    413         psMetaDataItemPrint(stdout, meta, "");
     414        psMetadataItemPrint(stdout, meta, "");
    414415    }
    415416    /*
    416417     * Clean up
    417418     */
    418     psMetaDataSetFree(ms);
     419    psMetadataFree(ms);
    419420    /*
    420421     * Check for memory leaks
Note: See TracChangeset for help on using the changeset viewer.