IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 458


Ignore:
Timestamp:
Apr 19, 2004, 11:28:12 AM (22 years ago)
Author:
rhl
Message:

Added psVMetadataItemAlloc() and support new psMetadataAppend() API

File:
1 edited

Legend:

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

    r446 r458  
    5151    )
    5252{
     53    va_list ap;
     54    va_start(ap, name);
     55
     56    psMetadataItem *mi = psVMetadataItemAlloc(typeFlags, data, comment, name, ap);
     57
     58    va_end(ap);
     59
     60    return mi;
     61}
     62
     63psMetadataItem *psVMetadataItemAlloc(
     64    int typeFlags,                      // type of this piece of metadata + flags
     65    const void *data,                   // value of new item
     66    const char *comment,                // comment associated with item; may be NULL
     67    const char *name,                   // name of new item of metadata (may be an sprintf format)
     68    va_list ap                          // possible arguments for name format
     69    )
     70{
    5371    const psMetadataType type = typeFlags & PS_META_TYPE_MASK; // the type part of typeFlags
    5472    psMetadataFlags flags = typeFlags & ~PS_META_TYPE_MASK;    // the flags part of typeFlags
     
    7795        static char tmp[201];           // should be enough; we won't overflow even if it isn't
    7896
    79         va_list ap;
    80         va_start(ap, name);
    8197        if(vsnprintf(tmp, sizeof(tmp), name, ap) > sizeof(tmp) - 1) {
    8298            psTrace("metadata.name", 1, "Keyword \"%s\" was truncated to \"%s\" upon expansion\n", name, tmp);
    8399        }
    84         va_end(ap);
    85100
    86101        name = tmp;         
     
    169184 * Add an new psMetadataItem to a psMetadata
    170185 */
    171 psMetadataItem *psMetadataAppend(psMetadata *restrict ms, psMetadataItem *restrict item)
     186psMetadataItem *psMetadataAppendItem(psMetadata *restrict ms, psMetadataItem *restrict item)
    172187{
    173188    psMetadataItem *meta = NULL;        // an item of metadata
     
    180195        psMetadataItem *head = meta;
    181196        if (head == NULL) {             // this is the first item of this name
    182             head = psMetadataAppend(ms, psMetadataItemAlloc(PS_META_ITEM_SET, NULL, NULL, item->name));
     197            head = psMetadataAppend(ms, PS_META_ITEM_SET, NULL, NULL, item->name);
    183198        }           
    184199
     
    218233    return item;
    219234}
     235
     236/************************************************************************************************************/
     237/*
     238 * Convenience wrapper for psMetadataAppend()
     239 */
     240psMetadataItem *psMetadataAppend(psMetadata *restrict md, ///< Metadata to add to
     241                                 int typeFlags, ///< type of this piece of metadata + flags
     242                                 const void *val, ///< value of new item N.b. a pointer even if the item
     243                                                  ///< is of type e.g. int
     244                                 const char *comment, ///< comment associated with item
     245                                 const char *name, ///< name of new item of metadata (may be in sprintf
     246                                                   ///< format)
     247                                 ...               ///< possible arguments for name format
     248    )
     249{
     250    va_list ap;
     251    va_start(ap, name);
     252
     253    psMetadataItem *mi = psVMetadataItemAlloc(typeFlags, val, comment, name, ap);
     254
     255    va_end(ap);
     256
     257    return psMetadataAppendItem(md, mi);
     258}
     259
    220260
    221261/*****************************************************************************/
     
    375415    for (int i = 0; i < 10; i += 5) {
    376416        float sqrti = sqrt(i);
    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,
    381                                            "Bonjour", "French", "lang.hello"));
    382     psMetadataAppend(ms, psMetadataItemAlloc(PS_META_STR | PS_META_NON_UNIQUE,
    383                                            "Aloha", "Hawaiian", "lang.hello"));
    384     psMetadataAppend(ms, psMetadataItemAlloc(PS_META_STR | PS_META_NON_UNIQUE,
    385                                            "Good Morning", "English", "lang.hello"));
     417        psMetadataAppend(ms, PS_META_INT, &i, NULL, "const.%d", i);
     418        psMetadataAppend(ms, PS_META_FLOAT, &sqrti, "square root", "const.sqrt%d", i);
     419    }
     420    psMetadataAppend(ms, PS_META_STR | PS_META_NON_UNIQUE, "Bonjour", "French", "lang.hello");
     421    psMetadataAppend(ms, PS_META_STR | PS_META_NON_UNIQUE, "Aloha", "Hawaiian", "lang.hello");
     422    psMetadataAppend(ms, PS_META_STR | PS_META_NON_UNIQUE, "Good Morning", "English", "lang.hello");
    386423    /*
    387424     * Print all metadata starting "lang"
Note: See TracChangeset for help on using the changeset viewer.