Changeset 1324 for trunk/psLib/src/collections/psMetadata.c
- Timestamp:
- Jul 28, 2004, 4:04:20 PM (22 years ago)
- File:
-
- 1 edited
-
trunk/psLib/src/collections/psMetadata.c (modified) (12 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psLib/src/collections/psMetadata.c
r1314 r1324 11 11 * @author Ross Harman, MHPCC 12 12 * 13 * @version $Revision: 1. 1$ $Name: not supported by cvs2svn $14 * @date $Date: 2004-07-2 8 23:51:42$13 * @version $Revision: 1.2 $ $Name: not supported by cvs2svn $ 14 * @date $Date: 2004-07-29 02:04:20 $ 15 15 * 16 16 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 60 60 /* FUNCTION IMPLEMENTATION - LOCAL */ 61 61 /*****************************************************************************/ 62 static void p_psMetadataItemFree(psMetadataItem *metadataItem)62 static void metadataItemFree(psMetadataItem *metadataItem) 63 63 { 64 64 psMetadataType type; … … 81 81 } 82 82 83 static void p_psMetadataFree(psMetadata *metadata)83 static void metadataFree(psMetadata *metadata) 84 84 { 85 85 if (metadata == NULL) { … … 97 97 psMetadataItem *psMetadataItemAlloc(const char *name, psMetadataType type, const char *comment, ...) 98 98 { 99 va_list argPtr = NULL;99 va_list argPtr; 100 100 psMetadataItem *metadataItem = NULL; 101 101 … … 128 128 129 129 // Set deallocator 130 p_psMemSetDeallocator(metadataItem,(psFreeFcn) p_psMetadataItemFree);130 p_psMemSetDeallocator(metadataItem,(psFreeFcn)metadataItemFree); 131 131 132 132 // Allocate and set metadata item comment … … 140 140 141 141 // Set metadata item id 142 *(int*) metadataItem->id= ++metadataId;142 *(int*)(&metadataItem->id) = ++metadataId; 143 143 144 144 // Set metadata item type … … 191 191 192 192 // Set deallocator 193 p_psMemSetDeallocator(metadata,(psFreeFcn) p_psMetadataFree);193 p_psMemSetDeallocator(metadata,(psFreeFcn)metadataFree); 194 194 195 195 // Allocate internal containers … … 250 250 251 251 // The key was found and the new metadata item is a leaf node (its type isn't PS_META_ITEM_SET), so 252 // add the new metadata item as a child of the existing metadata item folder node.252 // add the new metadata item to hash as a child of the existing metadata item folder node. 253 253 if(!psListAdd(value->items, metadataItem, where)) { 254 254 psError(__func__, "Couldn't add metadata item to items list. Name: %s", … … 265 265 } else { 266 266 267 // Duplicate key not found. Add new metadata item to metadata collection's hash and list containers267 // Duplicate key not found. Add new metadata item to metadata collection's hash 268 268 if(!psHashAdd(mdTable, key, metadataItem)) { 269 269 psError(__func__, "Couldn't add metadata item to metadata collection table. Name: %s", … … 271 271 return false; 272 272 } 273 274 if(!psListAdd(md->list, metadataItem, where)) { 275 psError(__func__, "Couldn't add metadata item to metadata collection list. Name: %s", 276 metadataItem->name); 277 return false; 278 } 273 } 274 275 // Add all items to metadata collection's list, even if they have the same metadata item names 276 if(!psListAdd(md->list, metadataItem, where)) { 277 psError(__func__, "Couldn't add metadata item to metadata collection list. Name: %s", 278 metadataItem->name); 279 return false; 279 280 } 280 281 … … 285 286 const char *comment, ...) 286 287 { 287 va_list argPtr = NULL;288 va_list argPtr; 288 289 psMetadataItem *metadataItem = NULL; 289 290 … … 294 295 return psMetadataAddItem(md, where, metadataItem); 295 296 } 297 298 /** Remove an item from metadata collection. 299 * 300 * Items may be removed from metadata by specifing a key or location. If the key is null, the where argument 301 * is used instead. If name is not null, where is set to PS_LIST_UNKNOWN. If the item is found, it is removed 302 * from the metadata and true is returned. If the key is not unique, then all items corresponding to it are 303 * removed. 304 * 305 * @return bool: True for success, false for failure. 306 */ 307 bool psMetadataRemove(psMetadata *restrict md, int where, const char *restrict key) 308 { 309 /* int i = 0; 310 int numChildren = 0; 311 psList mdList = NULL; 312 psHash mdHash = NULL; 313 psMetadataItem *entry = NULL; 314 psMetadataItem *entryChild = NULL; 315 316 mdList = md->list 317 if(mdList == NULL) { 318 psError(__func__, "Null metadata list not allowed"); 319 return false; 320 } 321 322 mdTable = md->table; 323 if(mdTable == NULL) { 324 psError(__func__, "Null metadata table not allowed"); 325 return false; 326 } 327 328 // Select removal by key or index 329 if(key != NULL){ 330 331 // Remove by key name 332 entry = (psMetadataItem*)psHashLookup(mdTable, key); 333 if(entry == NULL) { 334 psError(__func__, "Couldn't find metadata item remove. Name: %s", key); 335 return false; 336 } 337 338 numChildren = entry->items->size; 339 if(entry->type==PS_META_ITEM_SET && numChildren>0){ 340 341 // Table entry has children. Entry and children must be removed from metadata collection's list 342 psListSetIterator(list, PS_LIST_HEAD); 343 entryChild = psListGetCurrent(list); 344 while (entryChild != NULL) { 345 if(!psListRemove(mdList, entry, PS_LIST_UNKNOWN)) { 346 psError(__func__, "Couldn't remove metadata item from list. Name: %s", key); 347 return false; 348 } 349 } 350 entryChild = psListGetNext(list); 351 } else { 352 353 // Table entry does not have children. Entry only must be removed from metadata collection's list 354 if(!psListRemove(mdList, entry, PS_LIST_UNKNOWN)) { 355 psError(__func__, "Couldn't remove metadata item from list. Name: %s", key); 356 return false; 357 } 358 359 } 360 361 // Remove entry from table once duplictes have been removed from the metadata collection's list 362 if(!psHashRemove(mdHash, key)) { 363 psError(__func__, "Couldn't remove metadata item from table. Name: %s", key); 364 return false; 365 } 366 } else { 367 // Remove by index 368 369 }*/ 370 371 return true; 372 } 373
Note:
See TracChangeset
for help on using the changeset viewer.
