IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 25259


Ignore:
Timestamp:
Sep 2, 2009, 3:57:00 PM (17 years ago)
Author:
Paul Price
Message:

Consolidated the psMetadataLookupPTRTYPE functions using a macro.
Added psMetadataLookupVector.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/pap/psLib/src/types/psMetadata.c

    r21183 r25259  
    996996    if (metadataItem->type == PS_DATA_METADATA_MULTI) {
    997997        // if multiple keys found, use the first.
    998         //        metadataItem = (psMetadataItem*)((metadataItem->data.list)->head);
    999998        metadataItem = (psMetadataItem*)(metadataItem->data.list->head->data);
    1000999        if (status) {
     
    10821081    } \
    10831082    \
    1084     /* psFree(metadataItem); currently, the lookup doesn't increment the ref count */ \
    10851083    return value; \
    10861084}
     
    11011099psMetadataLookupNumTYPE(VectorMaskType,VectorMask)
    11021100psMetadataLookupNumTYPE(ImageMaskType,ImageMask)
     1101
     1102#define psMetadataLookupPtrTYPE(TYPENAME,NAME,TYPE,VAL) \
     1103TYPENAME psMetadataLookup##NAME(bool *status, const psMetadata *md, const char *key) \
     1104{ \
     1105    PS_ASSERT_METADATA_NON_NULL(md, NULL); \
     1106    PS_ASSERT_STRING_NON_EMPTY(key, NULL); \
     1107    psMetadataItem *item = psMetadataLookup((psMetadata*)md, key); /* The item of interest */ \
     1108    if (!item) { \
     1109        if (status) { \
     1110            *status = false; \
     1111        } else { \
     1112            psError(PS_ERR_IO, true, "Couldn't find %s in the metadata.\n", key); \
     1113        } \
     1114        return NULL; \
     1115    } \
     1116    \
     1117    if (item->type == PS_DATA_METADATA_MULTI) { \
     1118        /* if multiple keys found, use the first. */ \
     1119        item = item->data.list->head->data; \
     1120    } \
     1121    if (item->type != TYPE) { \
     1122        if (status) { \
     1123            *status = false; \
     1124        } else { \
     1125            psLogMsg(__func__, PS_LOG_DETAIL, "%s isn't of type PS_DATA_META, as expected.\n", key); \
     1126        } \
     1127        return NULL; \
     1128    } \
     1129    \
     1130    if (status) { \
     1131        *status = true; \
     1132    } \
     1133    return item->data.VAL; \
     1134}
     1135
     1136psMetadataLookupPtrTYPE(psMetadata*, Metadata, PS_DATA_METADATA, md)
     1137psMetadataLookupPtrTYPE(psString, Str, PS_DATA_STRING, str)
     1138psMetadataLookupPtrTYPE(psTime*, Time, PS_DATA_TIME, V)
     1139psMetadataLookupPtrTYPE(psVector*, Vector, PS_DATA_VECTOR, V)
     1140
    11031141
    11041142psMetadataItem* psMetadataGet(const psMetadata *md,
     
    12571295}
    12581296
    1259 psMetadata *psMetadataLookupMetadata(bool *status,
    1260                                      const psMetadata *md,
    1261                                      const char *key)
    1262 {
    1263     PS_ASSERT_METADATA_NON_NULL(md,NULL);
    1264     psMetadataItem *item = psMetadataLookup((psMetadata*)md, key); // The metadata with instruments
    1265     psMetadata *value = NULL;  // The value to return
    1266     if (!item) {
    1267         // The given key isn't in the metadata
    1268         if (status) {
    1269             *status = false;
    1270         } else {
    1271             psError(PS_ERR_IO, true, "Couldn't find %s in the metadata.\n", key);
    1272         }
    1273     } else if (item->type != PS_DATA_METADATA) {
    1274         // The value at the key isn't metadata
    1275         if (status) {
    1276             *status = false;
    1277         } else {
    1278             psLogMsg(__func__, PS_LOG_DETAIL, "%s isn't of type PS_DATA_META, as expected.\n", key);
    1279         }
    1280         //        value = NULL;
    1281     } else {
    1282         // We have the requested metadata
    1283         if (status) {
    1284             *status = true;
    1285         }
    1286         value = item->data.md; // The requested metadata
    1287     }
    1288     return value;
    1289 }
    1290 
    1291 psTime *psMetadataLookupTime(bool *status,
    1292                              const psMetadata *md,
    1293                              const char *key)
    1294 {
    1295     PS_ASSERT_METADATA_NON_NULL(md,NULL);
    1296 
    1297     psMetadataItem *item = psMetadataLookup((psMetadata*)md, key);
    1298     if (!item) {
    1299         // The given key isn't in the metadata
    1300         if (status) {
    1301             *status = false;
    1302         } else {
    1303             psError(PS_ERR_IO, true, "Couldn't find %s in the metadata.\n", key);
    1304         }
    1305         return NULL;
    1306     }
    1307 
    1308     if (item->type != PS_DATA_TIME) {
    1309         // The value at the key isn't metadata
    1310         if (status) {
    1311             *status = false;
    1312         } else {
    1313             psLogMsg(__func__, PS_LOG_DETAIL, "%s isn't of type PS_DATA_TIME, as expected.\n", key);
    1314         }
    1315         return NULL;
    1316     }
    1317 
    1318     // We have the requested metadata
    1319     if (status) {
    1320         *status = true;
    1321     }
    1322 
    1323     return item->data.V;
    1324 }
    1325 
    1326 
    1327 psString psMetadataLookupStr(bool *status,
    1328                              const psMetadata *md,
    1329                              const char *key)
    1330 {
    1331     PS_ASSERT_METADATA_NON_NULL(md,NULL);
    1332 
    1333     psMetadataItem *item = psMetadataLookup((psMetadata*)md, key); // The metadata with instruments
    1334     //    char *value = NULL;   // The value to return
    1335     psString value = NULL;
    1336     if (!item) {
    1337         // The given key isn't in the metadata
    1338         if (status) {
    1339             *status = false;
    1340         } else {
    1341             psError(PS_ERR_IO, true, "Couldn't find %s in the metadata.\n", key);
    1342         }
    1343     } else if (item->type != PS_DATA_STRING) {
    1344         // The value at the key isn't of the desired type
    1345         if (status) {
    1346             *status = false;
    1347         } else {
    1348             psLogMsg(__func__, PS_LOG_DETAIL, "%s isn't of type PS_DATA_STRING, as expected.\n", key);
    1349         }
    1350         //        value = NULL;
    1351     } else {
    1352         // We have the requested metadata
    1353         if (status) {
    1354             *status = true;
    1355         }
    1356         value = item->data.V;
    1357     }
    1358     return value;
    1359 }
     1297
     1298
     1299
    13601300
    13611301psList *psMetadataKeys(psMetadata *md)
Note: See TracChangeset for help on using the changeset viewer.