Changeset 25259
- Timestamp:
- Sep 2, 2009, 3:57:00 PM (17 years ago)
- File:
-
- 1 edited
-
branches/pap/psLib/src/types/psMetadata.c (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/pap/psLib/src/types/psMetadata.c
r21183 r25259 996 996 if (metadataItem->type == PS_DATA_METADATA_MULTI) { 997 997 // if multiple keys found, use the first. 998 // metadataItem = (psMetadataItem*)((metadataItem->data.list)->head);999 998 metadataItem = (psMetadataItem*)(metadataItem->data.list->head->data); 1000 999 if (status) { … … 1082 1081 } \ 1083 1082 \ 1084 /* psFree(metadataItem); currently, the lookup doesn't increment the ref count */ \1085 1083 return value; \ 1086 1084 } … … 1101 1099 psMetadataLookupNumTYPE(VectorMaskType,VectorMask) 1102 1100 psMetadataLookupNumTYPE(ImageMaskType,ImageMask) 1101 1102 #define psMetadataLookupPtrTYPE(TYPENAME,NAME,TYPE,VAL) \ 1103 TYPENAME 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 1136 psMetadataLookupPtrTYPE(psMetadata*, Metadata, PS_DATA_METADATA, md) 1137 psMetadataLookupPtrTYPE(psString, Str, PS_DATA_STRING, str) 1138 psMetadataLookupPtrTYPE(psTime*, Time, PS_DATA_TIME, V) 1139 psMetadataLookupPtrTYPE(psVector*, Vector, PS_DATA_VECTOR, V) 1140 1103 1141 1104 1142 psMetadataItem* psMetadataGet(const psMetadata *md, … … 1257 1295 } 1258 1296 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 1360 1300 1361 1301 psList *psMetadataKeys(psMetadata *md)
Note:
See TracChangeset
for help on using the changeset viewer.
