Changeset 6195 for trunk/psLib/src/types
- Timestamp:
- Jan 25, 2006, 2:46:54 PM (21 years ago)
- File:
-
- 1 edited
-
trunk/psLib/src/types/psMetadata.c (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psLib/src/types/psMetadata.c
r6189 r6195 12 12 * @author Ross Harman, MHPCC 13 13 * 14 * @version $Revision: 1.9 5$ $Name: not supported by cvs2svn $15 * @date $Date: 2006-01-2 5 03:02:47$14 * @version $Revision: 1.96 $ $Name: not supported by cvs2svn $ 15 * @date $Date: 2006-01-26 00:46:54 $ 16 16 * 17 17 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 324 324 out = psMetadataAlloc(); 325 325 } 326 psMetadataItem *item = NULL;326 // psMetadataItem *item = NULL; 327 327 psMetadataIterator *iter = NULL; 328 328 iter = psMetadataIteratorAlloc(*(psMetadata**)&in, PS_LIST_HEAD, NULL); 329 item = psMetadataGetAndIncrement(iter); 330 while (item != NULL) { 331 psMetadataAddItem(out, item, PS_LIST_TAIL, 0); 329 /* 332 330 item = psMetadataGetAndIncrement(iter); 333 } 334 psFree(item); 331 while (item != NULL) { 332 psMetadataAddItem(out, item, PS_LIST_TAIL, 0); 333 item = psMetadataGetAndIncrement(iter); 334 } 335 psFree(item); 336 psFree(iter); 337 return out; 338 */ 339 psMetadataItem *inItem = NULL; 340 unsigned long numPointers = 0; // Number of pointers we were forced to copy 341 while ((inItem = psMetadataGetAndIncrement(iter))) { 342 // Need to look for MULTI, which won't be picked up using the iterator. 343 psMetadataItem *multiCheckItem = psMetadataLookup(in, inItem->name); 344 unsigned int flag = PS_META_REPLACE; // Flag to indicate MULTI; otherwise, replace 345 if (multiCheckItem->type == PS_DATA_METADATA_MULTI) { 346 psTrace(__func__, 10, "MULTI: %s (%s)\n", inItem->name, inItem->comment); 347 flag = PS_DATA_METADATA_MULTI; 348 } 349 psTrace(__func__, 5, "Copying %s (%s)...\n", inItem->name, inItem->comment); 350 351 352 // case PS_TYPE_##NAME: 353 #define PS_METADATA_COPY_CASE(NAME,TYPE) \ 354 case PS_DATA_##NAME: \ 355 if (! psMetadataAdd(out, PS_LIST_TAIL, inItem->name, \ 356 PS_DATA_##NAME | flag, inItem->comment, inItem->data.TYPE)) { \ 357 psErrorStackPrint(stderr, "Error copying %s (%s) in the metadata\n", \ 358 inItem->name, inItem->comment); \ 359 } \ 360 break; 361 362 switch (inItem->type) { 363 // Numerical types 364 PS_METADATA_COPY_CASE(BOOL,B); 365 // PS_METADATA_COPY_CASE(S8,S8); 366 // PS_METADATA_COPY_CASE(S16,S16); 367 PS_METADATA_COPY_CASE(S32,S32); 368 // PS_METADATA_COPY_CASE(U8,U8); 369 // PS_METADATA_COPY_CASE(U16,U16); 370 // PS_METADATA_COPY_CASE(U32,U32); 371 PS_METADATA_COPY_CASE(F32,F32); 372 PS_METADATA_COPY_CASE(F64,F64); 373 374 case PS_DATA_VECTOR: { 375 psVector *vecCopy = psVectorCopy(NULL, (psVector*)(inItem->data.V), 376 ((psVector*)(inItem->data.V))->type.type); 377 if (vecCopy == NULL) { 378 psError(PS_ERR_BAD_PARAMETER_NULL, false, 379 "Error copying vector. Vector skipped.\n"); 380 } else { 381 psMetadataAddVector(out, PS_LIST_TAIL, inItem->name, flag, 382 inItem->comment, vecCopy); 383 psFree(vecCopy); 384 } 385 break; 386 } 387 case PS_DATA_TIME: { 388 psTime *timeCopy = p_psTimeCopy( (psTime*)(inItem->data.V) ); 389 if (timeCopy == NULL) { 390 psError(PS_ERR_BAD_PARAMETER_NULL, false, 391 "Error copying time. Time skipped.\n"); 392 } else { 393 psMetadataAddTime(out, PS_LIST_TAIL, inItem->name, flag, 394 inItem->comment, timeCopy); 395 psFree(timeCopy); 396 } 397 break; 398 } 399 // String: relying on the fact that this will copy the string, not point at it. 400 case PS_DATA_STRING: 401 psMetadataAdd(out, PS_LIST_TAIL, inItem->name, PS_DATA_STRING | 402 flag, inItem->comment, inItem->data.V); 403 break; 404 // Metadata: copy the next level and stuff that in too 405 case PS_DATA_METADATA: { 406 psMetadata *metadata = psMetadataCopy(NULL, inItem->data.md); 407 psMetadataAdd(out, PS_LIST_TAIL, inItem->name, 408 PS_DATA_METADATA | flag, inItem->comment, metadata); 409 psFree(metadata); 410 break; 411 } 412 // Other kinds of pointers 413 default: 414 numPointers++; 415 psTrace(__func__, 10, "Copying a pointer in the metadata: %x\n", inItem->type); 416 psMetadataAdd(out, PS_LIST_TAIL, inItem->name, inItem->type | flag, 417 inItem->comment, inItem->data.V); 418 break; 419 } 420 } 335 421 psFree(iter); 422 423 if (numPointers > 0) { 424 psLogMsg(__func__, PS_LOG_WARN, 425 "Forced to copy %d pointers when copying metadata. Updating the " 426 "copied psMetadata will affect the original!\n", numPointers); 427 } 428 336 429 return out; 337 430 }
Note:
See TracChangeset
for help on using the changeset viewer.
