IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
May 20, 2004, 6:12:37 PM (22 years ago)
Author:
eugene
Message:

substantial API changes based on change to PSLib SDRS

File:
1 edited

Legend:

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

    r707 r753  
    4747 */
    4848psMetadataItem *psMetadataItemAlloc(
    49     int typeFlags,                      // type of this piece of metadata + flags
    50     const void *data,                   // value of new item
     49    const char *name,                   // name of new item of metadata (may be an sprintf format)
     50    int format,                         // type of this piece of metadata + flags
    5151    const char *comment,                // comment associated with item; may be NULL
     52    ...)                                // data + possible arguments for name format
     53{
     54    va_list ap;
     55    va_start(ap, comment);
     56
     57    psMetadataItem *mi = psMetadataItemAllocV(name, format, comment, ap);
     58
     59    va_end(ap);
     60
     61    return mi;
     62}
     63
     64psMetadataItem *psMetadataItemAllocV(
    5265    const char *name,                   // name of new item of metadata (may be an sprintf format)
    53     ...                                 // possible arguments for name format
    54     )
    55 {
    56     va_list ap;
    57     va_start(ap, name);
    58 
    59     psMetadataItem *mi = psVMetadataItemAlloc(typeFlags, data, comment, name, ap);
    60 
    61     va_end(ap);
    62 
    63     return mi;
    64 }
    65 
    66 psMetadataItem *psVMetadataItemAlloc(
    67     int typeFlags,                      // type of this piece of metadata + flags
    68     const void *data,                   // value of new item
     66    int format,                         // type of this piece of metadata + flags
    6967    const char *comment,                // comment associated with item; may be NULL
    70     const char *name,                   // name of new item of metadata (may be an sprintf format)
    71     va_list ap                          // possible arguments for name format
    72     )
    73 {
    74     const psMetadataType type = typeFlags & PS_META_TYPE_MASK; // the type part of typeFlags
    75     psMetadataFlags flags = typeFlags & ~PS_META_TYPE_MASK;    // the flags part of typeFlags
     68    va_list ap)                         // possible arguments for name format
     69{
     70    const psMetadataType type = format & PS_META_TYPE_MASK; // the type part of format
     71    psMetadataFlags flags = format & ~PS_META_TYPE_MASK;    // the flags part of format
    7672    static int id = 0;                  // unique ID for an item of metadata
    7773    psMetadataItem *ms = psAlloc(sizeof(psMetadataItem));
     
    9490    ms->items = NULL;
    9591
    96     assert (name != NULL);
    97     if (strchr(name, '%') != NULL) {
    98         static char tmp[201];           // should be enough; we won't overflow even if it isn't
    99 
    100         if(vsnprintf(tmp, sizeof(tmp), name, ap) > sizeof(tmp) - 1) {
    101             psTrace("metadata.name", 1, "Keyword \"%s\" was truncated to \"%s\" upon expansion\n", name, tmp);
    102         }
    103 
    104         name = tmp;         
    105     }
    106     ms->name = psStringCopy(name);
    107 
    108     ms->comment = psStringCopy(comment == NULL ? "" : comment);
    109 
    11092    assert (type >= 0 && type < PS_META_NTYPE);
    11193    switch (type) {
    11294      case PS_META_ITEM_SET:
    113         *(void **)&ms->val.v = NULL;
     95        ms->data.V = NULL;
    11496        ms->items = psDlistAlloc(NULL);
    11597        break;
    11698
    117       case PS_META_FLOAT:
    118         *(float *)&ms->val.f = *(float *)data;
    119         break;
    120        
    121       case PS_META_INT:
    122         *(int *)&ms->val.i = *(int *)data;
     99      case PS_META_F32:                 // psF32 promoted to psF64 through ...
     100      case PS_META_F64:
     101        ms->data.F64 = va_arg (ap, psF64);
     102        break;
     103       
     104      case PS_META_S32:
     105        ms->data.S32 = va_arg (ap, psS32);
    123106        break;
    124107       
    125108      case PS_META_STR:
    126         *(void **)&ms->val.v = psStringCopy(data);
     109        ms->data.V = psStringCopy(va_arg(ap, char *));
    127110        break;
    128111       
     
    132115      case PS_META_ASTROM:
    133116      case PS_META_UNKNOWN:
    134         *(void **)&ms->val.v = (void *)data;
     117        ms->data.V = va_arg(ap, void *);
    135118        break;
    136119
     
    139122        break;                          // NOTREACHED
    140123    }
     124
     125    assert (name != NULL);
     126    if (strchr(name, '%') != NULL) {
     127        static char tmp[201];           // should be enough; we won't overflow even if it isn't
     128
     129        if(vsnprintf(tmp, sizeof(tmp), name, ap) > sizeof(tmp) - 1) {
     130            psTrace("metadata.name", 1, "Keyword \"%s\" was truncated to \"%s\" upon expansion\n", name, tmp);
     131        }
     132
     133        name = tmp;         
     134    }
     135    ms->name = psStringCopy(name);
     136
     137    ms->comment = psStringCopy(comment == NULL ? "" : comment);
    141138
    142139    return ms;
     
    159156        break;
    160157       
    161       case PS_META_FLOAT:
    162       case PS_META_INT:
     158      case PS_META_F32:
     159      case PS_META_F64:
     160      case PS_META_S32:
    163161        break;                          // nothing to do
    164162       
    165163      case PS_META_STR:
    166         psFree(ms->val.v);
     164        psFree(ms->data.V);
    167165        break;
    168166       
     
    198196        psMetadataItem *head = meta;
    199197        if (head == NULL) {             // this is the first item of this name
    200             head = psMetadataAppend(ms, PS_META_ITEM_SET, NULL, NULL, item->name);
     198            head = psMetadataAppend(ms, item->name, PS_META_ITEM_SET, NULL);
    201199        }           
    202200
     
    224222        return item;
    225223    } else if (meta != NULL) {
    226         psError(__func__, PS_ERR_UNKNOWN, PS_NEW_ERROR,
     224        psError(__func__, PS_ERR_UNKNOWN, 1,
    227225                "Key \"%s\" is already present in the metaDataSet 0x%x", item->name, ms);
    228226        psMetadataItemFree(item);
     
    242240 */
    243241psMetadataItem *psMetadataAppend(psMetadata *restrict md, ///< Metadata to add to
    244                                  int typeFlags, ///< type of this piece of metadata + flags
    245                                  const void *val, ///< value of new item N.b. a pointer even if the item
    246                                                   ///< is of type e.g. int
    247                                  const char *comment, ///< comment associated with item
    248                                  const char *name, ///< name of new item of metadata (may be in sprintf
    249                                                    ///< format)
    250                                  ...               ///< possible arguments for name format
    251     )
     242    const char *name,                   ///< name of new item of metadata
     243    int format,                         ///< type of this piece of metadata + flags
     244    const char *comment,                ///< comment associated with item
     245    ...)                                ///< possible arguments for name format
    252246{
    253247    va_list ap;
    254     va_start(ap, name);
    255 
    256     psMetadataItem *mi = psVMetadataItemAlloc(typeFlags, val, comment, name, ap);
     248    va_start(ap, comment);
     249
     250    psMetadataItem *mi = psMetadataItemAllocV(name, format, comment, ap);
    257251
    258252    va_end(ap);
     
    363357        break;
    364358       
    365       case PS_META_FLOAT:
    366         fprintf(fd, "%g\n", ms->val.f);
    367         break;
    368        
    369       case PS_META_INT:
    370         fprintf(fd, "%d\n", ms->val.i);
     359      case PS_META_F64:
     360      case PS_META_F32:
     361        fprintf(fd, "%g\n", ms->data.F32);
     362        break;
     363       
     364      case PS_META_S32:
     365        fprintf(fd, "%d\n", ms->data.S32);
    371366        break;
    372367       
    373368      case PS_META_STR:
    374         fprintf(fd, "%s\n", (char *)ms->val.v);
     369        fprintf(fd, "%s\n", (char *)ms->data.V);
    375370        break;
    376371       
Note: See TracChangeset for help on using the changeset viewer.