IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Mar 9, 2004, 12:50:03 PM (22 years ago)
Author:
rhl
Message:

Changes to support non-unique keys

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/archive/pslib/src/Metadata/psMetaData.h

    r141 r156  
    88 */
    99typedef enum {                          // type of val is:
    10     PS_META_FLOAT = 0,                  // float (.f)
     10    PS_META_ITEM_SET = 0,               // NULL; metadata is in psMetaDataType.items
     11    PS_META_FLOAT,                      // float (.f)
    1112    PS_META_INT,                        // int (.i)
    1213    PS_META_STR,                        // string (.v)
     
    1920} psMetaDataType;
    2021
     22enum {
     23    PS_META_TYPE_MASK =     0xffff,     // the type enum must fit in this mask
     24    PS_META_UNIQUE =       0x10000,     // the name must be unique (default)
     25    PS_META_NON_UNIQUE =   0x20000,     // the name may be repeated, and should be disambiguated for us
     26};
     27
    2128/*
    2229 * A struct to define a single item of metadata
     
    2532    const int id;                       // unique ID for this item
    2633   
    27     char *name;                         // Name of item
     34    char *restrict name;                // Name of item
    2835    psMetaDataType type;                // type of this item
     36    int flags;                          // flags associated with this item
    2937    const union {
    3038        float f;                        // floating value
     
    3341    } val;                              // value of metadata
    3442    char *comment;                      // optional comment ("", not NULL)
    35 } psMetaData;
     43    psDlist *restrict items;            // list of psMetaDataItems with the same name
     44} psMetaDataItem;
     45
     46/*
     47 * A set of metadata
     48 */
     49typedef struct {
     50    psDlist *restrict list;             // list of psMetaDataItem
     51    psHash *restrict table;             // hash table of the same metadata
     52} psMetaDataSet;
    3653
    3754/*****************************************************************************/
     
    3956 * Constructors and destructors
    4057 */
    41 psMetaData *psMetaDataNew(
    42     const char *name,                   // name of new item of metadata
    43     psMetaDataType type,                // type of this piece of metadata
     58psMetaDataItem *psMetaDataItemNew(
     59    int typeFlags,                      // type of this piece of metadata + flags
    4460    const void *val,                    // value of new item
    4561                                        // N.b. a pointer even if the item
    4662                                        // is of type e.g. int
    4763    const char *comment,                // comment associated with item
    48     int copy);                          // always copy data; NOTUSED
     64    const char *name,                   // name of new item of metadata (may be an sprintf format)
     65    ...);                               // possible arguments for name format
    4966
    50 void psMetaDataDel(psMetaData *ms);     // piece of metadata to destroy
     67void psMetaDataItemDel(psMetaDataItem *ms); // piece of metadata to destroy
     68
     69psMetaDataSet *psMetaDataSetNew(void);    // make a new set of metadata
     70void psMetaDataSetDel(psMetaDataSet *ms); // destroy a set of metadata
    5171
    5272/*****************************************************************************/
     
    5474 * Utilities
    5575 */
    56 void psMetaDataPrint(FILE *fd,          // file descriptor to write to
    57                      const psMetaData *ms); // item of metadata to print
     76psMetaDataItem *psMetaDataAppend(psMetaDataSet *restrict ms, psMetaDataItem *restrict item);
     77psMetaDataItem *psMetaDataRemove(psMetaDataSet *restrict ms, const char *restrict key);
    5878
     79void psMetaDataSetIterator(psMetaDataSet *ms);
     80psMetaDataItem *psMetaDataGetNext(psMetaDataSet *restrict ms, const char *restrict match);
     81psMetaDataItem *psMetaDataLookup(const psMetaDataSet *restrict ms, const char *restrict key);
    5982
     83void psMetaDataItemPrint(FILE *fd,              // file descriptor to write to
     84                         const psMetaDataItem *restrict ms, // item of metadata to print
     85                         const char *prefix);      // print this at the beginning of each line
    6086#endif
Note: See TracChangeset for help on using the changeset viewer.