Changeset 2607
- Timestamp:
- Dec 3, 2004, 1:19:07 PM (22 years ago)
- Location:
- trunk/psLib
- Files:
-
- 37 edited
-
src/astro/psTime.c (modified) (4 diffs)
-
src/astronomy/psAstronomyErrors.dat (modified) (2 diffs)
-
src/astronomy/psAstronomyErrors.h (modified) (3 diffs)
-
src/astronomy/psMetadata.c (modified) (26 diffs)
-
src/astronomy/psMetadata.h (modified) (12 diffs)
-
src/astronomy/psMetadataIO.c (modified) (35 diffs)
-
src/astronomy/psMetadataIO.h (modified) (3 diffs)
-
src/astronomy/psTime.c (modified) (4 diffs)
-
src/collections/psMetadata.c (modified) (26 diffs)
-
src/collections/psMetadata.h (modified) (12 diffs)
-
src/collections/psMetadataIO.c (modified) (35 diffs)
-
src/collections/psMetadataIO.h (modified) (3 diffs)
-
src/dataManip/psFunctions.c (modified) (2 diffs)
-
src/math/psPolynomial.c (modified) (2 diffs)
-
src/math/psSpline.c (modified) (2 diffs)
-
src/sys/psType.h (modified) (2 diffs)
-
src/sysUtils/psType.h (modified) (2 diffs)
-
src/types/psMetadata.c (modified) (26 diffs)
-
src/types/psMetadata.h (modified) (12 diffs)
-
src/types/psMetadataConfig.c (modified) (35 diffs)
-
src/types/psMetadataConfig.h (modified) (3 diffs)
-
src/xml/psXML.c (modified) (35 diffs)
-
src/xml/psXML.h (modified) (3 diffs)
-
test/astronomy/tst_psMetadataIO.c (modified) (9 diffs)
-
test/astronomy/tst_psMetadata_01.c (modified) (7 diffs)
-
test/astronomy/tst_psMetadata_02.c (modified) (5 diffs)
-
test/astronomy/tst_psMetadata_03.c (modified) (10 diffs)
-
test/astronomy/tst_psMetadata_04.c (modified) (7 diffs)
-
test/astronomy/tst_psMetadata_05.c (modified) (7 diffs)
-
test/astronomy/tst_psMetadata_06.c (modified) (6 diffs)
-
test/collections/tst_psMetadataIO.c (modified) (9 diffs)
-
test/collections/tst_psMetadata_01.c (modified) (7 diffs)
-
test/collections/tst_psMetadata_02.c (modified) (5 diffs)
-
test/collections/tst_psMetadata_03.c (modified) (10 diffs)
-
test/collections/tst_psMetadata_04.c (modified) (7 diffs)
-
test/collections/tst_psMetadata_05.c (modified) (7 diffs)
-
test/collections/tst_psMetadata_06.c (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psLib/src/astro/psTime.c
r2515 r2607 10 10 * @author Ross Harman, MHPCC 11 11 * 12 * @version $Revision: 1.4 5$ $Name: not supported by cvs2svn $13 * @date $Date: 2004-1 1-29 18:41:07$12 * @version $Revision: 1.46 $ $Name: not supported by cvs2svn $ 13 * @date $Date: 2004-12-03 23:15:00 $ 14 14 * 15 15 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 196 196 psS32 j = 0; 197 197 psS32 numTables = 0; 198 psU32 nFail = 0; 198 199 psVector *tablesFrom = NULL; 199 200 psVector *tablesTo = NULL; … … 205 206 206 207 // Read time config file 207 if(psMetadataParseConfig(&timeMetadata, fileName, true) < 0) { 208 timeMetadata = psMetadataParseConfig(timeMetadata, &nFail, fileName, true); 209 if(timeMetadata == NULL) { 210 return false; 211 } else if(nFail != 0) { 208 212 return false; 209 213 } … … 298 302 if(metadataNamesPtr != NULL) { 299 303 psMetadataAdd(timeMetadata, PS_LIST_TAIL, strcat(metadataTableNames[j], "Table"), 300 PS_ META_LOOKUPTABLE, NULL, table);304 PS_TYPE_PTR, PS_META_LOOKUPTABLE, NULL, table); 301 305 foundTable = true; 302 306 } else if(foundTable==false && j==numTables-1) { -
trunk/psLib/src/astronomy/psAstronomyErrors.dat
r2301 r2607 33 33 psCoord_OFFSET_MODE_UNKNOWN Specified offset mode, 0x%x, is not supported. 34 34 # 35 psAstrometry_NONLINEAR_TRANSFORM The %s transfrom is not linear. Only linear transforms are supported. 35 psAstrometry_NONLINEAR_TRANSFORM The %s transfrom is not linear. Only linear transforms are supported. 36 36 # 37 37 psMetadata_METATYPE_INVALID Specified psMetadataType, %d, is not supported. … … 50 50 psMetadataIO_FITS_METATYPE_INVALID Specified FITS metadata type, %c, is not supported. 51 51 psMetadataIO_ADD_FAILED Failed to add metadata item, %s. 52 psMetadataIO_FILE_OPEN_FAILED Failed to open file '%s'. Check if it exists and it has the proper permissions. 53 psMetadataIO_FILE_MULTIPLE_CHAR More than one '%c' character not allowed. Found on line %d of %s. 54 psMetadataIO_FILE_ELEMENT_NULL Failed to read a metadata %s on line %d of %s. 55 psMetadataIO_FILE_TYPE_INVALID Metadata type '%s', found on line %d of %s, is not invalid. 56 psMetadataIO_OVERWRITE_ITEM Duplicate Metadata item, %s, found on line %d of %s. Overwrite not allowed. 57 psMetadataIO_PARSE_FAILED Failed to parse the value '%s' of metadata item %s, type %s, on line %d of %s. 52 psMetadataIO_FILE_OPEN_FAILED Failed to open file '%s'. Check if it exists and it has the proper permissions. 53 psMetadataIO_FILE_MULTIPLE_CHAR More than one '%c' character not allowed. Found on line %u of %s. 54 psMetadataIO_FILE_ELEMENT_NULL Failed to read a metadata %s on line %u of %s. 55 psMetadataIO_FILE_TYPE_INVALID Metadata type '%s', found on line %u of %s, is not invalid. 56 psMetadataIO_OVERWRITE_ITEM Duplicate Metadata item, %s, found on line %u of %s. Overwrite not allowed. 57 psMetadataIO_PARSE_FAILED Failed to parse the value '%s' of metadata item %s, type %s, on line %u of %s. 58 psMetadataIO_NO_NAME Failed to find key 'name' in table on line %u of %s. 59 psMetadataIO_TYPE_INVALID_LINE_FILE Specified type, %s, is not supported on line %u of %s. 60 psMetadataIO_TAG_MISMATCH Start tag, %s and end tag, %s do not agree. 61 psMetadataIO_TAG_UNKNOWN Invalid end tag name, %s. 58 62 59 -
trunk/psLib/src/astronomy/psAstronomyErrors.h
r2521 r2607 7 7 * @author Robert DeSonia, MHPCC 8 8 * 9 * @version $Revision: 1. 6$ $Name: not supported by cvs2svn $10 * @date $Date: 2004-1 1-30 00:25:50$9 * @version $Revision: 1.7 $ $Name: not supported by cvs2svn $ 10 * @date $Date: 2004-12-03 23:14:13 $ 11 11 * 12 12 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 23 23 * $2 The error text (rest of the line in psAstronomyErrors.dat) 24 24 * $n The order of the source line in psAstronomyErrors.dat (comments excluded) 25 * 25 * 26 26 * DO NOT EDIT THE LINES BETWEEN //~Start and //~End! ANY CHANGES WILL BE OVERWRITTEN. 27 27 */ … … 66 66 #define PS_ERRORTEXT_psMetadata_FIND_INDEX_FAILED "Could not find metadata item at index %d." 67 67 #define PS_ERRORTEXT_psMetadataIO_TYPE_INVALID "Specified type, %d, is not supported." 68 #define PS_ERRORTEXT_psMetadataIO_TYPE_INVALID_LINE_FILE "Specified type, %s, is not supported on line %lld of %s"69 68 #define PS_ERRORTEXT_psMetadataIO_EXTNUM_NOTPOSITIVE "Specified extension number, %d, is invalid. Value must be positive if no extension name is given." 70 69 #define PS_ERRORTEXT_psMetadataIO_FITS_METATYPE_INVALID "Specified FITS metadata type, %c, is not supported." 71 70 #define PS_ERRORTEXT_psMetadataIO_ADD_FAILED "Failed to add metadata item, %s." 72 71 #define PS_ERRORTEXT_psMetadataIO_FILE_OPEN_FAILED "Failed to open file '%s'. Check if it exists and it has the proper permissions." 73 #define PS_ERRORTEXT_psMetadataIO_FILE_MULTIPLE_CHAR "More than one '%c' character not allowed. Found on line %d of %s." 74 #define PS_ERRORTEXT_psMetadataIO_FILE_ELEMENT_NULL "Failed to read a metadata %s on line %lld of %s." 75 #define PS_ERRORTEXT_psMetadataIO_FILE_TYPE_INVALID "Metadata type '%s', found on line %lld of %s, is not invalid." 76 #define PS_ERRORTEXT_psMetadataIO_OVERWRITE_ITEM "Duplicate Metadata item, %s, found on line %lld of %s. Overwrite not allowed." 77 #define PS_ERRORTEXT_psMetadataIO_PARSE_FAILED "Failed to parse the value '%s' of metadata item %s, type %s, on line %lld of %s." 78 #define PS_ERRORTEXT_psMetadataIO_NO_NAME "Couldn't find XML name attribute on line %lld of %s." 79 #define PS_ERRORTEXT_psMetadataIO_TAG_MISMATCH "Start and end tag names don't agree, start tag, %s end tag, %s" 80 #define PS_ERRORTEXT_psMetadataIO_TAG_UNKNOWN "Unknown tag name, %s" 72 #define PS_ERRORTEXT_psMetadataIO_FILE_MULTIPLE_CHAR "More than one '%c' character not allowed. Found on line %u of %s." 73 #define PS_ERRORTEXT_psMetadataIO_FILE_ELEMENT_NULL "Failed to read a metadata %s on line %u of %s." 74 #define PS_ERRORTEXT_psMetadataIO_FILE_TYPE_INVALID "Metadata type '%s', found on line %u of %s, is not invalid." 75 #define PS_ERRORTEXT_psMetadataIO_OVERWRITE_ITEM "Duplicate Metadata item, %s, found on line %u of %s. Overwrite not allowed." 76 #define PS_ERRORTEXT_psMetadataIO_PARSE_FAILED "Failed to parse the value '%s' of metadata item %s, type %s, on line %u of %s." 77 #define PS_ERRORTEXT_psMetadataIO_NO_NAME "Failed to find key 'name' in table on line %u of %s." 78 #define PS_ERRORTEXT_psMetadataIO_TYPE_INVALID_LINE_FILE "Specified type, %s, is not supported on line %u of %s." 79 #define PS_ERRORTEXT_psMetadataIO_TAG_MISMATCH "Start tag, %s and end tag, %s do not agree." 80 #define PS_ERRORTEXT_psMetadataIO_TAG_UNKNOWN "Invalid end tag name, %s." 81 81 //~End 82 82 -
trunk/psLib/src/astronomy/psMetadata.c
r2521 r2607 12 12 * @author Ross Harman, MHPCC 13 13 * 14 * @version $Revision: 1.3 8$ $Name: not supported by cvs2svn $15 * @date $Date: 2004-1 1-30 00:26:53$14 * @version $Revision: 1.39 $ $Name: not supported by cvs2svn $ 15 * @date $Date: 2004-12-03 23:14:28 $ 16 16 * 17 17 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 80 80 psFree(metadataItem->name); 81 81 psFree(metadataItem->comment); 82 psFree(metadataItem->items); 83 if (type == PS_META_STR || type == PS_META_VEC || type == PS_META_IMG || type == PS_META_LOOKUPTABLE || 84 type == PS_META_JPEG || type == PS_META_PNG || type == PS_META_ASTROM || type == PS_META_UNKNOWN || 85 type == PS_META_HASH) { 82 if (type != PS_META_PRIMITIVE) { 86 83 psFree(metadataItem->data.V); 87 84 } … … 101 98 /*****************************************************************************/ 102 99 103 psMetadataItem* psMetadataItemAlloc(const char *name, psMetadataType type, const char *comment, ...) 100 psMetadataItem* psMetadataItemAlloc(const char *name, psElemType pType, psMetadataType type, 101 const char *comment, ...) 104 102 { 105 103 va_list argPtr; … … 110 108 111 109 // Call metadata item allocation 112 metadataItem = psMetadataItemAllocV(name, type, comment, argPtr);110 metadataItem = psMetadataItemAllocV(name, pType, type, comment, argPtr); 113 111 114 112 // Clean up stack after variable arguement has been used … … 118 116 } 119 117 120 psMetadataItem* psMetadataItemAllocV(const char *name, psMetadataType type, const char *comment, 121 va_list argPtr) 122 { 123 psVector *vecIn = NULL; 124 psVector *vecOut = NULL; 118 psMetadataItem* psMetadataItemAllocV(const char *name, psElemType pType, psMetadataType type, 119 const char *comment, va_list argPtr) 120 { 125 121 psMetadataItem* metadataItem = NULL; 126 122 … … 129 125 130 126 // Allocate metadata item 131 metadataItem = (psMetadataItem* ) psAlloc(sizeof(psMetadataItem)); 127 metadataItem = (psMetadataItem*) psAlloc(sizeof(psMetadataItem)); 128 metadataItem->data.V = NULL; 132 129 133 130 // Set deallocator … … 148 145 // Set metadata item type 149 146 metadataItem->type = type; 150 metadataItem->data.V = NULL; 151 152 // Allocate metadata items with same name. 153 metadataItem->items = psListAlloc(NULL); 147 metadataItem->pType = pType; 154 148 155 149 // Allocate and set metadata item name … … 158 152 159 153 // Set metadata item value 160 switch (type) { 161 case PS_META_ITEM_SET: 162 break; 163 case PS_META_BOOL: 164 metadataItem->data.B = (psBool)va_arg(argPtr, psS32); 165 break; 166 case PS_META_S32: 167 metadataItem->data.S32 = (psS32)va_arg(argPtr, psS32); 168 break; 169 case PS_META_F32: 170 metadataItem->data.F32 = (psF32)va_arg(argPtr, psF64); 171 break; 172 case PS_META_F64: 173 metadataItem->data.F64 = va_arg(argPtr, psF64); 154 switch(type) { 155 case PS_META_PRIMITIVE: 156 switch(pType) { 157 case PS_TYPE_BOOL: 158 metadataItem->data.B = (psBool)va_arg(argPtr, psS32); 159 break; 160 case PS_TYPE_S32: 161 metadataItem->data.S32 = (psS32)va_arg(argPtr, psS32); 162 break; 163 case PS_TYPE_F32: 164 metadataItem->data.F32 = (psF32)va_arg(argPtr, psF64); 165 break; 166 case PS_TYPE_F64: 167 metadataItem->data.F64 = (psF64)va_arg(argPtr, psF64); 168 break; 169 default: 170 psError(PS_ERR_BAD_PARAMETER_VALUE, true, PS_ERRORTEXT_psMetadata_METATYPE_INVALID, type); 171 psFree(metadataItem); 172 metadataItem = NULL; 173 } 174 174 break; 175 175 case PS_META_STR: 176 // Perform copy of input strings 176 177 metadataItem->data.V = psStringNCopy(va_arg(argPtr, char *), MAX_STRING_LENGTH); 177 178 break; 179 case PS_META_LIST: 178 180 case PS_META_VEC: 179 vecIn = (psVector*)va_arg(argPtr, psVector*); 180 vecOut = psVectorAlloc(vecIn->nalloc, vecIn->type.type); 181 memcpy(vecOut->data.V, vecIn->data.V, vecIn->nalloc*PSELEMTYPE_SIZEOF(vecIn->type.type)); 182 metadataItem->data.V = vecOut; 183 break; 181 case PS_META_HASH: 184 182 case PS_META_LOOKUPTABLE: 185 metadataItem->data.V = va_arg(argPtr, psLookupTable*); // Deep copy of input data not performed186 break;187 case PS_META_HASH:188 metadataItem->data.V = va_arg(argPtr, psHash*); // Deep copy of input data not performed189 break;190 case PS_META_IMG:191 183 case PS_META_JPEG: 192 184 case PS_META_PNG: 193 185 case PS_META_ASTROM: 194 186 case PS_META_UNKNOWN: 187 // Copy of input data not performed due to variability of data types 188 metadataItem->data.V = va_arg(argPtr, psPtr); 189 break; 195 190 default: 196 191 psError(PS_ERR_BAD_PARAMETER_VALUE, true, PS_ERRORTEXT_psMetadata_METATYPE_INVALID, type); … … 209 204 210 205 // Allocate metadata 211 metadata = (psMetadata* ) psAlloc(sizeof(psMetadata));206 metadata = (psMetadata*) psAlloc(sizeof(psMetadata)); 212 207 // Set deallocator 213 208 p_psMemSetDeallocator(metadata, (psFreeFcn) metadataFree); 214 209 215 210 // Allocate metadata's internal containers 216 list = (psList* ) psListAlloc(NULL);217 table = (psHash* ) psHashAlloc(10);211 list = (psList*) psListAlloc(NULL); 212 table = (psHash*) psHashAlloc(10); 218 213 219 214 metadata->list = list; … … 223 218 } 224 219 225 psBool psMetadataAddItem( psMetadata *restrict md, psMetadataItem *restrict metadataItem, psS32 location)220 psBool psMetadataAddItem(psMetadata *restrict md, psMetadataItem *restrict metadataItem, psS32 location) 226 221 { 227 222 char * key = NULL; … … 230 225 psMetadataItem *existingEntry = NULL; 231 226 psMetadataItem *newFolderEntry = NULL; 232 psMetadataType newType = PS_META_ITEM_SET;227 psMetadataType newType; 233 228 234 229 PS_PTR_CHECK_NULL(md,NULL); … … 247 242 if(existingEntry != NULL) { 248 243 249 if(existingEntry->type == PS_META_ITEM_SET) { 244 if(existingEntry->type == PS_META_LIST) { 245 246 if(existingEntry->data.list == NULL) { 247 existingEntry->data.list = psListAlloc(NULL); 248 } 250 249 251 250 // Add leaf node to existing folder node 252 if(!psListAdd(existingEntry->items, PS_LIST_TAIL, metadataItem)) { 253 psError(PS_ERR_UNKNOWN,false, 254 PS_ERRORTEXT_psMetadata_ADD_LIST_FAILED, 255 metadataItem->name ); 256 return false; 257 } 258 } else if(existingEntry->type != PS_META_ITEM_SET && newType!= PS_META_ITEM_SET) { 251 if(!psListAdd(existingEntry->data.list, PS_LIST_TAIL, metadataItem)) { 252 psError(PS_ERR_UNKNOWN, false, PS_ERRORTEXT_psMetadata_ADD_LIST_FAILED, metadataItem->name); 253 return false; 254 } 255 } else if(existingEntry->type != PS_META_LIST && newType!= PS_META_LIST) { 259 256 260 257 // Leaf node replaces another leaf. Make new folder node and add leaves. 261 newFolderEntry = psMetadataItemAlloc(key, PS_META_ITEM_SET, NULL, NULL); 262 263 if(!psListAdd(newFolderEntry->items, PS_LIST_TAIL, existingEntry)) { 264 psError(PS_ERR_UNKNOWN,false, 265 PS_ERRORTEXT_psMetadata_ADD_LIST_FAILED, 266 key); 258 newFolderEntry = psMetadataItemAlloc(key, PS_TYPE_PTR, PS_META_LIST, NULL, NULL); 259 newFolderEntry->data.list = psListAlloc(NULL); 260 261 if(!psListAdd(newFolderEntry->data.list, PS_LIST_TAIL, existingEntry)) { 262 psError(PS_ERR_UNKNOWN,false, PS_ERRORTEXT_psMetadata_ADD_LIST_FAILED,key); 267 263 psFree(newFolderEntry); 268 264 return false; 269 265 } 270 266 271 if(!psListAdd(newFolderEntry->items, PS_LIST_TAIL, metadataItem)) { 272 psError(PS_ERR_UNKNOWN,false, 273 PS_ERRORTEXT_psMetadata_ADD_LIST_FAILED, 274 key); 267 if(!psListAdd(newFolderEntry->data.list, PS_LIST_TAIL, metadataItem)) { 268 psError(PS_ERR_UNKNOWN,false, PS_ERRORTEXT_psMetadata_ADD_LIST_FAILED,key); 275 269 psFree(newFolderEntry); 276 270 return false; … … 278 272 279 273 if(!psHashRemove(mdTable, key)) { 280 psError(PS_ERR_UNKNOWN,false, 281 PS_ERRORTEXT_psMetadata_REMOVE_TABLE_FAILED, 282 key); 274 psError(PS_ERR_UNKNOWN,false,PS_ERRORTEXT_psMetadata_REMOVE_TABLE_FAILED,key); 283 275 psFree(newFolderEntry); 284 276 return false; … … 286 278 287 279 if(!psHashAdd(mdTable, key, newFolderEntry)) { 288 psError(PS_ERR_UNKNOWN,false, 289 PS_ERRORTEXT_psMetadata_ADD_TABLE_FAILED, 290 key); 280 psError(PS_ERR_UNKNOWN,false,PS_ERRORTEXT_psMetadata_ADD_TABLE_FAILED,key); 291 281 psFree(newFolderEntry); 292 282 return false; … … 298 288 299 289 // Folder node replaces leaf or folder node - Put old node into new folder and remove from table 300 if(!psListAdd(metadataItem->items, PS_LIST_TAIL, existingEntry)) { 301 psError(PS_ERR_UNKNOWN,false, 302 PS_ERRORTEXT_psMetadata_ADD_LIST_FAILED, 303 key); 290 if(metadataItem->data.list == NULL) { 291 metadataItem->data.list = psListAlloc(NULL); 292 } 293 294 if(!psListAdd(metadataItem->data.list, PS_LIST_TAIL, existingEntry)) { 295 psError(PS_ERR_UNKNOWN,false,PS_ERRORTEXT_psMetadata_ADD_LIST_FAILED,key); 304 296 return false; 305 297 } 306 298 307 299 if(!psHashRemove(mdTable, key)) { 308 psError(PS_ERR_UNKNOWN,false, 309 PS_ERRORTEXT_psMetadata_REMOVE_TABLE_FAILED, 310 key); 300 psError(PS_ERR_UNKNOWN,false,PS_ERRORTEXT_psMetadata_REMOVE_TABLE_FAILED,key); 311 301 return false; 312 302 } 313 303 314 304 if(!psHashAdd(mdTable, key, metadataItem)) { 315 psError(PS_ERR_UNKNOWN,false, 316 PS_ERRORTEXT_psMetadata_ADD_TABLE_FAILED, 317 key); 305 psError(PS_ERR_UNKNOWN,false,PS_ERRORTEXT_psMetadata_ADD_TABLE_FAILED,key); 318 306 return false; 319 307 } … … 323 311 // Node doesn't exist - Add new metadata item to metadata collection's hash 324 312 if(!psHashAdd(mdTable, key, metadataItem)) { 325 psError(PS_ERR_UNKNOWN,false, 326 PS_ERRORTEXT_psMetadata_ADD_TABLE_FAILED, 327 key); 313 psError(PS_ERR_UNKNOWN,false,PS_ERRORTEXT_psMetadata_ADD_TABLE_FAILED,key); 328 314 return false; 329 315 } … … 331 317 332 318 // Add items to metadata collection's list, even if they have the same metadata item names. Folder nodes 333 // (PS_META_ ITEM_SET metadata items) are not added, since the metadata list is flat.334 if(metadataItem->type != PS_META_ ITEM_SET) {319 // (PS_META_LIST metadata items) are not added, since the metadata list is flat. 320 if(metadataItem->type != PS_META_LIST) { 335 321 if(!psListAdd(mdList, location, metadataItem)) { 336 psError(PS_ERR_UNKNOWN,false, 337 PS_ERRORTEXT_psMetadata_ADD_COLLECTION_FAILED, 338 key); 322 psError(PS_ERR_UNKNOWN,false,PS_ERRORTEXT_psMetadata_ADD_COLLECTION_FAILED,key); 339 323 return false; 340 324 } … … 344 328 } 345 329 346 psBool psMetadataAdd(psMetadata* restrict md, psS32 where, const char *name, ps MetadataType type,347 const char *comment, ...)330 psBool psMetadataAdd(psMetadata* restrict md, psS32 where, const char *name, psElemType pType, 331 psMetadataType type, const char *comment, ...) 348 332 { 349 333 va_list argPtr; … … 351 335 352 336 va_start(argPtr, comment); 353 metadataItem = psMetadataItemAllocV(name, type, comment, argPtr);337 metadataItem = psMetadataItemAllocV(name, pType, type, comment, argPtr); 354 338 va_end(argPtr); 355 339 356 340 if (!psMetadataAddItem(md, metadataItem, where)) { 357 psError(PS_ERR_UNKNOWN,false, 358 PS_ERRORTEXT_psMetadata_ADD_FAILED); 341 psError(PS_ERR_UNKNOWN,false,PS_ERRORTEXT_psMetadata_ADD_FAILED); 359 342 psFree(metadataItem); 360 343 return false; … … 368 351 psBool psMetadataRemove(psMetadata* restrict md, psS32 where, const char *restrict key) 369 352 { 370 psS32 numChildren = 0;371 353 psList* mdList = NULL; 354 psList* entryList = NULL; 372 355 psHash* mdTable = NULL; 373 356 psMetadataItem* entry = NULL; … … 386 369 387 370 // Remove by key name 388 entry = (psMetadataItem* )psHashLookup(mdTable, key);371 entry = (psMetadataItem*)psHashLookup(mdTable, key); 389 372 if (entry == NULL) { 390 psError(PS_ERR_BAD_PARAMETER_VALUE, true, 391 PS_ERRORTEXT_psMetadata_FIND_FAILED, 392 key); 373 psError(PS_ERR_BAD_PARAMETER_VALUE, true, PS_ERRORTEXT_psMetadata_FIND_FAILED, key); 393 374 return false; 394 375 } 395 376 396 numChildren = entry->items->size; 397 if (entry->type == PS_META_ITEM_SET && numChildren > 0) { 377 if (entry->type == PS_META_LIST) { 398 378 399 379 // Table entry has children. Entry and children must be removed from metadata collection's list 400 psListSetIterator(entry ->items, PS_LIST_HEAD);401 entryChild = psListGetCurrent(entry ->items);402 while (entryChild != NULL) {380 psListSetIterator(entryList, PS_LIST_HEAD); 381 entryChild = psListGetCurrent(entryList); 382 while(entryChild != NULL) { 403 383 if (!psListRemove(mdList, PS_LIST_UNKNOWN, entryChild)) { 404 psError(PS_ERR_UNKNOWN,false, 405 PS_ERRORTEXT_psMetadata_REMOVE_LIST_FAILED, 406 key); 384 psError(PS_ERR_UNKNOWN, false, PS_ERRORTEXT_psMetadata_REMOVE_LIST_FAILED, key); 407 385 return false; 408 386 } 409 entryChild = psListGetNext(entry ->items);387 entryChild = psListGetNext(entryList); 410 388 } 411 389 } else { … … 413 391 // Table entry has no children. Remove entry from metadata collection's list 414 392 if (!psListRemove(mdList, PS_LIST_UNKNOWN, entry)) { 415 psError(PS_ERR_UNKNOWN,false, 416 PS_ERRORTEXT_psMetadata_REMOVE_LIST_FAILED, 417 key); 393 psError(PS_ERR_UNKNOWN, false, PS_ERRORTEXT_psMetadata_REMOVE_LIST_FAILED, key); 418 394 return false; 419 395 } … … 421 397 // Remove entry from metadata collection's table 422 398 if (!psHashRemove(mdTable, key)) { 423 psError(PS_ERR_UNKNOWN,false, 424 PS_ERRORTEXT_psMetadata_REMOVE_TABLE_FAILED, 425 key); 399 psError(PS_ERR_UNKNOWN, false, PS_ERRORTEXT_psMetadata_REMOVE_TABLE_FAILED, key); 426 400 return false; 427 401 } … … 431 405 entry = psListGet(mdList, where); 432 406 if (entry == NULL) { 433 psError(PS_ERR_BAD_PARAMETER_VALUE, true, 434 PS_ERRORTEXT_psMetadata_FIND_INDEX_FAILED, 435 where); 407 psError(PS_ERR_BAD_PARAMETER_VALUE, true, PS_ERRORTEXT_psMetadata_FIND_INDEX_FAILED, where); 436 408 return false; 437 409 } 438 410 439 411 key = entry->name; 440 if (key == NULL) { 441 psError(PS_ERR_BAD_PARAMETER_VALUE, true, 442 PS_ERRORTEXT_psMetadata_REMOVE_LIST_INDEX_FAILED, 443 where); 412 if(key == NULL) { 413 psError(PS_ERR_BAD_PARAMETER_VALUE, true, PS_ERRORTEXT_psMetadata_REMOVE_LIST_INDEX_FAILED, where); 444 414 return false; 445 415 } … … 463 433 mdTable = md->table; 464 434 465 entry = (psMetadataItem* )psHashLookup(mdTable, key);435 entry = (psMetadataItem*)psHashLookup(mdTable, key); 466 436 if (entry == NULL) { 467 437 return NULL; … … 478 448 PS_PTR_CHECK_NULL(md->list,NULL); 479 449 480 entry = (psMetadataItem* ) psListGet(md->list, where);450 entry = (psMetadataItem*) psListGet(md->list, where); 481 451 if (entry == NULL) { 482 psError(PS_ERR_BAD_PARAMETER_VALUE, true, 483 PS_ERRORTEXT_psMetadata_FIND_INDEX_FAILED, 484 where); 452 psError(PS_ERR_BAD_PARAMETER_VALUE, true, PS_ERRORTEXT_psMetadata_FIND_INDEX_FAILED, where); 485 453 return NULL; 486 454 } -
trunk/psLib/src/astronomy/psMetadata.h
r2521 r2607 11 11 * @author Ross Harman, MHPCC 12 12 * 13 * @version $Revision: 1.2 6$ $Name: not supported by cvs2svn $14 * @date $Date: 2004-1 1-30 00:27:14 $13 * @version $Revision: 1.27 $ $Name: not supported by cvs2svn $ 14 * @date $Date: 2004-12-03 23:14:34 $ 15 15 * 16 16 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 33 33 */ 34 34 typedef enum { 35 PS_META_ITEM_SET = 0, ///< Null. Metadata is in psMetadataItem.items 36 PS_META_BOOL, ///< Boolean data. 37 PS_META_S32, ///< Signed 32-bit integer data. 38 PS_META_F32, ///< Single-precision float data. 39 PS_META_F64, ///< Double-precision float data. 40 PS_META_STR, ///< String data (Stored in as psPtr ). 41 PS_META_VEC, ///< Vector data (Stored in as psPtr ). 42 PS_META_HASH, ///< Hash data (Stored in as psPtr ). 43 PS_META_IMG, ///< Image data (Stored in as psPtr ). 44 PS_META_LOOKUPTABLE, ///< Lookup table data (Stored as void *). 45 PS_META_JPEG, ///< JPEG data (Stored in as psPtr ). 46 PS_META_PNG, ///< PNG data (Stored in as psPtr ). 47 PS_META_ASTROM, ///< Astrometric coefficients (Stored in as psPtr ). 48 PS_META_UNKNOWN, ///< Other data (Stored in as psPtr ). 35 PS_META_PRIMITIVE, ///< Primitive data. 36 PS_META_LIST, ///< List data (Stored as item.data.list). 37 PS_META_STR, ///< String data (Stored as item.data.V). 38 PS_META_VEC, ///< Vector data (Stored as item.data.V). 39 PS_META_IMG, ///< Image data (Stored as item.data.V). 40 PS_META_HASH, ///< Hash data (Stored as item.data.V). 41 PS_META_LOOKUPTABLE, ///< Lookup table data (Stored as item.data.V). 42 PS_META_JPEG, ///< JPEG data (Stored as item.data.V). 43 PS_META_PNG, ///< PNG data (Stored as item.data.V). 44 PS_META_ASTROM, ///< Astrometric coefficients (Stored as item.data.V). 45 PS_META_UNKNOWN, ///< Other data (Stored as item.data.V). 49 46 PS_META_NTYPE ///< Number of types. Must be last. 50 47 } psMetadataType; 51 52 /** Metadata item data structure.53 *54 * Struct for maintaining metadata items of varying types. It also contains55 * information about the item name, flags, comments, and other items with the same name.56 */57 typedef struct psMetadataItem58 {59 const psS32 id; ///< Unique ID for metadata item.60 char *restrict name; ///< Name of metadata item.61 psMetadataType type; ///< Type of metadata item.62 union {63 psBool B; ///< boolean data64 psS32 S32; ///< Signed 32-bit integer data.65 psF32 F32; ///< Single-precision float data.66 psF64 F64; ///< Double-precision float data.67 psPtr V; ///< Pointer to other type of data.68 } data; ///< Union for data types.69 char *comment; ///< Optional comment ("", not NULL).70 psList* restrict items; ///< List of psMetadataItems with same name.71 }72 psMetadataItem;73 48 74 49 /** Metadata data structure. … … 85 60 } 86 61 psMetadata; 62 63 /** Metadata item data structure. 64 * 65 * Struct for maintaining metadata items of varying types. It also contains 66 * information about the item name, flags, comments, and other items with the same name. 67 */ 68 typedef struct psMetadataItem 69 { 70 const psS32 id; ///< Unique ID for metadata item. 71 char *name; ///< Name of metadata item. 72 psMetadataType type; ///< Type of metadata item. 73 psElemType pType; ///< Primitive data type 74 union { 75 psBool B; ///< boolean data 76 psS32 S32; ///< Signed 32-bit integer data. 77 psF32 F32; ///< Single-precision float data. 78 psF64 F64; ///< Double-precision float data. 79 psList *list; ///< List data. 80 psMetadata *md; ///< Metadata data. 81 psPtr V; ///< Pointer to other type of data. 82 } data; ///< Union for data types. 83 char *comment; ///< Optional comment ("", not NULL). 84 } 85 psMetadataItem; 87 86 88 87 /** Create a metadata item. … … 103 102 psMetadataItem* psMetadataItemAlloc( 104 103 const char *name, ///< Name of metadata item. 104 psElemType pType, ///< Primitive type. 105 105 psMetadataType type, ///< Type of metadata item. 106 106 const char *comment, ///< Comment for metadata item. … … 125 125 psMetadataItem* psMetadataItemAllocV( 126 126 const char *name, ///< Name of metadata item. 127 psElemType pType, ///< Primitive type. 127 128 psMetadataType type, ///< Type of metadata item. 128 129 const char *comment, ///< Comment for metadata item. … … 149 150 psMetadata* restrict md, ///< Metadata collection to insert metadat item. 150 151 psMetadataItem* restrict item, ///< Metadata item to be added. 151 psS32 location ///< Location to be added.152 psS32 location ///< Location to be added. 152 153 ); 153 154 … … 160 161 psBool psMetadataAdd( 161 162 psMetadata* restrict md, ///< Metadata collection to insert metadat item. 162 psS32 where, ///< Location to be added.163 psS32 where, ///< Location to be added. 163 164 const char *name, ///< Name of metadata item. 165 psElemType pType, ///< Primitive type. 164 166 psMetadataType type, ///< Type of metadata item. 165 167 const char *comment, ///< Comment for metadata item. … … 179 181 psBool psMetadataRemove( 180 182 psMetadata* restrict md, ///< Metadata collection to insert metadat item. 181 psS32 where, ///< Location to be removed.183 psS32 where, ///< Location to be removed. 182 184 const char *restrict key ///< Name of metadata key. 183 185 ); … … 205 207 psMetadataItem* psMetadataGet( 206 208 psMetadata* restrict md, ///< Metadata collection to insert metadat item. 207 psS32 where ///< Location to be retrieved.209 psS32 where ///< Location to be retrieved. 208 210 ); 209 211 … … 217 219 psBool psMetadataSetIterator( 218 220 psMetadata* restrict md, ///< Metadata collection to iterate. 219 psS32 where ///< Location of iterator.221 psS32 where ///< Location of iterator. 220 222 ); 221 223 … … 229 231 psMetadata* restrict md, ///< Metadata collection to iterate. 230 232 const char *restrict match, ///< Beginning of key name. 231 psS32 which ///< Iterator to be used.233 psS32 which ///< Iterator to be used. 232 234 ); 233 235 … … 241 243 psMetadata* restrict md, ///< Metadata collection to iterate. 242 244 const char *restrict match, ///< Beginning of key name. 243 psS32 which ///< Iterator to be used.245 psS32 which ///< Iterator to be used. 244 246 ); 245 247 -
trunk/psLib/src/astronomy/psMetadataIO.c
r2525 r2607 9 9 * @author Ross Harman, MHPCC 10 10 * 11 * @version $Revision: 1.1 2$ $Name: not supported by cvs2svn $12 * @date $Date: 2004-1 1-30 01:09:14$11 * @version $Revision: 1.13 $ $Name: not supported by cvs2svn $ 12 * @date $Date: 2004-12-03 23:14:40 $ 13 13 * 14 14 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 60 60 /** Free and null temporary variables used by config file parser */ 61 61 #define CLEAR_TEMPS() \ 62 if(strName) { \ 63 psFree(strName); \ 64 strName = NULL; \ 65 } \ 66 if(strType) { \ 67 psFree(strType); \ 68 strType = NULL; \ 69 } \ 70 if(strValue) { \ 71 psFree(strValue); \ 72 strValue = NULL; \ 73 } \ 74 if(strComment) { \ 75 psFree(strComment); \ 76 strComment = NULL; \ 77 } \ 78 if(tempVec) { \ 79 psFree(tempVec); \ 80 tempVec = NULL; \ 62 if(strName) { \ 63 psFree(strName); \ 64 strName = NULL; \ 65 } \ 66 if(strType) { \ 67 psFree(strType); \ 68 strType = NULL; \ 69 } \ 70 if(strValue) { \ 71 psFree(strValue); \ 72 strValue = NULL; \ 73 } \ 74 if(strComment) { \ 75 psFree(strComment); \ 76 strComment = NULL; \ 81 77 } 82 78 … … 316 312 { 317 313 psMetadataType type; 314 psElemType pType; 318 315 319 316 PS_PTR_CHECK_NULL(fd,); … … 322 319 323 320 type = metadataItem->type; 321 pType = metadataItem->pType; 324 322 325 323 switch(type) { 326 case PS_META_BOOL: 327 fprintf(fd, format, metadataItem->data.B); 328 break; 329 case PS_META_S32: 330 fprintf(fd,format, metadataItem->data.S32); 331 break; 332 case PS_META_F32: 333 fprintf(fd, format, metadataItem->data.F32); 334 break; 335 case PS_META_F64: 336 fprintf(fd, format, metadataItem->data.F64); 324 case PS_META_PRIMITIVE: 325 switch(pType) { 326 case PS_TYPE_BOOL: 327 fprintf(fd, format, metadataItem->data.B); 328 break; 329 case PS_TYPE_S32: 330 fprintf(fd,format, metadataItem->data.S32); 331 break; 332 case PS_TYPE_F32: 333 fprintf(fd, format, metadataItem->data.F32); 334 break; 335 case PS_TYPE_F64: 336 fprintf(fd, format, metadataItem->data.F64); 337 break; 338 default: 339 psError(PS_ERR_BAD_PARAMETER_TYPE,true, PS_ERRORTEXT_psMetadata_METATYPE_INVALID, (int)pType); 340 } 337 341 break; 338 342 case PS_META_STR: 339 fprintf(fd, format, metadataItem->data.V);343 fprintf(fd,format, metadataItem->data.V); 340 344 break; 341 345 default: … … 359 363 psS32 numKeys = 0; 360 364 psS32 keyNum = 0; 361 psMetadataType metadataItemType;362 365 fitsfile *fd = NULL; 363 366 … … 416 419 switch (keyType) { 417 420 case 'I': 418 metadataItemType = PS_META_S32;419 success = psMetadataAdd(output, PS_LIST_TAIL, keyName, metadataItemType,keyComment, atoi(keyValue));421 success = psMetadataAdd(output, PS_LIST_TAIL, keyName, PS_TYPE_S32, PS_META_PRIMITIVE, 422 keyComment, atoi(keyValue)); 420 423 break; 421 424 case 'F': 422 metadataItemType = PS_META_F64;423 success = psMetadataAdd(output, PS_LIST_TAIL, keyName, metadataItemType,keyComment, atof(keyValue));425 success = psMetadataAdd(output, PS_LIST_TAIL, keyName, PS_TYPE_F64, PS_META_PRIMITIVE, 426 keyComment, atof(keyValue)); 424 427 break; 425 428 case 'C': 426 metadataItemType = PS_META_STR;427 success = psMetadataAdd(output, PS_LIST_TAIL, keyName, metadataItemType, keyComment,keyValue);429 success = psMetadataAdd(output, PS_LIST_TAIL, keyName, PS_TYPE_PTR, PS_META_STR, keyComment, 430 keyValue); 428 431 break; 429 432 case 'L': 430 metadataItemType = PS_META_BOOL;431 433 tempBool = (keyValue[0] == 'T') ? 1 : 0; 432 success = psMetadataAdd(output, PS_LIST_TAIL, keyName, metadataItemType, keyComment, tempBool); 434 success = psMetadataAdd(output, PS_LIST_TAIL, keyName, PS_TYPE_BOOL, PS_META_PRIMITIVE, keyComment, 435 tempBool); 433 436 break; 434 437 case 'U': 435 438 case 'X': 436 439 default: 437 psError(PS_ERR_IO, true, 438 PS_ERRORTEXT_psMetadataIO_FITS_METATYPE_INVALID, 439 keyType); 440 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FITS_METATYPE_INVALID, keyType); 440 441 return output; 441 442 } 442 443 443 444 if (!success) { 444 psError(PS_ERR_UNKNOWN, false, 445 PS_ERRORTEXT_psMetadataIO_ADD_FAILED, 446 keyName); 445 psError(PS_ERR_UNKNOWN, false, PS_ERRORTEXT_psMetadataIO_ADD_FAILED, keyName); 447 446 return output; 448 447 } … … 452 451 } 453 452 454 455 psS32 psMetadataParseConfig(psMetadata** md, const char *fileName, psBool overwrite) 453 psMetadata* psMetadataParseConfig(psMetadata* md, psU32 *nFail, const char *fileName, psBool overwrite) 456 454 { 457 455 psBool tempBool; … … 463 461 char *linePtr = NULL; 464 462 psS32 status = 0; 465 psS32 lineCount = 0; 466 psS32 failedLines = 0; 463 psU32 lineCount = 0; 467 464 psF64 tempDbl = 0.0; 468 465 psS32 tempInt = 0.0; … … 470 467 psVector *tempVec = NULL; 471 468 FILE *fp = NULL; 472 psElemType elemType;469 psElemType pType; 473 470 psMetadataType mdType; 474 471 475 472 476 473 // Check for nulls 477 PS_PTR_CHECK_NULL(fileName, -1);474 PS_PTR_CHECK_NULL(fileName,NULL); 478 475 if((fp=fopen(fileName, "r")) == NULL) { 479 psError(PS_ERR_IO, true, 480 PS_ERRORTEXT_psMetadataIO_FILE_OPEN_FAILED, 481 fileName); 482 return -1; 476 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FILE_OPEN_FAILED, fileName); 477 return NULL; 483 478 } 484 479 485 480 // Allocate metadata if necessary 486 if ( *md == NULL) {487 *md = psMetadataAlloc();481 if (md == NULL) { 482 md = psMetadataAlloc(); 488 483 } 489 484 … … 504 499 // Check for more than one '*' or '@' in a line 505 500 if(repeatedChars(linePtr, '@') > 1) { 506 failedLines++;501 (*nFail)++; 507 502 psError(PS_ERR_IO, true, 508 PS_ERRORTEXT_psMetadataIO_FILE_MULTIPLE_CHAR, 509 '@', lineCount, fileName); 503 PS_ERRORTEXT_psMetadataIO_FILE_MULTIPLE_CHAR, '@', lineCount, fileName); 510 504 continue; 511 505 } else if(repeatedChars(linePtr, '*') > 1) { 512 failedLines++;506 (*nFail)++; 513 507 psError(PS_ERR_IO, true, 514 PS_ERRORTEXT_psMetadataIO_FILE_MULTIPLE_CHAR, 515 '*', lineCount, fileName); 508 PS_ERRORTEXT_psMetadataIO_FILE_MULTIPLE_CHAR, '*', lineCount, fileName); 516 509 continue; 517 510 } else if(repeatedChars(linePtr, '~') > 0) { 518 failedLines++;511 (*nFail)++; 519 512 psError(PS_ERR_IO, true, 520 PS_ERRORTEXT_psMetadataIO_FILE_MULTIPLE_CHAR, 521 '~', lineCount, fileName); 513 PS_ERRORTEXT_psMetadataIO_FILE_MULTIPLE_CHAR, '~', lineCount, fileName); 522 514 continue; 523 515 } … … 526 518 strName = getToken(&linePtr, " ", &status); 527 519 if(strName==NULL || status) { 528 failedLines++;520 (*nFail)++; 529 521 status = 0; 530 522 psError(PS_ERR_IO, true, 531 PS_ERRORTEXT_psMetadataIO_FILE_ELEMENT_NULL, 532 "name",lineCount, fileName); 523 PS_ERRORTEXT_psMetadataIO_FILE_ELEMENT_NULL, "name", lineCount, fileName); 533 524 continue; 534 525 } … … 537 528 strType = getToken(&linePtr, " ", &status); 538 529 if(strType==NULL) { 539 failedLines++;530 (*nFail)++; 540 531 status = 0; 541 psError(PS_ERR_IO, true, 542 PS_ERRORTEXT_psMetadataIO_FILE_ELEMENT_NULL, 543 "type",lineCount, fileName); 532 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FILE_ELEMENT_NULL, "type",lineCount, 533 fileName); 544 534 continue; 545 535 } else if(!strncmp(strType, "*", 1)) { 546 mdType = PS_META_ITEM_SET; 536 mdType = PS_META_LIST; 537 pType = PS_TYPE_PTR; 547 538 } else if(!strncmp(strType, "STR", 3)) { 548 539 mdType = PS_META_STR; 549 elemType = PS_TYPE_PTR;540 pType = PS_TYPE_PTR; 550 541 } else if(!strncmp(strType, "BOOL", 3)) { 551 mdType = PS_META_ BOOL;552 elemType = PS_TYPE_U8;542 mdType = PS_META_PRIMITIVE; 543 pType = PS_TYPE_BOOL; 553 544 } else if(!strncmp(strType, "S32", 3)) { 554 mdType = PS_META_ S32;555 elemType = PS_TYPE_S32;545 mdType = PS_META_PRIMITIVE; 546 pType = PS_TYPE_S32; 556 547 } else if(!strncmp(strType, "F32", 3)) { 557 mdType = PS_META_ F32;558 elemType = PS_TYPE_F32;548 mdType = PS_META_PRIMITIVE; 549 pType = PS_TYPE_F32; 559 550 } else if(!strncmp(strType, "F64", 3)) { 560 mdType = PS_META_ F64;561 elemType = PS_TYPE_F64;551 mdType = PS_META_PRIMITIVE; 552 pType = PS_TYPE_F64; 562 553 } else { 563 failedLines++; 564 psError(PS_ERR_IO, true, 565 PS_ERRORTEXT_psMetadataIO_FILE_TYPE_INVALID, 566 strType, lineCount, fileName); 554 (*nFail)++; 555 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FILE_TYPE_INVALID, strType, lineCount, 556 fileName); 567 557 continue; 568 558 } … … 573 563 574 564 // Get the metadata item value if there is one. Lines with * don't have values. 575 if(mdType != PS_META_ ITEM_SET) {565 if(mdType != PS_META_LIST) { 576 566 strValue = getToken(&linePtr, "#", &status); 577 567 if(strValue==NULL) { 578 failedLines++;568 (*nFail)++; 579 569 status = 0; 580 psError(PS_ERR_IO, true, 581 PS_ERRORTEXT_psMetadataIO_FILE_ELEMENT_NULL, 582 "value",lineCount, fileName); 570 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FILE_ELEMENT_NULL, "value", lineCount, 571 fileName); 583 572 continue; 584 573 } … … 588 577 strComment = getToken(&linePtr,"~", &status); 589 578 if(status) { 590 failedLines++;579 (*nFail)++; 591 580 status = 0; 592 psError(PS_ERR_IO, true, 593 PS_ERRORTEXT_psMetadataIO_FILE_ELEMENT_NULL, 594 "comment",lineCount, fileName); 581 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FILE_ELEMENT_NULL, "comment", lineCount, 582 fileName); 595 583 continue; 596 584 } … … 599 587 and allow switch/case below to add new item. If overwrite is false, then report error. If found 600 588 item is folder node, then psMetadataAdd will automatically add a new child. */ 601 metadataItem = psMetadataLookup( *md, strName);589 metadataItem = psMetadataLookup(md, strName); 602 590 if(metadataItem != NULL) { 603 if(metadataItem->type!=PS_META_ ITEM_SET) {591 if(metadataItem->type!=PS_META_LIST) { 604 592 if(overwrite) { 605 psMetadataRemove( *md, PS_LIST_UNKNOWN, strName);593 psMetadataRemove(md, PS_LIST_UNKNOWN, strName); 606 594 } else { 607 failedLines++; 608 psError(PS_ERR_IO, true, 609 PS_ERRORTEXT_psMetadataIO_OVERWRITE_ITEM, 610 strName, lineCount, fileName); 595 (*nFail)++; 596 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_OVERWRITE_ITEM, strName, lineCount, 597 fileName); 611 598 continue; 612 599 } … … 616 603 // Create and add metadata item to metadata and parse values 617 604 switch (mdType) { 618 case PS_META_ ITEM_SET:619 psMetadataAdd( *md, PS_LIST_TAIL, strName, mdType, NULL, NULL);605 case PS_META_LIST: 606 psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, NULL, NULL); 620 607 break; 621 case PS_META_BOOL: 622 tempBool = parseBool(strValue, &status); 608 case PS_META_STR: 609 psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, strComment, strValue); 610 break; 611 case PS_META_VEC: 612 tempVec = parseVector(strValue, pType, &status); 623 613 if(!status) { 624 psMetadataAdd( *md, PS_LIST_TAIL, strName, mdType, strComment, tempBool);614 psMetadataAdd(md, PS_LIST_TAIL, strName+1, pType, mdType, strComment, tempVec); 625 615 } else { 626 616 status = 0; 627 failedLines++; 628 psError(PS_ERR_IO, true, 629 PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, 630 strValue, strName, strType, lineCount, fileName); 617 (*nFail)++; 618 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, 619 strType, lineCount, fileName); 631 620 continue; 632 621 } 633 622 break; 634 case PS_META_S32: 635 tempInt = (psS32)parseValue(strValue, &status); 636 if(!status) { 637 psMetadataAdd(*md, PS_LIST_TAIL, strName, mdType, strComment, tempInt); 638 } else { 639 status = 0; 640 failedLines++; 641 psError(PS_ERR_IO, true, 642 PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, 643 strValue, strName, strType, lineCount, fileName); 623 case PS_META_PRIMITIVE: 624 switch (pType) { 625 case PS_TYPE_BOOL: 626 tempBool = parseBool(strValue, &status); 627 if(!status) { 628 psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, strComment, tempBool); 629 } else { 630 status = 0; 631 (*nFail)++; 632 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, 633 strType, lineCount, fileName); 634 continue; 635 } 636 break; 637 case PS_TYPE_S32: 638 tempInt = (psS32)parseValue(strValue, &status); 639 if(!status) { 640 psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, strComment, tempInt); 641 } else { 642 status = 0; 643 (*nFail)++; 644 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, 645 strType, lineCount, fileName); 646 continue; 647 } 648 break; 649 case PS_TYPE_F32: 650 case PS_TYPE_F64: 651 tempDbl = parseValue(strValue, &status); 652 if(!status) { 653 psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, strComment, tempDbl); 654 } else { 655 status = 0; 656 (*nFail)++; 657 psError(PS_ERR_IO, true, 658 PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, strType, lineCount, 659 fileName); 660 continue; 661 } 662 break; 663 default: 664 (*nFail)++; 665 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FILE_TYPE_INVALID, mdType, lineCount, 666 fileName); 644 667 continue; 645 } 646 break; 647 case PS_META_F32: 648 case PS_META_F64: 649 tempDbl = parseValue(strValue, &status); 650 if(!status) { 651 psMetadataAdd(*md, PS_LIST_TAIL, strName, mdType, strComment, tempDbl); 652 } else { 653 status = 0; 654 failedLines++; 655 psError(PS_ERR_IO, true, 656 PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, 657 strValue, strName, strType, lineCount, fileName); 658 continue; 659 } 660 break; 661 case PS_META_STR: 662 psMetadataAdd(*md, PS_LIST_TAIL, strName, mdType, strComment, strValue); 663 break; 664 case PS_META_VEC: 665 tempVec = parseVector(strValue, elemType, &status); 666 if(!status) { 667 psMetadataAdd(*md, PS_LIST_TAIL, strName+1, mdType, strComment, tempVec); 668 } else { 669 status = 0; 670 failedLines++; 671 psError(PS_ERR_IO, true, 672 PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, 673 strValue, strName, strType, lineCount, fileName); 674 continue; 675 } 668 } // switch 676 669 break; 677 670 default: 678 failedLines++; 679 psError(PS_ERR_IO, true, 680 PS_ERRORTEXT_psMetadataIO_FILE_TYPE_INVALID, 681 mdType, lineCount, fileName); 671 (*nFail)++; 672 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FILE_TYPE_INVALID, mdType, lineCount, 673 fileName); 682 674 continue; 683 675 } // switch … … 687 679 psFree(line); 688 680 689 return failedLines;681 return md; 690 682 } 691 683 … … 753 745 754 746 // Add attributes to metadata 755 psMetadataAdd(md, PS_LIST_TAIL, "htAtts", PS_ META_HASH, NULL, htAtts);747 psMetadataAdd(md, PS_LIST_TAIL, "htAtts", PS_TYPE_PTR, PS_META_HASH, NULL, htAtts); 756 748 757 749 psFree(psTagName); … … 765 757 psBool tempBool = false; 766 758 psS32 status = 0; 767 psU 64lineNumber = 0;759 psU32 lineNumber = 0; 768 760 psF64 tempDbl = 0.0; 769 761 psS32 tempInt = 0.0; 770 psElemType elemType;762 psElemType pType; 771 763 psMetadataType mdType; 772 764 char *fileName = NULL; … … 790 782 metadataItem = psMetadataLookup(md, "htAtts"); 791 783 PS_PTR_CHECK_NULL_GENERAL(metadataItem, return); 792 PS_PTR_CHECK_NULL_GENERAL(metadataItem-> items, return);793 psListSetIterator(metadataItem-> items, PS_LIST_TAIL);794 metadataItem = (psMetadataItem*)psListGetCurrent(metadataItem-> items);795 htAtts = (psHash*)metadataItem->data. V;784 PS_PTR_CHECK_NULL_GENERAL(metadataItem->data.list, return); 785 psListSetIterator(metadataItem->data.list, PS_LIST_TAIL); 786 metadataItem = (psMetadataItem*)psListGetCurrent(metadataItem->data.list); 787 htAtts = (psHash*)metadataItem->data.list; 796 788 PS_PTR_CHECK_NULL_GENERAL(htAtts, return); 797 789 fileName = (char*)input->filename; … … 811 803 if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psString")) { 812 804 mdType = PS_META_STR; 813 elemType = PS_TYPE_PTR;805 pType = PS_TYPE_PTR; 814 806 } else if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psBool")) { 815 mdType = PS_META_ BOOL;816 elemType = PS_TYPE_U8;807 mdType = PS_META_PRIMITIVE; 808 pType = PS_TYPE_U8; 817 809 } else if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psS32")) { 818 mdType = PS_META_ S32;819 elemType = PS_TYPE_S32;810 mdType = PS_META_PRIMITIVE; 811 pType = PS_TYPE_S32; 820 812 } else if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psF32")) { 821 mdType = PS_META_ F32;822 elemType = PS_TYPE_F32;813 mdType = PS_META_PRIMITIVE; 814 pType = PS_TYPE_F32; 823 815 } else if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psF64")) { 824 mdType = PS_META_ F64;825 elemType = PS_TYPE_F64;816 mdType = PS_META_PRIMITIVE; 817 pType = PS_TYPE_F64; 826 818 } else { 827 819 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_TYPE_INVALID_LINE_FILE, strType, lineNumber, … … 847 839 metadataItem = psMetadataLookup(md, strName); 848 840 if(metadataItem != NULL) { 849 if(metadataItem->type != PS_META_ ITEM_SET) {841 if(metadataItem->type != PS_META_LIST) { 850 842 if(overwrite) { 851 843 psMetadataRemove(md, PS_LIST_UNKNOWN, strName); … … 861 853 // Create metadata item and add to metadata 862 854 switch(mdType) { 863 case PS_META_ITEM_SET: 864 psMetadataAdd(md, PS_LIST_TAIL, strName, mdType, NULL, NULL); 865 break; 866 case PS_META_BOOL: 867 tempBool = parseBool((char*)strValue, &status); 868 if(!status) { 869 psMetadataAdd(md, PS_LIST_TAIL, strName, mdType, NULL, tempBool); 870 } else { 871 status = 0; 872 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, strType, 873 lineNumber, fileName); 874 } 875 break; 876 case PS_META_S32: 877 tempInt = (psS32)parseValue((char*)strValue, &status); 878 if(!status) { 879 psMetadataAdd(md, PS_LIST_TAIL, strName, mdType, NULL, tempInt); 880 } else { 881 status = 0; 882 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, strType, 883 lineNumber, fileName); 884 } 885 break; 886 case PS_META_F32: 887 case PS_META_F64: 888 tempDbl = parseValue((char*)strValue, &status); 889 if(!status) { 890 psMetadataAdd(md, PS_LIST_TAIL, strName, mdType, NULL, tempDbl); 891 } else { 892 status = 0; 893 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, strType, 894 lineNumber, fileName); 895 } 855 case PS_META_LIST: 856 psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, NULL, NULL); 896 857 break; 897 858 case PS_META_STR: 898 psMetadataAdd(md, PS_LIST_TAIL, strName, mdType, NULL, strValue); 859 psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, NULL, strValue); 860 break; 861 case PS_META_PRIMITIVE: 862 switch(pType) { 863 case PS_TYPE_BOOL: 864 tempBool = parseBool((char*)strValue, &status); 865 if(!status) { 866 psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, NULL, tempBool); 867 } else { 868 status = 0; 869 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, strType, 870 lineNumber, fileName); 871 } 872 break; 873 case PS_TYPE_S32: 874 tempInt = (psS32)parseValue((char*)strValue, &status); 875 if(!status) { 876 psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, NULL, tempInt); 877 } else { 878 status = 0; 879 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, strType, 880 lineNumber, fileName); 881 } 882 break; 883 case PS_TYPE_F32: 884 case PS_TYPE_F64: 885 tempDbl = parseValue((char*)strValue, &status); 886 if(!status) { 887 psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, NULL, tempDbl); 888 } else { 889 status = 0; 890 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, strType, 891 lineNumber, fileName); 892 } 893 break; 894 default: 895 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FILE_TYPE_INVALID, strType, lineNumber, fileName); 896 } // End switch 899 897 break; 900 898 default: … … 902 900 } // End switch 903 901 902 904 903 return; 905 904 } … … 910 909 bool overwrite = false; 911 910 psS32 status = 0; 912 psU 64lineNumber = 0;913 psElemType elemType;911 psU32 lineNumber = 0; 912 psElemType pType; 914 913 psMetadataType mdType; 915 914 char *strName = NULL; … … 936 935 tables = psMetadataLookup(md, "htAtts"); 937 936 PS_PTR_CHECK_NULL_GENERAL(tables, return); 938 PS_PTR_CHECK_NULL_GENERAL(tables-> items, return);939 psListSetIterator(tables-> items, PS_LIST_TAIL);940 table = (psMetadataItem*)psListGetCurrent(tables-> items);941 htAtts = (psHash*)table->data. V;937 PS_PTR_CHECK_NULL_GENERAL(tables->data.list, return); 938 psListSetIterator(tables->data.list, PS_LIST_TAIL); 939 table = (psMetadataItem*)psListGetCurrent(tables->data.list); 940 htAtts = (psHash*)table->data.list; 942 941 PS_PTR_CHECK_NULL_GENERAL(htAtts, return); 943 942 fileName = (char*)input->filename; … … 957 956 if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psString")) { 958 957 mdType = PS_META_STR; 959 elemType = PS_TYPE_PTR;958 pType = PS_TYPE_PTR; 960 959 } else if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psBool")) { 961 mdType = PS_META_ BOOL;962 elemType = PS_TYPE_U8;960 mdType = PS_META_PRIMITIVE; 961 pType = PS_TYPE_U8; 963 962 } else if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psS32")) { 964 mdType = PS_META_ S32;965 elemType = PS_TYPE_S32;963 mdType = PS_META_PRIMITIVE; 964 pType = PS_TYPE_S32; 966 965 } else if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psF32")) { 967 mdType = PS_META_ F32;968 elemType = PS_TYPE_F32;966 mdType = PS_META_PRIMITIVE; 967 pType = PS_TYPE_F32; 969 968 } else if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psF64")) { 970 mdType = PS_META_ F64;971 elemType = PS_TYPE_F64;969 mdType = PS_META_PRIMITIVE; 970 pType = PS_TYPE_F64; 972 971 } else { 973 972 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_TYPE_INVALID_LINE_FILE, strName, lineNumber, … … 994 993 metadataItem = psMetadataLookup(md, strName); 995 994 if(metadataItem != NULL) { 996 if(metadataItem->type != PS_META_ ITEM_SET) {995 if(metadataItem->type != PS_META_LIST) { 997 996 if(overwrite) { 998 997 psMetadataRemove(md, PS_LIST_UNKNOWN, strName); … … 1007 1006 1008 1007 // Get value 1009 vec = parseVector((char*)strValue, elemType, &status);1008 vec = parseVector((char*)strValue, pType, &status); 1010 1009 if(!status) { 1011 psMetadataAdd(md, PS_LIST_TAIL, strName+1, mdType, NULL, vec);1010 psMetadataAdd(md, PS_LIST_TAIL, strName+1, pType, mdType, NULL, vec); 1012 1011 } else { 1013 1012 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, strType, … … 1038 1037 tables = psMetadataLookup(md, "htAtts"); 1039 1038 PS_PTR_CHECK_NULL_GENERAL(tables, return); 1040 PS_PTR_CHECK_NULL_GENERAL(tables-> items, return);1041 psListSetIterator(tables-> items, PS_LIST_TAIL);1042 table = (psMetadataItem*)psListGetCurrent(tables-> items);1043 htAtts = (psHash*)table->data. V;1039 PS_PTR_CHECK_NULL_GENERAL(tables->data.list, return); 1040 psListSetIterator(tables->data.list, PS_LIST_TAIL); 1041 table = (psMetadataItem*)psListGetCurrent(tables->data.list); 1042 htAtts = (psHash*)table->data.list; 1044 1043 PS_PTR_CHECK_NULL_GENERAL(htAtts, return); 1045 1044 … … 1064 1063 1065 1064 // Free temporary metadata item and its hash table 1066 psListRemove(tables-> items, PS_LIST_TAIL, table);1065 psListRemove(tables->data.list, PS_LIST_TAIL, table); 1067 1066 1068 1067 psFree(psEndTagName); … … 1071 1070 } 1072 1071 1073 ps S32 psMetadataParseConfigXml(psMetadata** md, const char *fileName)1072 psMetadata* psMetadataParseConfigXml(psMetadata* md, psU32 *nFail, const char *fileName, psBool overwrite) 1074 1073 { 1075 1074 xmlSAXHandler saxHandler; … … 1077 1076 1078 1077 // Error checks 1079 PS_PTR_CHECK_NULL(fileName, -1);1078 PS_PTR_CHECK_NULL(fileName, NULL); 1080 1079 1081 1080 // Allocate metadata if necessary 1082 if ( *md == NULL) {1083 *md = psMetadataAlloc();1081 if (md == NULL) { 1082 md = psMetadataAlloc(); 1084 1083 } 1085 1084 … … 1113 1112 saxHandler.externalSubset = NULL; 1114 1113 saxHandler.initialized = 1; 1115 saxHandler._private = *md;1114 saxHandler._private = md; 1116 1115 saxHandler.startElementNs = NULL; 1117 1116 saxHandler.endElementNs = NULL; … … 1121 1120 if (xmlSAXUserParseFile(&saxHandler, NULL, fileName)) { 1122 1121 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FILE_OPEN_FAILED, fileName); 1123 return -1;1122 return NULL; 1124 1123 } 1125 1124 -
trunk/psLib/src/astronomy/psMetadataIO.h
r2529 r2607 9 9 * @author Ross Harman, MHPCC 10 10 * 11 * @version $Revision: 1. 5$ $Name: not supported by cvs2svn $12 * @date $Date: 2004-1 1-30 01:24:32$11 * @version $Revision: 1.6 $ $Name: not supported by cvs2svn $ 12 * @date $Date: 2004-12-03 23:14:46 $ 13 13 * 14 14 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 58 58 * Loads pre-defined settings by parsing a configuration file into a psMetadata structure. 59 59 * 60 * @return ps S32 : Number of lines that failed to beread.60 * @return psMetadata* : Resulting metadata from read. 61 61 */ 62 psS32 psMetadataParseConfig( 63 psMetadata** md, ///< Resulting metadata from read. 62 psMetadata* psMetadataParseConfig( 63 psMetadata* md, ///< Resulting metadata from read. 64 psU32 *nFail, ///< Number of failed lines. 64 65 const char *fileName, ///< Name of file to read. 65 66 psBool overwrite ///< Allow overwrite of duplicate specifications. … … 70 71 * Loads pre-defined XML settings by parsing a configuration file into a psMetadata structure. 71 72 * 72 * @return ps S32 : Number of lines that failed to beread.73 * @return psMetadata* : Resulting metadata from read. 73 74 */ 74 psS32 psMetadataParseConfigXml( 75 psMetadata** md, ///< Resulting metadata from read. 76 const char *fileName ///< Name of file to read. 75 76 psMetadata* psMetadataParseConfigXml( 77 psMetadata* md, ///< Resulting metadata from read. 78 psU32 *nFail, ///< Number of failed lines. 79 const char *fileName, ///< Name of file to read. 80 psBool overwrite ///< Allow overwrite of duplicate specifications. 77 81 ); 78 82 -
trunk/psLib/src/astronomy/psTime.c
r2515 r2607 10 10 * @author Ross Harman, MHPCC 11 11 * 12 * @version $Revision: 1.4 5$ $Name: not supported by cvs2svn $13 * @date $Date: 2004-1 1-29 18:41:07$12 * @version $Revision: 1.46 $ $Name: not supported by cvs2svn $ 13 * @date $Date: 2004-12-03 23:15:00 $ 14 14 * 15 15 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 196 196 psS32 j = 0; 197 197 psS32 numTables = 0; 198 psU32 nFail = 0; 198 199 psVector *tablesFrom = NULL; 199 200 psVector *tablesTo = NULL; … … 205 206 206 207 // Read time config file 207 if(psMetadataParseConfig(&timeMetadata, fileName, true) < 0) { 208 timeMetadata = psMetadataParseConfig(timeMetadata, &nFail, fileName, true); 209 if(timeMetadata == NULL) { 210 return false; 211 } else if(nFail != 0) { 208 212 return false; 209 213 } … … 298 302 if(metadataNamesPtr != NULL) { 299 303 psMetadataAdd(timeMetadata, PS_LIST_TAIL, strcat(metadataTableNames[j], "Table"), 300 PS_ META_LOOKUPTABLE, NULL, table);304 PS_TYPE_PTR, PS_META_LOOKUPTABLE, NULL, table); 301 305 foundTable = true; 302 306 } else if(foundTable==false && j==numTables-1) { -
trunk/psLib/src/collections/psMetadata.c
r2521 r2607 12 12 * @author Ross Harman, MHPCC 13 13 * 14 * @version $Revision: 1.3 8$ $Name: not supported by cvs2svn $15 * @date $Date: 2004-1 1-30 00:26:53$14 * @version $Revision: 1.39 $ $Name: not supported by cvs2svn $ 15 * @date $Date: 2004-12-03 23:14:28 $ 16 16 * 17 17 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 80 80 psFree(metadataItem->name); 81 81 psFree(metadataItem->comment); 82 psFree(metadataItem->items); 83 if (type == PS_META_STR || type == PS_META_VEC || type == PS_META_IMG || type == PS_META_LOOKUPTABLE || 84 type == PS_META_JPEG || type == PS_META_PNG || type == PS_META_ASTROM || type == PS_META_UNKNOWN || 85 type == PS_META_HASH) { 82 if (type != PS_META_PRIMITIVE) { 86 83 psFree(metadataItem->data.V); 87 84 } … … 101 98 /*****************************************************************************/ 102 99 103 psMetadataItem* psMetadataItemAlloc(const char *name, psMetadataType type, const char *comment, ...) 100 psMetadataItem* psMetadataItemAlloc(const char *name, psElemType pType, psMetadataType type, 101 const char *comment, ...) 104 102 { 105 103 va_list argPtr; … … 110 108 111 109 // Call metadata item allocation 112 metadataItem = psMetadataItemAllocV(name, type, comment, argPtr);110 metadataItem = psMetadataItemAllocV(name, pType, type, comment, argPtr); 113 111 114 112 // Clean up stack after variable arguement has been used … … 118 116 } 119 117 120 psMetadataItem* psMetadataItemAllocV(const char *name, psMetadataType type, const char *comment, 121 va_list argPtr) 122 { 123 psVector *vecIn = NULL; 124 psVector *vecOut = NULL; 118 psMetadataItem* psMetadataItemAllocV(const char *name, psElemType pType, psMetadataType type, 119 const char *comment, va_list argPtr) 120 { 125 121 psMetadataItem* metadataItem = NULL; 126 122 … … 129 125 130 126 // Allocate metadata item 131 metadataItem = (psMetadataItem* ) psAlloc(sizeof(psMetadataItem)); 127 metadataItem = (psMetadataItem*) psAlloc(sizeof(psMetadataItem)); 128 metadataItem->data.V = NULL; 132 129 133 130 // Set deallocator … … 148 145 // Set metadata item type 149 146 metadataItem->type = type; 150 metadataItem->data.V = NULL; 151 152 // Allocate metadata items with same name. 153 metadataItem->items = psListAlloc(NULL); 147 metadataItem->pType = pType; 154 148 155 149 // Allocate and set metadata item name … … 158 152 159 153 // Set metadata item value 160 switch (type) { 161 case PS_META_ITEM_SET: 162 break; 163 case PS_META_BOOL: 164 metadataItem->data.B = (psBool)va_arg(argPtr, psS32); 165 break; 166 case PS_META_S32: 167 metadataItem->data.S32 = (psS32)va_arg(argPtr, psS32); 168 break; 169 case PS_META_F32: 170 metadataItem->data.F32 = (psF32)va_arg(argPtr, psF64); 171 break; 172 case PS_META_F64: 173 metadataItem->data.F64 = va_arg(argPtr, psF64); 154 switch(type) { 155 case PS_META_PRIMITIVE: 156 switch(pType) { 157 case PS_TYPE_BOOL: 158 metadataItem->data.B = (psBool)va_arg(argPtr, psS32); 159 break; 160 case PS_TYPE_S32: 161 metadataItem->data.S32 = (psS32)va_arg(argPtr, psS32); 162 break; 163 case PS_TYPE_F32: 164 metadataItem->data.F32 = (psF32)va_arg(argPtr, psF64); 165 break; 166 case PS_TYPE_F64: 167 metadataItem->data.F64 = (psF64)va_arg(argPtr, psF64); 168 break; 169 default: 170 psError(PS_ERR_BAD_PARAMETER_VALUE, true, PS_ERRORTEXT_psMetadata_METATYPE_INVALID, type); 171 psFree(metadataItem); 172 metadataItem = NULL; 173 } 174 174 break; 175 175 case PS_META_STR: 176 // Perform copy of input strings 176 177 metadataItem->data.V = psStringNCopy(va_arg(argPtr, char *), MAX_STRING_LENGTH); 177 178 break; 179 case PS_META_LIST: 178 180 case PS_META_VEC: 179 vecIn = (psVector*)va_arg(argPtr, psVector*); 180 vecOut = psVectorAlloc(vecIn->nalloc, vecIn->type.type); 181 memcpy(vecOut->data.V, vecIn->data.V, vecIn->nalloc*PSELEMTYPE_SIZEOF(vecIn->type.type)); 182 metadataItem->data.V = vecOut; 183 break; 181 case PS_META_HASH: 184 182 case PS_META_LOOKUPTABLE: 185 metadataItem->data.V = va_arg(argPtr, psLookupTable*); // Deep copy of input data not performed186 break;187 case PS_META_HASH:188 metadataItem->data.V = va_arg(argPtr, psHash*); // Deep copy of input data not performed189 break;190 case PS_META_IMG:191 183 case PS_META_JPEG: 192 184 case PS_META_PNG: 193 185 case PS_META_ASTROM: 194 186 case PS_META_UNKNOWN: 187 // Copy of input data not performed due to variability of data types 188 metadataItem->data.V = va_arg(argPtr, psPtr); 189 break; 195 190 default: 196 191 psError(PS_ERR_BAD_PARAMETER_VALUE, true, PS_ERRORTEXT_psMetadata_METATYPE_INVALID, type); … … 209 204 210 205 // Allocate metadata 211 metadata = (psMetadata* ) psAlloc(sizeof(psMetadata));206 metadata = (psMetadata*) psAlloc(sizeof(psMetadata)); 212 207 // Set deallocator 213 208 p_psMemSetDeallocator(metadata, (psFreeFcn) metadataFree); 214 209 215 210 // Allocate metadata's internal containers 216 list = (psList* ) psListAlloc(NULL);217 table = (psHash* ) psHashAlloc(10);211 list = (psList*) psListAlloc(NULL); 212 table = (psHash*) psHashAlloc(10); 218 213 219 214 metadata->list = list; … … 223 218 } 224 219 225 psBool psMetadataAddItem( psMetadata *restrict md, psMetadataItem *restrict metadataItem, psS32 location)220 psBool psMetadataAddItem(psMetadata *restrict md, psMetadataItem *restrict metadataItem, psS32 location) 226 221 { 227 222 char * key = NULL; … … 230 225 psMetadataItem *existingEntry = NULL; 231 226 psMetadataItem *newFolderEntry = NULL; 232 psMetadataType newType = PS_META_ITEM_SET;227 psMetadataType newType; 233 228 234 229 PS_PTR_CHECK_NULL(md,NULL); … … 247 242 if(existingEntry != NULL) { 248 243 249 if(existingEntry->type == PS_META_ITEM_SET) { 244 if(existingEntry->type == PS_META_LIST) { 245 246 if(existingEntry->data.list == NULL) { 247 existingEntry->data.list = psListAlloc(NULL); 248 } 250 249 251 250 // Add leaf node to existing folder node 252 if(!psListAdd(existingEntry->items, PS_LIST_TAIL, metadataItem)) { 253 psError(PS_ERR_UNKNOWN,false, 254 PS_ERRORTEXT_psMetadata_ADD_LIST_FAILED, 255 metadataItem->name ); 256 return false; 257 } 258 } else if(existingEntry->type != PS_META_ITEM_SET && newType!= PS_META_ITEM_SET) { 251 if(!psListAdd(existingEntry->data.list, PS_LIST_TAIL, metadataItem)) { 252 psError(PS_ERR_UNKNOWN, false, PS_ERRORTEXT_psMetadata_ADD_LIST_FAILED, metadataItem->name); 253 return false; 254 } 255 } else if(existingEntry->type != PS_META_LIST && newType!= PS_META_LIST) { 259 256 260 257 // Leaf node replaces another leaf. Make new folder node and add leaves. 261 newFolderEntry = psMetadataItemAlloc(key, PS_META_ITEM_SET, NULL, NULL); 262 263 if(!psListAdd(newFolderEntry->items, PS_LIST_TAIL, existingEntry)) { 264 psError(PS_ERR_UNKNOWN,false, 265 PS_ERRORTEXT_psMetadata_ADD_LIST_FAILED, 266 key); 258 newFolderEntry = psMetadataItemAlloc(key, PS_TYPE_PTR, PS_META_LIST, NULL, NULL); 259 newFolderEntry->data.list = psListAlloc(NULL); 260 261 if(!psListAdd(newFolderEntry->data.list, PS_LIST_TAIL, existingEntry)) { 262 psError(PS_ERR_UNKNOWN,false, PS_ERRORTEXT_psMetadata_ADD_LIST_FAILED,key); 267 263 psFree(newFolderEntry); 268 264 return false; 269 265 } 270 266 271 if(!psListAdd(newFolderEntry->items, PS_LIST_TAIL, metadataItem)) { 272 psError(PS_ERR_UNKNOWN,false, 273 PS_ERRORTEXT_psMetadata_ADD_LIST_FAILED, 274 key); 267 if(!psListAdd(newFolderEntry->data.list, PS_LIST_TAIL, metadataItem)) { 268 psError(PS_ERR_UNKNOWN,false, PS_ERRORTEXT_psMetadata_ADD_LIST_FAILED,key); 275 269 psFree(newFolderEntry); 276 270 return false; … … 278 272 279 273 if(!psHashRemove(mdTable, key)) { 280 psError(PS_ERR_UNKNOWN,false, 281 PS_ERRORTEXT_psMetadata_REMOVE_TABLE_FAILED, 282 key); 274 psError(PS_ERR_UNKNOWN,false,PS_ERRORTEXT_psMetadata_REMOVE_TABLE_FAILED,key); 283 275 psFree(newFolderEntry); 284 276 return false; … … 286 278 287 279 if(!psHashAdd(mdTable, key, newFolderEntry)) { 288 psError(PS_ERR_UNKNOWN,false, 289 PS_ERRORTEXT_psMetadata_ADD_TABLE_FAILED, 290 key); 280 psError(PS_ERR_UNKNOWN,false,PS_ERRORTEXT_psMetadata_ADD_TABLE_FAILED,key); 291 281 psFree(newFolderEntry); 292 282 return false; … … 298 288 299 289 // Folder node replaces leaf or folder node - Put old node into new folder and remove from table 300 if(!psListAdd(metadataItem->items, PS_LIST_TAIL, existingEntry)) { 301 psError(PS_ERR_UNKNOWN,false, 302 PS_ERRORTEXT_psMetadata_ADD_LIST_FAILED, 303 key); 290 if(metadataItem->data.list == NULL) { 291 metadataItem->data.list = psListAlloc(NULL); 292 } 293 294 if(!psListAdd(metadataItem->data.list, PS_LIST_TAIL, existingEntry)) { 295 psError(PS_ERR_UNKNOWN,false,PS_ERRORTEXT_psMetadata_ADD_LIST_FAILED,key); 304 296 return false; 305 297 } 306 298 307 299 if(!psHashRemove(mdTable, key)) { 308 psError(PS_ERR_UNKNOWN,false, 309 PS_ERRORTEXT_psMetadata_REMOVE_TABLE_FAILED, 310 key); 300 psError(PS_ERR_UNKNOWN,false,PS_ERRORTEXT_psMetadata_REMOVE_TABLE_FAILED,key); 311 301 return false; 312 302 } 313 303 314 304 if(!psHashAdd(mdTable, key, metadataItem)) { 315 psError(PS_ERR_UNKNOWN,false, 316 PS_ERRORTEXT_psMetadata_ADD_TABLE_FAILED, 317 key); 305 psError(PS_ERR_UNKNOWN,false,PS_ERRORTEXT_psMetadata_ADD_TABLE_FAILED,key); 318 306 return false; 319 307 } … … 323 311 // Node doesn't exist - Add new metadata item to metadata collection's hash 324 312 if(!psHashAdd(mdTable, key, metadataItem)) { 325 psError(PS_ERR_UNKNOWN,false, 326 PS_ERRORTEXT_psMetadata_ADD_TABLE_FAILED, 327 key); 313 psError(PS_ERR_UNKNOWN,false,PS_ERRORTEXT_psMetadata_ADD_TABLE_FAILED,key); 328 314 return false; 329 315 } … … 331 317 332 318 // Add items to metadata collection's list, even if they have the same metadata item names. Folder nodes 333 // (PS_META_ ITEM_SET metadata items) are not added, since the metadata list is flat.334 if(metadataItem->type != PS_META_ ITEM_SET) {319 // (PS_META_LIST metadata items) are not added, since the metadata list is flat. 320 if(metadataItem->type != PS_META_LIST) { 335 321 if(!psListAdd(mdList, location, metadataItem)) { 336 psError(PS_ERR_UNKNOWN,false, 337 PS_ERRORTEXT_psMetadata_ADD_COLLECTION_FAILED, 338 key); 322 psError(PS_ERR_UNKNOWN,false,PS_ERRORTEXT_psMetadata_ADD_COLLECTION_FAILED,key); 339 323 return false; 340 324 } … … 344 328 } 345 329 346 psBool psMetadataAdd(psMetadata* restrict md, psS32 where, const char *name, ps MetadataType type,347 const char *comment, ...)330 psBool psMetadataAdd(psMetadata* restrict md, psS32 where, const char *name, psElemType pType, 331 psMetadataType type, const char *comment, ...) 348 332 { 349 333 va_list argPtr; … … 351 335 352 336 va_start(argPtr, comment); 353 metadataItem = psMetadataItemAllocV(name, type, comment, argPtr);337 metadataItem = psMetadataItemAllocV(name, pType, type, comment, argPtr); 354 338 va_end(argPtr); 355 339 356 340 if (!psMetadataAddItem(md, metadataItem, where)) { 357 psError(PS_ERR_UNKNOWN,false, 358 PS_ERRORTEXT_psMetadata_ADD_FAILED); 341 psError(PS_ERR_UNKNOWN,false,PS_ERRORTEXT_psMetadata_ADD_FAILED); 359 342 psFree(metadataItem); 360 343 return false; … … 368 351 psBool psMetadataRemove(psMetadata* restrict md, psS32 where, const char *restrict key) 369 352 { 370 psS32 numChildren = 0;371 353 psList* mdList = NULL; 354 psList* entryList = NULL; 372 355 psHash* mdTable = NULL; 373 356 psMetadataItem* entry = NULL; … … 386 369 387 370 // Remove by key name 388 entry = (psMetadataItem* )psHashLookup(mdTable, key);371 entry = (psMetadataItem*)psHashLookup(mdTable, key); 389 372 if (entry == NULL) { 390 psError(PS_ERR_BAD_PARAMETER_VALUE, true, 391 PS_ERRORTEXT_psMetadata_FIND_FAILED, 392 key); 373 psError(PS_ERR_BAD_PARAMETER_VALUE, true, PS_ERRORTEXT_psMetadata_FIND_FAILED, key); 393 374 return false; 394 375 } 395 376 396 numChildren = entry->items->size; 397 if (entry->type == PS_META_ITEM_SET && numChildren > 0) { 377 if (entry->type == PS_META_LIST) { 398 378 399 379 // Table entry has children. Entry and children must be removed from metadata collection's list 400 psListSetIterator(entry ->items, PS_LIST_HEAD);401 entryChild = psListGetCurrent(entry ->items);402 while (entryChild != NULL) {380 psListSetIterator(entryList, PS_LIST_HEAD); 381 entryChild = psListGetCurrent(entryList); 382 while(entryChild != NULL) { 403 383 if (!psListRemove(mdList, PS_LIST_UNKNOWN, entryChild)) { 404 psError(PS_ERR_UNKNOWN,false, 405 PS_ERRORTEXT_psMetadata_REMOVE_LIST_FAILED, 406 key); 384 psError(PS_ERR_UNKNOWN, false, PS_ERRORTEXT_psMetadata_REMOVE_LIST_FAILED, key); 407 385 return false; 408 386 } 409 entryChild = psListGetNext(entry ->items);387 entryChild = psListGetNext(entryList); 410 388 } 411 389 } else { … … 413 391 // Table entry has no children. Remove entry from metadata collection's list 414 392 if (!psListRemove(mdList, PS_LIST_UNKNOWN, entry)) { 415 psError(PS_ERR_UNKNOWN,false, 416 PS_ERRORTEXT_psMetadata_REMOVE_LIST_FAILED, 417 key); 393 psError(PS_ERR_UNKNOWN, false, PS_ERRORTEXT_psMetadata_REMOVE_LIST_FAILED, key); 418 394 return false; 419 395 } … … 421 397 // Remove entry from metadata collection's table 422 398 if (!psHashRemove(mdTable, key)) { 423 psError(PS_ERR_UNKNOWN,false, 424 PS_ERRORTEXT_psMetadata_REMOVE_TABLE_FAILED, 425 key); 399 psError(PS_ERR_UNKNOWN, false, PS_ERRORTEXT_psMetadata_REMOVE_TABLE_FAILED, key); 426 400 return false; 427 401 } … … 431 405 entry = psListGet(mdList, where); 432 406 if (entry == NULL) { 433 psError(PS_ERR_BAD_PARAMETER_VALUE, true, 434 PS_ERRORTEXT_psMetadata_FIND_INDEX_FAILED, 435 where); 407 psError(PS_ERR_BAD_PARAMETER_VALUE, true, PS_ERRORTEXT_psMetadata_FIND_INDEX_FAILED, where); 436 408 return false; 437 409 } 438 410 439 411 key = entry->name; 440 if (key == NULL) { 441 psError(PS_ERR_BAD_PARAMETER_VALUE, true, 442 PS_ERRORTEXT_psMetadata_REMOVE_LIST_INDEX_FAILED, 443 where); 412 if(key == NULL) { 413 psError(PS_ERR_BAD_PARAMETER_VALUE, true, PS_ERRORTEXT_psMetadata_REMOVE_LIST_INDEX_FAILED, where); 444 414 return false; 445 415 } … … 463 433 mdTable = md->table; 464 434 465 entry = (psMetadataItem* )psHashLookup(mdTable, key);435 entry = (psMetadataItem*)psHashLookup(mdTable, key); 466 436 if (entry == NULL) { 467 437 return NULL; … … 478 448 PS_PTR_CHECK_NULL(md->list,NULL); 479 449 480 entry = (psMetadataItem* ) psListGet(md->list, where);450 entry = (psMetadataItem*) psListGet(md->list, where); 481 451 if (entry == NULL) { 482 psError(PS_ERR_BAD_PARAMETER_VALUE, true, 483 PS_ERRORTEXT_psMetadata_FIND_INDEX_FAILED, 484 where); 452 psError(PS_ERR_BAD_PARAMETER_VALUE, true, PS_ERRORTEXT_psMetadata_FIND_INDEX_FAILED, where); 485 453 return NULL; 486 454 } -
trunk/psLib/src/collections/psMetadata.h
r2521 r2607 11 11 * @author Ross Harman, MHPCC 12 12 * 13 * @version $Revision: 1.2 6$ $Name: not supported by cvs2svn $14 * @date $Date: 2004-1 1-30 00:27:14 $13 * @version $Revision: 1.27 $ $Name: not supported by cvs2svn $ 14 * @date $Date: 2004-12-03 23:14:34 $ 15 15 * 16 16 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 33 33 */ 34 34 typedef enum { 35 PS_META_ITEM_SET = 0, ///< Null. Metadata is in psMetadataItem.items 36 PS_META_BOOL, ///< Boolean data. 37 PS_META_S32, ///< Signed 32-bit integer data. 38 PS_META_F32, ///< Single-precision float data. 39 PS_META_F64, ///< Double-precision float data. 40 PS_META_STR, ///< String data (Stored in as psPtr ). 41 PS_META_VEC, ///< Vector data (Stored in as psPtr ). 42 PS_META_HASH, ///< Hash data (Stored in as psPtr ). 43 PS_META_IMG, ///< Image data (Stored in as psPtr ). 44 PS_META_LOOKUPTABLE, ///< Lookup table data (Stored as void *). 45 PS_META_JPEG, ///< JPEG data (Stored in as psPtr ). 46 PS_META_PNG, ///< PNG data (Stored in as psPtr ). 47 PS_META_ASTROM, ///< Astrometric coefficients (Stored in as psPtr ). 48 PS_META_UNKNOWN, ///< Other data (Stored in as psPtr ). 35 PS_META_PRIMITIVE, ///< Primitive data. 36 PS_META_LIST, ///< List data (Stored as item.data.list). 37 PS_META_STR, ///< String data (Stored as item.data.V). 38 PS_META_VEC, ///< Vector data (Stored as item.data.V). 39 PS_META_IMG, ///< Image data (Stored as item.data.V). 40 PS_META_HASH, ///< Hash data (Stored as item.data.V). 41 PS_META_LOOKUPTABLE, ///< Lookup table data (Stored as item.data.V). 42 PS_META_JPEG, ///< JPEG data (Stored as item.data.V). 43 PS_META_PNG, ///< PNG data (Stored as item.data.V). 44 PS_META_ASTROM, ///< Astrometric coefficients (Stored as item.data.V). 45 PS_META_UNKNOWN, ///< Other data (Stored as item.data.V). 49 46 PS_META_NTYPE ///< Number of types. Must be last. 50 47 } psMetadataType; 51 52 /** Metadata item data structure.53 *54 * Struct for maintaining metadata items of varying types. It also contains55 * information about the item name, flags, comments, and other items with the same name.56 */57 typedef struct psMetadataItem58 {59 const psS32 id; ///< Unique ID for metadata item.60 char *restrict name; ///< Name of metadata item.61 psMetadataType type; ///< Type of metadata item.62 union {63 psBool B; ///< boolean data64 psS32 S32; ///< Signed 32-bit integer data.65 psF32 F32; ///< Single-precision float data.66 psF64 F64; ///< Double-precision float data.67 psPtr V; ///< Pointer to other type of data.68 } data; ///< Union for data types.69 char *comment; ///< Optional comment ("", not NULL).70 psList* restrict items; ///< List of psMetadataItems with same name.71 }72 psMetadataItem;73 48 74 49 /** Metadata data structure. … … 85 60 } 86 61 psMetadata; 62 63 /** Metadata item data structure. 64 * 65 * Struct for maintaining metadata items of varying types. It also contains 66 * information about the item name, flags, comments, and other items with the same name. 67 */ 68 typedef struct psMetadataItem 69 { 70 const psS32 id; ///< Unique ID for metadata item. 71 char *name; ///< Name of metadata item. 72 psMetadataType type; ///< Type of metadata item. 73 psElemType pType; ///< Primitive data type 74 union { 75 psBool B; ///< boolean data 76 psS32 S32; ///< Signed 32-bit integer data. 77 psF32 F32; ///< Single-precision float data. 78 psF64 F64; ///< Double-precision float data. 79 psList *list; ///< List data. 80 psMetadata *md; ///< Metadata data. 81 psPtr V; ///< Pointer to other type of data. 82 } data; ///< Union for data types. 83 char *comment; ///< Optional comment ("", not NULL). 84 } 85 psMetadataItem; 87 86 88 87 /** Create a metadata item. … … 103 102 psMetadataItem* psMetadataItemAlloc( 104 103 const char *name, ///< Name of metadata item. 104 psElemType pType, ///< Primitive type. 105 105 psMetadataType type, ///< Type of metadata item. 106 106 const char *comment, ///< Comment for metadata item. … … 125 125 psMetadataItem* psMetadataItemAllocV( 126 126 const char *name, ///< Name of metadata item. 127 psElemType pType, ///< Primitive type. 127 128 psMetadataType type, ///< Type of metadata item. 128 129 const char *comment, ///< Comment for metadata item. … … 149 150 psMetadata* restrict md, ///< Metadata collection to insert metadat item. 150 151 psMetadataItem* restrict item, ///< Metadata item to be added. 151 psS32 location ///< Location to be added.152 psS32 location ///< Location to be added. 152 153 ); 153 154 … … 160 161 psBool psMetadataAdd( 161 162 psMetadata* restrict md, ///< Metadata collection to insert metadat item. 162 psS32 where, ///< Location to be added.163 psS32 where, ///< Location to be added. 163 164 const char *name, ///< Name of metadata item. 165 psElemType pType, ///< Primitive type. 164 166 psMetadataType type, ///< Type of metadata item. 165 167 const char *comment, ///< Comment for metadata item. … … 179 181 psBool psMetadataRemove( 180 182 psMetadata* restrict md, ///< Metadata collection to insert metadat item. 181 psS32 where, ///< Location to be removed.183 psS32 where, ///< Location to be removed. 182 184 const char *restrict key ///< Name of metadata key. 183 185 ); … … 205 207 psMetadataItem* psMetadataGet( 206 208 psMetadata* restrict md, ///< Metadata collection to insert metadat item. 207 psS32 where ///< Location to be retrieved.209 psS32 where ///< Location to be retrieved. 208 210 ); 209 211 … … 217 219 psBool psMetadataSetIterator( 218 220 psMetadata* restrict md, ///< Metadata collection to iterate. 219 psS32 where ///< Location of iterator.221 psS32 where ///< Location of iterator. 220 222 ); 221 223 … … 229 231 psMetadata* restrict md, ///< Metadata collection to iterate. 230 232 const char *restrict match, ///< Beginning of key name. 231 psS32 which ///< Iterator to be used.233 psS32 which ///< Iterator to be used. 232 234 ); 233 235 … … 241 243 psMetadata* restrict md, ///< Metadata collection to iterate. 242 244 const char *restrict match, ///< Beginning of key name. 243 psS32 which ///< Iterator to be used.245 psS32 which ///< Iterator to be used. 244 246 ); 245 247 -
trunk/psLib/src/collections/psMetadataIO.c
r2525 r2607 9 9 * @author Ross Harman, MHPCC 10 10 * 11 * @version $Revision: 1.1 2$ $Name: not supported by cvs2svn $12 * @date $Date: 2004-1 1-30 01:09:14$11 * @version $Revision: 1.13 $ $Name: not supported by cvs2svn $ 12 * @date $Date: 2004-12-03 23:14:40 $ 13 13 * 14 14 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 60 60 /** Free and null temporary variables used by config file parser */ 61 61 #define CLEAR_TEMPS() \ 62 if(strName) { \ 63 psFree(strName); \ 64 strName = NULL; \ 65 } \ 66 if(strType) { \ 67 psFree(strType); \ 68 strType = NULL; \ 69 } \ 70 if(strValue) { \ 71 psFree(strValue); \ 72 strValue = NULL; \ 73 } \ 74 if(strComment) { \ 75 psFree(strComment); \ 76 strComment = NULL; \ 77 } \ 78 if(tempVec) { \ 79 psFree(tempVec); \ 80 tempVec = NULL; \ 62 if(strName) { \ 63 psFree(strName); \ 64 strName = NULL; \ 65 } \ 66 if(strType) { \ 67 psFree(strType); \ 68 strType = NULL; \ 69 } \ 70 if(strValue) { \ 71 psFree(strValue); \ 72 strValue = NULL; \ 73 } \ 74 if(strComment) { \ 75 psFree(strComment); \ 76 strComment = NULL; \ 81 77 } 82 78 … … 316 312 { 317 313 psMetadataType type; 314 psElemType pType; 318 315 319 316 PS_PTR_CHECK_NULL(fd,); … … 322 319 323 320 type = metadataItem->type; 321 pType = metadataItem->pType; 324 322 325 323 switch(type) { 326 case PS_META_BOOL: 327 fprintf(fd, format, metadataItem->data.B); 328 break; 329 case PS_META_S32: 330 fprintf(fd,format, metadataItem->data.S32); 331 break; 332 case PS_META_F32: 333 fprintf(fd, format, metadataItem->data.F32); 334 break; 335 case PS_META_F64: 336 fprintf(fd, format, metadataItem->data.F64); 324 case PS_META_PRIMITIVE: 325 switch(pType) { 326 case PS_TYPE_BOOL: 327 fprintf(fd, format, metadataItem->data.B); 328 break; 329 case PS_TYPE_S32: 330 fprintf(fd,format, metadataItem->data.S32); 331 break; 332 case PS_TYPE_F32: 333 fprintf(fd, format, metadataItem->data.F32); 334 break; 335 case PS_TYPE_F64: 336 fprintf(fd, format, metadataItem->data.F64); 337 break; 338 default: 339 psError(PS_ERR_BAD_PARAMETER_TYPE,true, PS_ERRORTEXT_psMetadata_METATYPE_INVALID, (int)pType); 340 } 337 341 break; 338 342 case PS_META_STR: 339 fprintf(fd, format, metadataItem->data.V);343 fprintf(fd,format, metadataItem->data.V); 340 344 break; 341 345 default: … … 359 363 psS32 numKeys = 0; 360 364 psS32 keyNum = 0; 361 psMetadataType metadataItemType;362 365 fitsfile *fd = NULL; 363 366 … … 416 419 switch (keyType) { 417 420 case 'I': 418 metadataItemType = PS_META_S32;419 success = psMetadataAdd(output, PS_LIST_TAIL, keyName, metadataItemType,keyComment, atoi(keyValue));421 success = psMetadataAdd(output, PS_LIST_TAIL, keyName, PS_TYPE_S32, PS_META_PRIMITIVE, 422 keyComment, atoi(keyValue)); 420 423 break; 421 424 case 'F': 422 metadataItemType = PS_META_F64;423 success = psMetadataAdd(output, PS_LIST_TAIL, keyName, metadataItemType,keyComment, atof(keyValue));425 success = psMetadataAdd(output, PS_LIST_TAIL, keyName, PS_TYPE_F64, PS_META_PRIMITIVE, 426 keyComment, atof(keyValue)); 424 427 break; 425 428 case 'C': 426 metadataItemType = PS_META_STR;427 success = psMetadataAdd(output, PS_LIST_TAIL, keyName, metadataItemType, keyComment,keyValue);429 success = psMetadataAdd(output, PS_LIST_TAIL, keyName, PS_TYPE_PTR, PS_META_STR, keyComment, 430 keyValue); 428 431 break; 429 432 case 'L': 430 metadataItemType = PS_META_BOOL;431 433 tempBool = (keyValue[0] == 'T') ? 1 : 0; 432 success = psMetadataAdd(output, PS_LIST_TAIL, keyName, metadataItemType, keyComment, tempBool); 434 success = psMetadataAdd(output, PS_LIST_TAIL, keyName, PS_TYPE_BOOL, PS_META_PRIMITIVE, keyComment, 435 tempBool); 433 436 break; 434 437 case 'U': 435 438 case 'X': 436 439 default: 437 psError(PS_ERR_IO, true, 438 PS_ERRORTEXT_psMetadataIO_FITS_METATYPE_INVALID, 439 keyType); 440 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FITS_METATYPE_INVALID, keyType); 440 441 return output; 441 442 } 442 443 443 444 if (!success) { 444 psError(PS_ERR_UNKNOWN, false, 445 PS_ERRORTEXT_psMetadataIO_ADD_FAILED, 446 keyName); 445 psError(PS_ERR_UNKNOWN, false, PS_ERRORTEXT_psMetadataIO_ADD_FAILED, keyName); 447 446 return output; 448 447 } … … 452 451 } 453 452 454 455 psS32 psMetadataParseConfig(psMetadata** md, const char *fileName, psBool overwrite) 453 psMetadata* psMetadataParseConfig(psMetadata* md, psU32 *nFail, const char *fileName, psBool overwrite) 456 454 { 457 455 psBool tempBool; … … 463 461 char *linePtr = NULL; 464 462 psS32 status = 0; 465 psS32 lineCount = 0; 466 psS32 failedLines = 0; 463 psU32 lineCount = 0; 467 464 psF64 tempDbl = 0.0; 468 465 psS32 tempInt = 0.0; … … 470 467 psVector *tempVec = NULL; 471 468 FILE *fp = NULL; 472 psElemType elemType;469 psElemType pType; 473 470 psMetadataType mdType; 474 471 475 472 476 473 // Check for nulls 477 PS_PTR_CHECK_NULL(fileName, -1);474 PS_PTR_CHECK_NULL(fileName,NULL); 478 475 if((fp=fopen(fileName, "r")) == NULL) { 479 psError(PS_ERR_IO, true, 480 PS_ERRORTEXT_psMetadataIO_FILE_OPEN_FAILED, 481 fileName); 482 return -1; 476 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FILE_OPEN_FAILED, fileName); 477 return NULL; 483 478 } 484 479 485 480 // Allocate metadata if necessary 486 if ( *md == NULL) {487 *md = psMetadataAlloc();481 if (md == NULL) { 482 md = psMetadataAlloc(); 488 483 } 489 484 … … 504 499 // Check for more than one '*' or '@' in a line 505 500 if(repeatedChars(linePtr, '@') > 1) { 506 failedLines++;501 (*nFail)++; 507 502 psError(PS_ERR_IO, true, 508 PS_ERRORTEXT_psMetadataIO_FILE_MULTIPLE_CHAR, 509 '@', lineCount, fileName); 503 PS_ERRORTEXT_psMetadataIO_FILE_MULTIPLE_CHAR, '@', lineCount, fileName); 510 504 continue; 511 505 } else if(repeatedChars(linePtr, '*') > 1) { 512 failedLines++;506 (*nFail)++; 513 507 psError(PS_ERR_IO, true, 514 PS_ERRORTEXT_psMetadataIO_FILE_MULTIPLE_CHAR, 515 '*', lineCount, fileName); 508 PS_ERRORTEXT_psMetadataIO_FILE_MULTIPLE_CHAR, '*', lineCount, fileName); 516 509 continue; 517 510 } else if(repeatedChars(linePtr, '~') > 0) { 518 failedLines++;511 (*nFail)++; 519 512 psError(PS_ERR_IO, true, 520 PS_ERRORTEXT_psMetadataIO_FILE_MULTIPLE_CHAR, 521 '~', lineCount, fileName); 513 PS_ERRORTEXT_psMetadataIO_FILE_MULTIPLE_CHAR, '~', lineCount, fileName); 522 514 continue; 523 515 } … … 526 518 strName = getToken(&linePtr, " ", &status); 527 519 if(strName==NULL || status) { 528 failedLines++;520 (*nFail)++; 529 521 status = 0; 530 522 psError(PS_ERR_IO, true, 531 PS_ERRORTEXT_psMetadataIO_FILE_ELEMENT_NULL, 532 "name",lineCount, fileName); 523 PS_ERRORTEXT_psMetadataIO_FILE_ELEMENT_NULL, "name", lineCount, fileName); 533 524 continue; 534 525 } … … 537 528 strType = getToken(&linePtr, " ", &status); 538 529 if(strType==NULL) { 539 failedLines++;530 (*nFail)++; 540 531 status = 0; 541 psError(PS_ERR_IO, true, 542 PS_ERRORTEXT_psMetadataIO_FILE_ELEMENT_NULL, 543 "type",lineCount, fileName); 532 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FILE_ELEMENT_NULL, "type",lineCount, 533 fileName); 544 534 continue; 545 535 } else if(!strncmp(strType, "*", 1)) { 546 mdType = PS_META_ITEM_SET; 536 mdType = PS_META_LIST; 537 pType = PS_TYPE_PTR; 547 538 } else if(!strncmp(strType, "STR", 3)) { 548 539 mdType = PS_META_STR; 549 elemType = PS_TYPE_PTR;540 pType = PS_TYPE_PTR; 550 541 } else if(!strncmp(strType, "BOOL", 3)) { 551 mdType = PS_META_ BOOL;552 elemType = PS_TYPE_U8;542 mdType = PS_META_PRIMITIVE; 543 pType = PS_TYPE_BOOL; 553 544 } else if(!strncmp(strType, "S32", 3)) { 554 mdType = PS_META_ S32;555 elemType = PS_TYPE_S32;545 mdType = PS_META_PRIMITIVE; 546 pType = PS_TYPE_S32; 556 547 } else if(!strncmp(strType, "F32", 3)) { 557 mdType = PS_META_ F32;558 elemType = PS_TYPE_F32;548 mdType = PS_META_PRIMITIVE; 549 pType = PS_TYPE_F32; 559 550 } else if(!strncmp(strType, "F64", 3)) { 560 mdType = PS_META_ F64;561 elemType = PS_TYPE_F64;551 mdType = PS_META_PRIMITIVE; 552 pType = PS_TYPE_F64; 562 553 } else { 563 failedLines++; 564 psError(PS_ERR_IO, true, 565 PS_ERRORTEXT_psMetadataIO_FILE_TYPE_INVALID, 566 strType, lineCount, fileName); 554 (*nFail)++; 555 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FILE_TYPE_INVALID, strType, lineCount, 556 fileName); 567 557 continue; 568 558 } … … 573 563 574 564 // Get the metadata item value if there is one. Lines with * don't have values. 575 if(mdType != PS_META_ ITEM_SET) {565 if(mdType != PS_META_LIST) { 576 566 strValue = getToken(&linePtr, "#", &status); 577 567 if(strValue==NULL) { 578 failedLines++;568 (*nFail)++; 579 569 status = 0; 580 psError(PS_ERR_IO, true, 581 PS_ERRORTEXT_psMetadataIO_FILE_ELEMENT_NULL, 582 "value",lineCount, fileName); 570 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FILE_ELEMENT_NULL, "value", lineCount, 571 fileName); 583 572 continue; 584 573 } … … 588 577 strComment = getToken(&linePtr,"~", &status); 589 578 if(status) { 590 failedLines++;579 (*nFail)++; 591 580 status = 0; 592 psError(PS_ERR_IO, true, 593 PS_ERRORTEXT_psMetadataIO_FILE_ELEMENT_NULL, 594 "comment",lineCount, fileName); 581 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FILE_ELEMENT_NULL, "comment", lineCount, 582 fileName); 595 583 continue; 596 584 } … … 599 587 and allow switch/case below to add new item. If overwrite is false, then report error. If found 600 588 item is folder node, then psMetadataAdd will automatically add a new child. */ 601 metadataItem = psMetadataLookup( *md, strName);589 metadataItem = psMetadataLookup(md, strName); 602 590 if(metadataItem != NULL) { 603 if(metadataItem->type!=PS_META_ ITEM_SET) {591 if(metadataItem->type!=PS_META_LIST) { 604 592 if(overwrite) { 605 psMetadataRemove( *md, PS_LIST_UNKNOWN, strName);593 psMetadataRemove(md, PS_LIST_UNKNOWN, strName); 606 594 } else { 607 failedLines++; 608 psError(PS_ERR_IO, true, 609 PS_ERRORTEXT_psMetadataIO_OVERWRITE_ITEM, 610 strName, lineCount, fileName); 595 (*nFail)++; 596 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_OVERWRITE_ITEM, strName, lineCount, 597 fileName); 611 598 continue; 612 599 } … … 616 603 // Create and add metadata item to metadata and parse values 617 604 switch (mdType) { 618 case PS_META_ ITEM_SET:619 psMetadataAdd( *md, PS_LIST_TAIL, strName, mdType, NULL, NULL);605 case PS_META_LIST: 606 psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, NULL, NULL); 620 607 break; 621 case PS_META_BOOL: 622 tempBool = parseBool(strValue, &status); 608 case PS_META_STR: 609 psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, strComment, strValue); 610 break; 611 case PS_META_VEC: 612 tempVec = parseVector(strValue, pType, &status); 623 613 if(!status) { 624 psMetadataAdd( *md, PS_LIST_TAIL, strName, mdType, strComment, tempBool);614 psMetadataAdd(md, PS_LIST_TAIL, strName+1, pType, mdType, strComment, tempVec); 625 615 } else { 626 616 status = 0; 627 failedLines++; 628 psError(PS_ERR_IO, true, 629 PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, 630 strValue, strName, strType, lineCount, fileName); 617 (*nFail)++; 618 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, 619 strType, lineCount, fileName); 631 620 continue; 632 621 } 633 622 break; 634 case PS_META_S32: 635 tempInt = (psS32)parseValue(strValue, &status); 636 if(!status) { 637 psMetadataAdd(*md, PS_LIST_TAIL, strName, mdType, strComment, tempInt); 638 } else { 639 status = 0; 640 failedLines++; 641 psError(PS_ERR_IO, true, 642 PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, 643 strValue, strName, strType, lineCount, fileName); 623 case PS_META_PRIMITIVE: 624 switch (pType) { 625 case PS_TYPE_BOOL: 626 tempBool = parseBool(strValue, &status); 627 if(!status) { 628 psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, strComment, tempBool); 629 } else { 630 status = 0; 631 (*nFail)++; 632 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, 633 strType, lineCount, fileName); 634 continue; 635 } 636 break; 637 case PS_TYPE_S32: 638 tempInt = (psS32)parseValue(strValue, &status); 639 if(!status) { 640 psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, strComment, tempInt); 641 } else { 642 status = 0; 643 (*nFail)++; 644 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, 645 strType, lineCount, fileName); 646 continue; 647 } 648 break; 649 case PS_TYPE_F32: 650 case PS_TYPE_F64: 651 tempDbl = parseValue(strValue, &status); 652 if(!status) { 653 psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, strComment, tempDbl); 654 } else { 655 status = 0; 656 (*nFail)++; 657 psError(PS_ERR_IO, true, 658 PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, strType, lineCount, 659 fileName); 660 continue; 661 } 662 break; 663 default: 664 (*nFail)++; 665 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FILE_TYPE_INVALID, mdType, lineCount, 666 fileName); 644 667 continue; 645 } 646 break; 647 case PS_META_F32: 648 case PS_META_F64: 649 tempDbl = parseValue(strValue, &status); 650 if(!status) { 651 psMetadataAdd(*md, PS_LIST_TAIL, strName, mdType, strComment, tempDbl); 652 } else { 653 status = 0; 654 failedLines++; 655 psError(PS_ERR_IO, true, 656 PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, 657 strValue, strName, strType, lineCount, fileName); 658 continue; 659 } 660 break; 661 case PS_META_STR: 662 psMetadataAdd(*md, PS_LIST_TAIL, strName, mdType, strComment, strValue); 663 break; 664 case PS_META_VEC: 665 tempVec = parseVector(strValue, elemType, &status); 666 if(!status) { 667 psMetadataAdd(*md, PS_LIST_TAIL, strName+1, mdType, strComment, tempVec); 668 } else { 669 status = 0; 670 failedLines++; 671 psError(PS_ERR_IO, true, 672 PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, 673 strValue, strName, strType, lineCount, fileName); 674 continue; 675 } 668 } // switch 676 669 break; 677 670 default: 678 failedLines++; 679 psError(PS_ERR_IO, true, 680 PS_ERRORTEXT_psMetadataIO_FILE_TYPE_INVALID, 681 mdType, lineCount, fileName); 671 (*nFail)++; 672 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FILE_TYPE_INVALID, mdType, lineCount, 673 fileName); 682 674 continue; 683 675 } // switch … … 687 679 psFree(line); 688 680 689 return failedLines;681 return md; 690 682 } 691 683 … … 753 745 754 746 // Add attributes to metadata 755 psMetadataAdd(md, PS_LIST_TAIL, "htAtts", PS_ META_HASH, NULL, htAtts);747 psMetadataAdd(md, PS_LIST_TAIL, "htAtts", PS_TYPE_PTR, PS_META_HASH, NULL, htAtts); 756 748 757 749 psFree(psTagName); … … 765 757 psBool tempBool = false; 766 758 psS32 status = 0; 767 psU 64lineNumber = 0;759 psU32 lineNumber = 0; 768 760 psF64 tempDbl = 0.0; 769 761 psS32 tempInt = 0.0; 770 psElemType elemType;762 psElemType pType; 771 763 psMetadataType mdType; 772 764 char *fileName = NULL; … … 790 782 metadataItem = psMetadataLookup(md, "htAtts"); 791 783 PS_PTR_CHECK_NULL_GENERAL(metadataItem, return); 792 PS_PTR_CHECK_NULL_GENERAL(metadataItem-> items, return);793 psListSetIterator(metadataItem-> items, PS_LIST_TAIL);794 metadataItem = (psMetadataItem*)psListGetCurrent(metadataItem-> items);795 htAtts = (psHash*)metadataItem->data. V;784 PS_PTR_CHECK_NULL_GENERAL(metadataItem->data.list, return); 785 psListSetIterator(metadataItem->data.list, PS_LIST_TAIL); 786 metadataItem = (psMetadataItem*)psListGetCurrent(metadataItem->data.list); 787 htAtts = (psHash*)metadataItem->data.list; 796 788 PS_PTR_CHECK_NULL_GENERAL(htAtts, return); 797 789 fileName = (char*)input->filename; … … 811 803 if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psString")) { 812 804 mdType = PS_META_STR; 813 elemType = PS_TYPE_PTR;805 pType = PS_TYPE_PTR; 814 806 } else if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psBool")) { 815 mdType = PS_META_ BOOL;816 elemType = PS_TYPE_U8;807 mdType = PS_META_PRIMITIVE; 808 pType = PS_TYPE_U8; 817 809 } else if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psS32")) { 818 mdType = PS_META_ S32;819 elemType = PS_TYPE_S32;810 mdType = PS_META_PRIMITIVE; 811 pType = PS_TYPE_S32; 820 812 } else if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psF32")) { 821 mdType = PS_META_ F32;822 elemType = PS_TYPE_F32;813 mdType = PS_META_PRIMITIVE; 814 pType = PS_TYPE_F32; 823 815 } else if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psF64")) { 824 mdType = PS_META_ F64;825 elemType = PS_TYPE_F64;816 mdType = PS_META_PRIMITIVE; 817 pType = PS_TYPE_F64; 826 818 } else { 827 819 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_TYPE_INVALID_LINE_FILE, strType, lineNumber, … … 847 839 metadataItem = psMetadataLookup(md, strName); 848 840 if(metadataItem != NULL) { 849 if(metadataItem->type != PS_META_ ITEM_SET) {841 if(metadataItem->type != PS_META_LIST) { 850 842 if(overwrite) { 851 843 psMetadataRemove(md, PS_LIST_UNKNOWN, strName); … … 861 853 // Create metadata item and add to metadata 862 854 switch(mdType) { 863 case PS_META_ITEM_SET: 864 psMetadataAdd(md, PS_LIST_TAIL, strName, mdType, NULL, NULL); 865 break; 866 case PS_META_BOOL: 867 tempBool = parseBool((char*)strValue, &status); 868 if(!status) { 869 psMetadataAdd(md, PS_LIST_TAIL, strName, mdType, NULL, tempBool); 870 } else { 871 status = 0; 872 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, strType, 873 lineNumber, fileName); 874 } 875 break; 876 case PS_META_S32: 877 tempInt = (psS32)parseValue((char*)strValue, &status); 878 if(!status) { 879 psMetadataAdd(md, PS_LIST_TAIL, strName, mdType, NULL, tempInt); 880 } else { 881 status = 0; 882 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, strType, 883 lineNumber, fileName); 884 } 885 break; 886 case PS_META_F32: 887 case PS_META_F64: 888 tempDbl = parseValue((char*)strValue, &status); 889 if(!status) { 890 psMetadataAdd(md, PS_LIST_TAIL, strName, mdType, NULL, tempDbl); 891 } else { 892 status = 0; 893 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, strType, 894 lineNumber, fileName); 895 } 855 case PS_META_LIST: 856 psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, NULL, NULL); 896 857 break; 897 858 case PS_META_STR: 898 psMetadataAdd(md, PS_LIST_TAIL, strName, mdType, NULL, strValue); 859 psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, NULL, strValue); 860 break; 861 case PS_META_PRIMITIVE: 862 switch(pType) { 863 case PS_TYPE_BOOL: 864 tempBool = parseBool((char*)strValue, &status); 865 if(!status) { 866 psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, NULL, tempBool); 867 } else { 868 status = 0; 869 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, strType, 870 lineNumber, fileName); 871 } 872 break; 873 case PS_TYPE_S32: 874 tempInt = (psS32)parseValue((char*)strValue, &status); 875 if(!status) { 876 psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, NULL, tempInt); 877 } else { 878 status = 0; 879 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, strType, 880 lineNumber, fileName); 881 } 882 break; 883 case PS_TYPE_F32: 884 case PS_TYPE_F64: 885 tempDbl = parseValue((char*)strValue, &status); 886 if(!status) { 887 psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, NULL, tempDbl); 888 } else { 889 status = 0; 890 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, strType, 891 lineNumber, fileName); 892 } 893 break; 894 default: 895 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FILE_TYPE_INVALID, strType, lineNumber, fileName); 896 } // End switch 899 897 break; 900 898 default: … … 902 900 } // End switch 903 901 902 904 903 return; 905 904 } … … 910 909 bool overwrite = false; 911 910 psS32 status = 0; 912 psU 64lineNumber = 0;913 psElemType elemType;911 psU32 lineNumber = 0; 912 psElemType pType; 914 913 psMetadataType mdType; 915 914 char *strName = NULL; … … 936 935 tables = psMetadataLookup(md, "htAtts"); 937 936 PS_PTR_CHECK_NULL_GENERAL(tables, return); 938 PS_PTR_CHECK_NULL_GENERAL(tables-> items, return);939 psListSetIterator(tables-> items, PS_LIST_TAIL);940 table = (psMetadataItem*)psListGetCurrent(tables-> items);941 htAtts = (psHash*)table->data. V;937 PS_PTR_CHECK_NULL_GENERAL(tables->data.list, return); 938 psListSetIterator(tables->data.list, PS_LIST_TAIL); 939 table = (psMetadataItem*)psListGetCurrent(tables->data.list); 940 htAtts = (psHash*)table->data.list; 942 941 PS_PTR_CHECK_NULL_GENERAL(htAtts, return); 943 942 fileName = (char*)input->filename; … … 957 956 if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psString")) { 958 957 mdType = PS_META_STR; 959 elemType = PS_TYPE_PTR;958 pType = PS_TYPE_PTR; 960 959 } else if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psBool")) { 961 mdType = PS_META_ BOOL;962 elemType = PS_TYPE_U8;960 mdType = PS_META_PRIMITIVE; 961 pType = PS_TYPE_U8; 963 962 } else if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psS32")) { 964 mdType = PS_META_ S32;965 elemType = PS_TYPE_S32;963 mdType = PS_META_PRIMITIVE; 964 pType = PS_TYPE_S32; 966 965 } else if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psF32")) { 967 mdType = PS_META_ F32;968 elemType = PS_TYPE_F32;966 mdType = PS_META_PRIMITIVE; 967 pType = PS_TYPE_F32; 969 968 } else if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psF64")) { 970 mdType = PS_META_ F64;971 elemType = PS_TYPE_F64;969 mdType = PS_META_PRIMITIVE; 970 pType = PS_TYPE_F64; 972 971 } else { 973 972 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_TYPE_INVALID_LINE_FILE, strName, lineNumber, … … 994 993 metadataItem = psMetadataLookup(md, strName); 995 994 if(metadataItem != NULL) { 996 if(metadataItem->type != PS_META_ ITEM_SET) {995 if(metadataItem->type != PS_META_LIST) { 997 996 if(overwrite) { 998 997 psMetadataRemove(md, PS_LIST_UNKNOWN, strName); … … 1007 1006 1008 1007 // Get value 1009 vec = parseVector((char*)strValue, elemType, &status);1008 vec = parseVector((char*)strValue, pType, &status); 1010 1009 if(!status) { 1011 psMetadataAdd(md, PS_LIST_TAIL, strName+1, mdType, NULL, vec);1010 psMetadataAdd(md, PS_LIST_TAIL, strName+1, pType, mdType, NULL, vec); 1012 1011 } else { 1013 1012 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, strType, … … 1038 1037 tables = psMetadataLookup(md, "htAtts"); 1039 1038 PS_PTR_CHECK_NULL_GENERAL(tables, return); 1040 PS_PTR_CHECK_NULL_GENERAL(tables-> items, return);1041 psListSetIterator(tables-> items, PS_LIST_TAIL);1042 table = (psMetadataItem*)psListGetCurrent(tables-> items);1043 htAtts = (psHash*)table->data. V;1039 PS_PTR_CHECK_NULL_GENERAL(tables->data.list, return); 1040 psListSetIterator(tables->data.list, PS_LIST_TAIL); 1041 table = (psMetadataItem*)psListGetCurrent(tables->data.list); 1042 htAtts = (psHash*)table->data.list; 1044 1043 PS_PTR_CHECK_NULL_GENERAL(htAtts, return); 1045 1044 … … 1064 1063 1065 1064 // Free temporary metadata item and its hash table 1066 psListRemove(tables-> items, PS_LIST_TAIL, table);1065 psListRemove(tables->data.list, PS_LIST_TAIL, table); 1067 1066 1068 1067 psFree(psEndTagName); … … 1071 1070 } 1072 1071 1073 ps S32 psMetadataParseConfigXml(psMetadata** md, const char *fileName)1072 psMetadata* psMetadataParseConfigXml(psMetadata* md, psU32 *nFail, const char *fileName, psBool overwrite) 1074 1073 { 1075 1074 xmlSAXHandler saxHandler; … … 1077 1076 1078 1077 // Error checks 1079 PS_PTR_CHECK_NULL(fileName, -1);1078 PS_PTR_CHECK_NULL(fileName, NULL); 1080 1079 1081 1080 // Allocate metadata if necessary 1082 if ( *md == NULL) {1083 *md = psMetadataAlloc();1081 if (md == NULL) { 1082 md = psMetadataAlloc(); 1084 1083 } 1085 1084 … … 1113 1112 saxHandler.externalSubset = NULL; 1114 1113 saxHandler.initialized = 1; 1115 saxHandler._private = *md;1114 saxHandler._private = md; 1116 1115 saxHandler.startElementNs = NULL; 1117 1116 saxHandler.endElementNs = NULL; … … 1121 1120 if (xmlSAXUserParseFile(&saxHandler, NULL, fileName)) { 1122 1121 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FILE_OPEN_FAILED, fileName); 1123 return -1;1122 return NULL; 1124 1123 } 1125 1124 -
trunk/psLib/src/collections/psMetadataIO.h
r2529 r2607 9 9 * @author Ross Harman, MHPCC 10 10 * 11 * @version $Revision: 1. 5$ $Name: not supported by cvs2svn $12 * @date $Date: 2004-1 1-30 01:24:32$11 * @version $Revision: 1.6 $ $Name: not supported by cvs2svn $ 12 * @date $Date: 2004-12-03 23:14:46 $ 13 13 * 14 14 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 58 58 * Loads pre-defined settings by parsing a configuration file into a psMetadata structure. 59 59 * 60 * @return ps S32 : Number of lines that failed to beread.60 * @return psMetadata* : Resulting metadata from read. 61 61 */ 62 psS32 psMetadataParseConfig( 63 psMetadata** md, ///< Resulting metadata from read. 62 psMetadata* psMetadataParseConfig( 63 psMetadata* md, ///< Resulting metadata from read. 64 psU32 *nFail, ///< Number of failed lines. 64 65 const char *fileName, ///< Name of file to read. 65 66 psBool overwrite ///< Allow overwrite of duplicate specifications. … … 70 71 * Loads pre-defined XML settings by parsing a configuration file into a psMetadata structure. 71 72 * 72 * @return ps S32 : Number of lines that failed to beread.73 * @return psMetadata* : Resulting metadata from read. 73 74 */ 74 psS32 psMetadataParseConfigXml( 75 psMetadata** md, ///< Resulting metadata from read. 76 const char *fileName ///< Name of file to read. 75 76 psMetadata* psMetadataParseConfigXml( 77 psMetadata* md, ///< Resulting metadata from read. 78 psU32 *nFail, ///< Number of failed lines. 79 const char *fileName, ///< Name of file to read. 80 psBool overwrite ///< Allow overwrite of duplicate specifications. 77 81 ); 78 82 -
trunk/psLib/src/dataManip/psFunctions.c
r2439 r2607 7 7 * polynomials. It also contains a Gaussian functions. 8 8 * 9 * @version $Revision: 1.7 0$ $Name: not supported by cvs2svn $10 * @date $Date: 2004-1 1-24 22:33:21$9 * @version $Revision: 1.71 $ $Name: not supported by cvs2svn $ 10 * @date $Date: 2004-12-03 23:15:32 $ 11 11 * 12 12 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 2017 2017 PS_ERRORTEXT_psFunctions_TYPE_NOT_SUPPORTED, 2018 2018 strType); 2019 case PS_TYPE_BOOL: 2020 PS_TYPE_NAME(strType,x->type.type); 2021 psError(PS_ERR_BAD_PARAMETER_TYPE, 2022 PS_ERRORTEXT_psFunctions_TYPE_NOT_SUPPORTED, 2023 strType); 2019 2024 } 2020 2025 return(-3); -
trunk/psLib/src/math/psPolynomial.c
r2439 r2607 7 7 * polynomials. It also contains a Gaussian functions. 8 8 * 9 * @version $Revision: 1.7 0$ $Name: not supported by cvs2svn $10 * @date $Date: 2004-1 1-24 22:33:21$9 * @version $Revision: 1.71 $ $Name: not supported by cvs2svn $ 10 * @date $Date: 2004-12-03 23:15:32 $ 11 11 * 12 12 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 2017 2017 PS_ERRORTEXT_psFunctions_TYPE_NOT_SUPPORTED, 2018 2018 strType); 2019 case PS_TYPE_BOOL: 2020 PS_TYPE_NAME(strType,x->type.type); 2021 psError(PS_ERR_BAD_PARAMETER_TYPE, 2022 PS_ERRORTEXT_psFunctions_TYPE_NOT_SUPPORTED, 2023 strType); 2019 2024 } 2020 2025 return(-3); -
trunk/psLib/src/math/psSpline.c
r2439 r2607 7 7 * polynomials. It also contains a Gaussian functions. 8 8 * 9 * @version $Revision: 1.7 0$ $Name: not supported by cvs2svn $10 * @date $Date: 2004-1 1-24 22:33:21$9 * @version $Revision: 1.71 $ $Name: not supported by cvs2svn $ 10 * @date $Date: 2004-12-03 23:15:32 $ 11 11 * 12 12 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 2017 2017 PS_ERRORTEXT_psFunctions_TYPE_NOT_SUPPORTED, 2018 2018 strType); 2019 case PS_TYPE_BOOL: 2020 PS_TYPE_NAME(strType,x->type.type); 2021 psError(PS_ERR_BAD_PARAMETER_TYPE, 2022 PS_ERRORTEXT_psFunctions_TYPE_NOT_SUPPORTED, 2023 strType); 2019 2024 } 2020 2025 return(-3); -
trunk/psLib/src/sys/psType.h
r2204 r2607 11 11 * @author Ross Harman, MHPCC 12 12 * 13 * @version $Revision: 1.2 3$ $Name: not supported by cvs2svn $14 * @date $Date: 2004-1 0-27 00:57:31$13 * @version $Revision: 1.24 $ $Name: not supported by cvs2svn $ 14 * @date $Date: 2004-12-03 23:16:05 $ 15 15 * 16 16 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 57 57 58 58 typedef enum { 59 PS_TYPE_S8 = 0x0101, ///< Character. 60 PS_TYPE_S16 = 0x0102, ///< Short integer. 61 PS_TYPE_S32 = 0x0104, ///< Integer. 62 PS_TYPE_S64 = 0x0108, ///< Long integer. 63 PS_TYPE_U8 = 0x0301, ///< Unsigned character. 64 PS_TYPE_U16 = 0x0302, ///< Unsigned psS16 integer. 65 PS_TYPE_U32 = 0x0304, ///< Unsigned integer. 66 PS_TYPE_U64 = 0x0308, ///< Unsigned psS64 integer. 67 PS_TYPE_F32 = 0x0404, ///< Single-precision Floating point. 68 PS_TYPE_F64 = 0x0408, ///< Double-precision floating point. 69 PS_TYPE_C32 = 0x0808, ///< Complex numbers consisting of single-precision floating point. 70 PS_TYPE_C64 = 0x0810, ///< Complex numbers consisting of double-precision floating point. 71 PS_TYPE_PTR = 0x0000 ///< Something else that's not supported for arithmetic. 59 PS_TYPE_BOOL = 0x0100, ///< Boolean. 60 PS_TYPE_S8 = 0x0101, ///< Character. 61 PS_TYPE_S16 = 0x0102, ///< Short integer. 62 PS_TYPE_S32 = 0x0104, ///< Integer. 63 PS_TYPE_S64 = 0x0108, ///< Long integer. 64 PS_TYPE_U8 = 0x0301, ///< Unsigned character. 65 PS_TYPE_U16 = 0x0302, ///< Unsigned psS16 integer. 66 PS_TYPE_U32 = 0x0304, ///< Unsigned integer. 67 PS_TYPE_U64 = 0x0308, ///< Unsigned psS64 integer. 68 PS_TYPE_F32 = 0x0404, ///< Single-precision Floating point. 69 PS_TYPE_F64 = 0x0408, ///< Double-precision floating point. 70 PS_TYPE_C32 = 0x0808, ///< Complex numbers consisting of single-precision floating point. 71 PS_TYPE_C64 = 0x0810, ///< Complex numbers consisting of double-precision floating point. 72 PS_TYPE_PTR = 0x0000 ///< Something else that's not supported for arithmetic. 72 73 } psElemType; 73 74 -
trunk/psLib/src/sysUtils/psType.h
r2204 r2607 11 11 * @author Ross Harman, MHPCC 12 12 * 13 * @version $Revision: 1.2 3$ $Name: not supported by cvs2svn $14 * @date $Date: 2004-1 0-27 00:57:31$13 * @version $Revision: 1.24 $ $Name: not supported by cvs2svn $ 14 * @date $Date: 2004-12-03 23:16:05 $ 15 15 * 16 16 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 57 57 58 58 typedef enum { 59 PS_TYPE_S8 = 0x0101, ///< Character. 60 PS_TYPE_S16 = 0x0102, ///< Short integer. 61 PS_TYPE_S32 = 0x0104, ///< Integer. 62 PS_TYPE_S64 = 0x0108, ///< Long integer. 63 PS_TYPE_U8 = 0x0301, ///< Unsigned character. 64 PS_TYPE_U16 = 0x0302, ///< Unsigned psS16 integer. 65 PS_TYPE_U32 = 0x0304, ///< Unsigned integer. 66 PS_TYPE_U64 = 0x0308, ///< Unsigned psS64 integer. 67 PS_TYPE_F32 = 0x0404, ///< Single-precision Floating point. 68 PS_TYPE_F64 = 0x0408, ///< Double-precision floating point. 69 PS_TYPE_C32 = 0x0808, ///< Complex numbers consisting of single-precision floating point. 70 PS_TYPE_C64 = 0x0810, ///< Complex numbers consisting of double-precision floating point. 71 PS_TYPE_PTR = 0x0000 ///< Something else that's not supported for arithmetic. 59 PS_TYPE_BOOL = 0x0100, ///< Boolean. 60 PS_TYPE_S8 = 0x0101, ///< Character. 61 PS_TYPE_S16 = 0x0102, ///< Short integer. 62 PS_TYPE_S32 = 0x0104, ///< Integer. 63 PS_TYPE_S64 = 0x0108, ///< Long integer. 64 PS_TYPE_U8 = 0x0301, ///< Unsigned character. 65 PS_TYPE_U16 = 0x0302, ///< Unsigned psS16 integer. 66 PS_TYPE_U32 = 0x0304, ///< Unsigned integer. 67 PS_TYPE_U64 = 0x0308, ///< Unsigned psS64 integer. 68 PS_TYPE_F32 = 0x0404, ///< Single-precision Floating point. 69 PS_TYPE_F64 = 0x0408, ///< Double-precision floating point. 70 PS_TYPE_C32 = 0x0808, ///< Complex numbers consisting of single-precision floating point. 71 PS_TYPE_C64 = 0x0810, ///< Complex numbers consisting of double-precision floating point. 72 PS_TYPE_PTR = 0x0000 ///< Something else that's not supported for arithmetic. 72 73 } psElemType; 73 74 -
trunk/psLib/src/types/psMetadata.c
r2521 r2607 12 12 * @author Ross Harman, MHPCC 13 13 * 14 * @version $Revision: 1.3 8$ $Name: not supported by cvs2svn $15 * @date $Date: 2004-1 1-30 00:26:53$14 * @version $Revision: 1.39 $ $Name: not supported by cvs2svn $ 15 * @date $Date: 2004-12-03 23:14:28 $ 16 16 * 17 17 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 80 80 psFree(metadataItem->name); 81 81 psFree(metadataItem->comment); 82 psFree(metadataItem->items); 83 if (type == PS_META_STR || type == PS_META_VEC || type == PS_META_IMG || type == PS_META_LOOKUPTABLE || 84 type == PS_META_JPEG || type == PS_META_PNG || type == PS_META_ASTROM || type == PS_META_UNKNOWN || 85 type == PS_META_HASH) { 82 if (type != PS_META_PRIMITIVE) { 86 83 psFree(metadataItem->data.V); 87 84 } … … 101 98 /*****************************************************************************/ 102 99 103 psMetadataItem* psMetadataItemAlloc(const char *name, psMetadataType type, const char *comment, ...) 100 psMetadataItem* psMetadataItemAlloc(const char *name, psElemType pType, psMetadataType type, 101 const char *comment, ...) 104 102 { 105 103 va_list argPtr; … … 110 108 111 109 // Call metadata item allocation 112 metadataItem = psMetadataItemAllocV(name, type, comment, argPtr);110 metadataItem = psMetadataItemAllocV(name, pType, type, comment, argPtr); 113 111 114 112 // Clean up stack after variable arguement has been used … … 118 116 } 119 117 120 psMetadataItem* psMetadataItemAllocV(const char *name, psMetadataType type, const char *comment, 121 va_list argPtr) 122 { 123 psVector *vecIn = NULL; 124 psVector *vecOut = NULL; 118 psMetadataItem* psMetadataItemAllocV(const char *name, psElemType pType, psMetadataType type, 119 const char *comment, va_list argPtr) 120 { 125 121 psMetadataItem* metadataItem = NULL; 126 122 … … 129 125 130 126 // Allocate metadata item 131 metadataItem = (psMetadataItem* ) psAlloc(sizeof(psMetadataItem)); 127 metadataItem = (psMetadataItem*) psAlloc(sizeof(psMetadataItem)); 128 metadataItem->data.V = NULL; 132 129 133 130 // Set deallocator … … 148 145 // Set metadata item type 149 146 metadataItem->type = type; 150 metadataItem->data.V = NULL; 151 152 // Allocate metadata items with same name. 153 metadataItem->items = psListAlloc(NULL); 147 metadataItem->pType = pType; 154 148 155 149 // Allocate and set metadata item name … … 158 152 159 153 // Set metadata item value 160 switch (type) { 161 case PS_META_ITEM_SET: 162 break; 163 case PS_META_BOOL: 164 metadataItem->data.B = (psBool)va_arg(argPtr, psS32); 165 break; 166 case PS_META_S32: 167 metadataItem->data.S32 = (psS32)va_arg(argPtr, psS32); 168 break; 169 case PS_META_F32: 170 metadataItem->data.F32 = (psF32)va_arg(argPtr, psF64); 171 break; 172 case PS_META_F64: 173 metadataItem->data.F64 = va_arg(argPtr, psF64); 154 switch(type) { 155 case PS_META_PRIMITIVE: 156 switch(pType) { 157 case PS_TYPE_BOOL: 158 metadataItem->data.B = (psBool)va_arg(argPtr, psS32); 159 break; 160 case PS_TYPE_S32: 161 metadataItem->data.S32 = (psS32)va_arg(argPtr, psS32); 162 break; 163 case PS_TYPE_F32: 164 metadataItem->data.F32 = (psF32)va_arg(argPtr, psF64); 165 break; 166 case PS_TYPE_F64: 167 metadataItem->data.F64 = (psF64)va_arg(argPtr, psF64); 168 break; 169 default: 170 psError(PS_ERR_BAD_PARAMETER_VALUE, true, PS_ERRORTEXT_psMetadata_METATYPE_INVALID, type); 171 psFree(metadataItem); 172 metadataItem = NULL; 173 } 174 174 break; 175 175 case PS_META_STR: 176 // Perform copy of input strings 176 177 metadataItem->data.V = psStringNCopy(va_arg(argPtr, char *), MAX_STRING_LENGTH); 177 178 break; 179 case PS_META_LIST: 178 180 case PS_META_VEC: 179 vecIn = (psVector*)va_arg(argPtr, psVector*); 180 vecOut = psVectorAlloc(vecIn->nalloc, vecIn->type.type); 181 memcpy(vecOut->data.V, vecIn->data.V, vecIn->nalloc*PSELEMTYPE_SIZEOF(vecIn->type.type)); 182 metadataItem->data.V = vecOut; 183 break; 181 case PS_META_HASH: 184 182 case PS_META_LOOKUPTABLE: 185 metadataItem->data.V = va_arg(argPtr, psLookupTable*); // Deep copy of input data not performed186 break;187 case PS_META_HASH:188 metadataItem->data.V = va_arg(argPtr, psHash*); // Deep copy of input data not performed189 break;190 case PS_META_IMG:191 183 case PS_META_JPEG: 192 184 case PS_META_PNG: 193 185 case PS_META_ASTROM: 194 186 case PS_META_UNKNOWN: 187 // Copy of input data not performed due to variability of data types 188 metadataItem->data.V = va_arg(argPtr, psPtr); 189 break; 195 190 default: 196 191 psError(PS_ERR_BAD_PARAMETER_VALUE, true, PS_ERRORTEXT_psMetadata_METATYPE_INVALID, type); … … 209 204 210 205 // Allocate metadata 211 metadata = (psMetadata* ) psAlloc(sizeof(psMetadata));206 metadata = (psMetadata*) psAlloc(sizeof(psMetadata)); 212 207 // Set deallocator 213 208 p_psMemSetDeallocator(metadata, (psFreeFcn) metadataFree); 214 209 215 210 // Allocate metadata's internal containers 216 list = (psList* ) psListAlloc(NULL);217 table = (psHash* ) psHashAlloc(10);211 list = (psList*) psListAlloc(NULL); 212 table = (psHash*) psHashAlloc(10); 218 213 219 214 metadata->list = list; … … 223 218 } 224 219 225 psBool psMetadataAddItem( psMetadata *restrict md, psMetadataItem *restrict metadataItem, psS32 location)220 psBool psMetadataAddItem(psMetadata *restrict md, psMetadataItem *restrict metadataItem, psS32 location) 226 221 { 227 222 char * key = NULL; … … 230 225 psMetadataItem *existingEntry = NULL; 231 226 psMetadataItem *newFolderEntry = NULL; 232 psMetadataType newType = PS_META_ITEM_SET;227 psMetadataType newType; 233 228 234 229 PS_PTR_CHECK_NULL(md,NULL); … … 247 242 if(existingEntry != NULL) { 248 243 249 if(existingEntry->type == PS_META_ITEM_SET) { 244 if(existingEntry->type == PS_META_LIST) { 245 246 if(existingEntry->data.list == NULL) { 247 existingEntry->data.list = psListAlloc(NULL); 248 } 250 249 251 250 // Add leaf node to existing folder node 252 if(!psListAdd(existingEntry->items, PS_LIST_TAIL, metadataItem)) { 253 psError(PS_ERR_UNKNOWN,false, 254 PS_ERRORTEXT_psMetadata_ADD_LIST_FAILED, 255 metadataItem->name ); 256 return false; 257 } 258 } else if(existingEntry->type != PS_META_ITEM_SET && newType!= PS_META_ITEM_SET) { 251 if(!psListAdd(existingEntry->data.list, PS_LIST_TAIL, metadataItem)) { 252 psError(PS_ERR_UNKNOWN, false, PS_ERRORTEXT_psMetadata_ADD_LIST_FAILED, metadataItem->name); 253 return false; 254 } 255 } else if(existingEntry->type != PS_META_LIST && newType!= PS_META_LIST) { 259 256 260 257 // Leaf node replaces another leaf. Make new folder node and add leaves. 261 newFolderEntry = psMetadataItemAlloc(key, PS_META_ITEM_SET, NULL, NULL); 262 263 if(!psListAdd(newFolderEntry->items, PS_LIST_TAIL, existingEntry)) { 264 psError(PS_ERR_UNKNOWN,false, 265 PS_ERRORTEXT_psMetadata_ADD_LIST_FAILED, 266 key); 258 newFolderEntry = psMetadataItemAlloc(key, PS_TYPE_PTR, PS_META_LIST, NULL, NULL); 259 newFolderEntry->data.list = psListAlloc(NULL); 260 261 if(!psListAdd(newFolderEntry->data.list, PS_LIST_TAIL, existingEntry)) { 262 psError(PS_ERR_UNKNOWN,false, PS_ERRORTEXT_psMetadata_ADD_LIST_FAILED,key); 267 263 psFree(newFolderEntry); 268 264 return false; 269 265 } 270 266 271 if(!psListAdd(newFolderEntry->items, PS_LIST_TAIL, metadataItem)) { 272 psError(PS_ERR_UNKNOWN,false, 273 PS_ERRORTEXT_psMetadata_ADD_LIST_FAILED, 274 key); 267 if(!psListAdd(newFolderEntry->data.list, PS_LIST_TAIL, metadataItem)) { 268 psError(PS_ERR_UNKNOWN,false, PS_ERRORTEXT_psMetadata_ADD_LIST_FAILED,key); 275 269 psFree(newFolderEntry); 276 270 return false; … … 278 272 279 273 if(!psHashRemove(mdTable, key)) { 280 psError(PS_ERR_UNKNOWN,false, 281 PS_ERRORTEXT_psMetadata_REMOVE_TABLE_FAILED, 282 key); 274 psError(PS_ERR_UNKNOWN,false,PS_ERRORTEXT_psMetadata_REMOVE_TABLE_FAILED,key); 283 275 psFree(newFolderEntry); 284 276 return false; … … 286 278 287 279 if(!psHashAdd(mdTable, key, newFolderEntry)) { 288 psError(PS_ERR_UNKNOWN,false, 289 PS_ERRORTEXT_psMetadata_ADD_TABLE_FAILED, 290 key); 280 psError(PS_ERR_UNKNOWN,false,PS_ERRORTEXT_psMetadata_ADD_TABLE_FAILED,key); 291 281 psFree(newFolderEntry); 292 282 return false; … … 298 288 299 289 // Folder node replaces leaf or folder node - Put old node into new folder and remove from table 300 if(!psListAdd(metadataItem->items, PS_LIST_TAIL, existingEntry)) { 301 psError(PS_ERR_UNKNOWN,false, 302 PS_ERRORTEXT_psMetadata_ADD_LIST_FAILED, 303 key); 290 if(metadataItem->data.list == NULL) { 291 metadataItem->data.list = psListAlloc(NULL); 292 } 293 294 if(!psListAdd(metadataItem->data.list, PS_LIST_TAIL, existingEntry)) { 295 psError(PS_ERR_UNKNOWN,false,PS_ERRORTEXT_psMetadata_ADD_LIST_FAILED,key); 304 296 return false; 305 297 } 306 298 307 299 if(!psHashRemove(mdTable, key)) { 308 psError(PS_ERR_UNKNOWN,false, 309 PS_ERRORTEXT_psMetadata_REMOVE_TABLE_FAILED, 310 key); 300 psError(PS_ERR_UNKNOWN,false,PS_ERRORTEXT_psMetadata_REMOVE_TABLE_FAILED,key); 311 301 return false; 312 302 } 313 303 314 304 if(!psHashAdd(mdTable, key, metadataItem)) { 315 psError(PS_ERR_UNKNOWN,false, 316 PS_ERRORTEXT_psMetadata_ADD_TABLE_FAILED, 317 key); 305 psError(PS_ERR_UNKNOWN,false,PS_ERRORTEXT_psMetadata_ADD_TABLE_FAILED,key); 318 306 return false; 319 307 } … … 323 311 // Node doesn't exist - Add new metadata item to metadata collection's hash 324 312 if(!psHashAdd(mdTable, key, metadataItem)) { 325 psError(PS_ERR_UNKNOWN,false, 326 PS_ERRORTEXT_psMetadata_ADD_TABLE_FAILED, 327 key); 313 psError(PS_ERR_UNKNOWN,false,PS_ERRORTEXT_psMetadata_ADD_TABLE_FAILED,key); 328 314 return false; 329 315 } … … 331 317 332 318 // Add items to metadata collection's list, even if they have the same metadata item names. Folder nodes 333 // (PS_META_ ITEM_SET metadata items) are not added, since the metadata list is flat.334 if(metadataItem->type != PS_META_ ITEM_SET) {319 // (PS_META_LIST metadata items) are not added, since the metadata list is flat. 320 if(metadataItem->type != PS_META_LIST) { 335 321 if(!psListAdd(mdList, location, metadataItem)) { 336 psError(PS_ERR_UNKNOWN,false, 337 PS_ERRORTEXT_psMetadata_ADD_COLLECTION_FAILED, 338 key); 322 psError(PS_ERR_UNKNOWN,false,PS_ERRORTEXT_psMetadata_ADD_COLLECTION_FAILED,key); 339 323 return false; 340 324 } … … 344 328 } 345 329 346 psBool psMetadataAdd(psMetadata* restrict md, psS32 where, const char *name, ps MetadataType type,347 const char *comment, ...)330 psBool psMetadataAdd(psMetadata* restrict md, psS32 where, const char *name, psElemType pType, 331 psMetadataType type, const char *comment, ...) 348 332 { 349 333 va_list argPtr; … … 351 335 352 336 va_start(argPtr, comment); 353 metadataItem = psMetadataItemAllocV(name, type, comment, argPtr);337 metadataItem = psMetadataItemAllocV(name, pType, type, comment, argPtr); 354 338 va_end(argPtr); 355 339 356 340 if (!psMetadataAddItem(md, metadataItem, where)) { 357 psError(PS_ERR_UNKNOWN,false, 358 PS_ERRORTEXT_psMetadata_ADD_FAILED); 341 psError(PS_ERR_UNKNOWN,false,PS_ERRORTEXT_psMetadata_ADD_FAILED); 359 342 psFree(metadataItem); 360 343 return false; … … 368 351 psBool psMetadataRemove(psMetadata* restrict md, psS32 where, const char *restrict key) 369 352 { 370 psS32 numChildren = 0;371 353 psList* mdList = NULL; 354 psList* entryList = NULL; 372 355 psHash* mdTable = NULL; 373 356 psMetadataItem* entry = NULL; … … 386 369 387 370 // Remove by key name 388 entry = (psMetadataItem* )psHashLookup(mdTable, key);371 entry = (psMetadataItem*)psHashLookup(mdTable, key); 389 372 if (entry == NULL) { 390 psError(PS_ERR_BAD_PARAMETER_VALUE, true, 391 PS_ERRORTEXT_psMetadata_FIND_FAILED, 392 key); 373 psError(PS_ERR_BAD_PARAMETER_VALUE, true, PS_ERRORTEXT_psMetadata_FIND_FAILED, key); 393 374 return false; 394 375 } 395 376 396 numChildren = entry->items->size; 397 if (entry->type == PS_META_ITEM_SET && numChildren > 0) { 377 if (entry->type == PS_META_LIST) { 398 378 399 379 // Table entry has children. Entry and children must be removed from metadata collection's list 400 psListSetIterator(entry ->items, PS_LIST_HEAD);401 entryChild = psListGetCurrent(entry ->items);402 while (entryChild != NULL) {380 psListSetIterator(entryList, PS_LIST_HEAD); 381 entryChild = psListGetCurrent(entryList); 382 while(entryChild != NULL) { 403 383 if (!psListRemove(mdList, PS_LIST_UNKNOWN, entryChild)) { 404 psError(PS_ERR_UNKNOWN,false, 405 PS_ERRORTEXT_psMetadata_REMOVE_LIST_FAILED, 406 key); 384 psError(PS_ERR_UNKNOWN, false, PS_ERRORTEXT_psMetadata_REMOVE_LIST_FAILED, key); 407 385 return false; 408 386 } 409 entryChild = psListGetNext(entry ->items);387 entryChild = psListGetNext(entryList); 410 388 } 411 389 } else { … … 413 391 // Table entry has no children. Remove entry from metadata collection's list 414 392 if (!psListRemove(mdList, PS_LIST_UNKNOWN, entry)) { 415 psError(PS_ERR_UNKNOWN,false, 416 PS_ERRORTEXT_psMetadata_REMOVE_LIST_FAILED, 417 key); 393 psError(PS_ERR_UNKNOWN, false, PS_ERRORTEXT_psMetadata_REMOVE_LIST_FAILED, key); 418 394 return false; 419 395 } … … 421 397 // Remove entry from metadata collection's table 422 398 if (!psHashRemove(mdTable, key)) { 423 psError(PS_ERR_UNKNOWN,false, 424 PS_ERRORTEXT_psMetadata_REMOVE_TABLE_FAILED, 425 key); 399 psError(PS_ERR_UNKNOWN, false, PS_ERRORTEXT_psMetadata_REMOVE_TABLE_FAILED, key); 426 400 return false; 427 401 } … … 431 405 entry = psListGet(mdList, where); 432 406 if (entry == NULL) { 433 psError(PS_ERR_BAD_PARAMETER_VALUE, true, 434 PS_ERRORTEXT_psMetadata_FIND_INDEX_FAILED, 435 where); 407 psError(PS_ERR_BAD_PARAMETER_VALUE, true, PS_ERRORTEXT_psMetadata_FIND_INDEX_FAILED, where); 436 408 return false; 437 409 } 438 410 439 411 key = entry->name; 440 if (key == NULL) { 441 psError(PS_ERR_BAD_PARAMETER_VALUE, true, 442 PS_ERRORTEXT_psMetadata_REMOVE_LIST_INDEX_FAILED, 443 where); 412 if(key == NULL) { 413 psError(PS_ERR_BAD_PARAMETER_VALUE, true, PS_ERRORTEXT_psMetadata_REMOVE_LIST_INDEX_FAILED, where); 444 414 return false; 445 415 } … … 463 433 mdTable = md->table; 464 434 465 entry = (psMetadataItem* )psHashLookup(mdTable, key);435 entry = (psMetadataItem*)psHashLookup(mdTable, key); 466 436 if (entry == NULL) { 467 437 return NULL; … … 478 448 PS_PTR_CHECK_NULL(md->list,NULL); 479 449 480 entry = (psMetadataItem* ) psListGet(md->list, where);450 entry = (psMetadataItem*) psListGet(md->list, where); 481 451 if (entry == NULL) { 482 psError(PS_ERR_BAD_PARAMETER_VALUE, true, 483 PS_ERRORTEXT_psMetadata_FIND_INDEX_FAILED, 484 where); 452 psError(PS_ERR_BAD_PARAMETER_VALUE, true, PS_ERRORTEXT_psMetadata_FIND_INDEX_FAILED, where); 485 453 return NULL; 486 454 } -
trunk/psLib/src/types/psMetadata.h
r2521 r2607 11 11 * @author Ross Harman, MHPCC 12 12 * 13 * @version $Revision: 1.2 6$ $Name: not supported by cvs2svn $14 * @date $Date: 2004-1 1-30 00:27:14 $13 * @version $Revision: 1.27 $ $Name: not supported by cvs2svn $ 14 * @date $Date: 2004-12-03 23:14:34 $ 15 15 * 16 16 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 33 33 */ 34 34 typedef enum { 35 PS_META_ITEM_SET = 0, ///< Null. Metadata is in psMetadataItem.items 36 PS_META_BOOL, ///< Boolean data. 37 PS_META_S32, ///< Signed 32-bit integer data. 38 PS_META_F32, ///< Single-precision float data. 39 PS_META_F64, ///< Double-precision float data. 40 PS_META_STR, ///< String data (Stored in as psPtr ). 41 PS_META_VEC, ///< Vector data (Stored in as psPtr ). 42 PS_META_HASH, ///< Hash data (Stored in as psPtr ). 43 PS_META_IMG, ///< Image data (Stored in as psPtr ). 44 PS_META_LOOKUPTABLE, ///< Lookup table data (Stored as void *). 45 PS_META_JPEG, ///< JPEG data (Stored in as psPtr ). 46 PS_META_PNG, ///< PNG data (Stored in as psPtr ). 47 PS_META_ASTROM, ///< Astrometric coefficients (Stored in as psPtr ). 48 PS_META_UNKNOWN, ///< Other data (Stored in as psPtr ). 35 PS_META_PRIMITIVE, ///< Primitive data. 36 PS_META_LIST, ///< List data (Stored as item.data.list). 37 PS_META_STR, ///< String data (Stored as item.data.V). 38 PS_META_VEC, ///< Vector data (Stored as item.data.V). 39 PS_META_IMG, ///< Image data (Stored as item.data.V). 40 PS_META_HASH, ///< Hash data (Stored as item.data.V). 41 PS_META_LOOKUPTABLE, ///< Lookup table data (Stored as item.data.V). 42 PS_META_JPEG, ///< JPEG data (Stored as item.data.V). 43 PS_META_PNG, ///< PNG data (Stored as item.data.V). 44 PS_META_ASTROM, ///< Astrometric coefficients (Stored as item.data.V). 45 PS_META_UNKNOWN, ///< Other data (Stored as item.data.V). 49 46 PS_META_NTYPE ///< Number of types. Must be last. 50 47 } psMetadataType; 51 52 /** Metadata item data structure.53 *54 * Struct for maintaining metadata items of varying types. It also contains55 * information about the item name, flags, comments, and other items with the same name.56 */57 typedef struct psMetadataItem58 {59 const psS32 id; ///< Unique ID for metadata item.60 char *restrict name; ///< Name of metadata item.61 psMetadataType type; ///< Type of metadata item.62 union {63 psBool B; ///< boolean data64 psS32 S32; ///< Signed 32-bit integer data.65 psF32 F32; ///< Single-precision float data.66 psF64 F64; ///< Double-precision float data.67 psPtr V; ///< Pointer to other type of data.68 } data; ///< Union for data types.69 char *comment; ///< Optional comment ("", not NULL).70 psList* restrict items; ///< List of psMetadataItems with same name.71 }72 psMetadataItem;73 48 74 49 /** Metadata data structure. … … 85 60 } 86 61 psMetadata; 62 63 /** Metadata item data structure. 64 * 65 * Struct for maintaining metadata items of varying types. It also contains 66 * information about the item name, flags, comments, and other items with the same name. 67 */ 68 typedef struct psMetadataItem 69 { 70 const psS32 id; ///< Unique ID for metadata item. 71 char *name; ///< Name of metadata item. 72 psMetadataType type; ///< Type of metadata item. 73 psElemType pType; ///< Primitive data type 74 union { 75 psBool B; ///< boolean data 76 psS32 S32; ///< Signed 32-bit integer data. 77 psF32 F32; ///< Single-precision float data. 78 psF64 F64; ///< Double-precision float data. 79 psList *list; ///< List data. 80 psMetadata *md; ///< Metadata data. 81 psPtr V; ///< Pointer to other type of data. 82 } data; ///< Union for data types. 83 char *comment; ///< Optional comment ("", not NULL). 84 } 85 psMetadataItem; 87 86 88 87 /** Create a metadata item. … … 103 102 psMetadataItem* psMetadataItemAlloc( 104 103 const char *name, ///< Name of metadata item. 104 psElemType pType, ///< Primitive type. 105 105 psMetadataType type, ///< Type of metadata item. 106 106 const char *comment, ///< Comment for metadata item. … … 125 125 psMetadataItem* psMetadataItemAllocV( 126 126 const char *name, ///< Name of metadata item. 127 psElemType pType, ///< Primitive type. 127 128 psMetadataType type, ///< Type of metadata item. 128 129 const char *comment, ///< Comment for metadata item. … … 149 150 psMetadata* restrict md, ///< Metadata collection to insert metadat item. 150 151 psMetadataItem* restrict item, ///< Metadata item to be added. 151 psS32 location ///< Location to be added.152 psS32 location ///< Location to be added. 152 153 ); 153 154 … … 160 161 psBool psMetadataAdd( 161 162 psMetadata* restrict md, ///< Metadata collection to insert metadat item. 162 psS32 where, ///< Location to be added.163 psS32 where, ///< Location to be added. 163 164 const char *name, ///< Name of metadata item. 165 psElemType pType, ///< Primitive type. 164 166 psMetadataType type, ///< Type of metadata item. 165 167 const char *comment, ///< Comment for metadata item. … … 179 181 psBool psMetadataRemove( 180 182 psMetadata* restrict md, ///< Metadata collection to insert metadat item. 181 psS32 where, ///< Location to be removed.183 psS32 where, ///< Location to be removed. 182 184 const char *restrict key ///< Name of metadata key. 183 185 ); … … 205 207 psMetadataItem* psMetadataGet( 206 208 psMetadata* restrict md, ///< Metadata collection to insert metadat item. 207 psS32 where ///< Location to be retrieved.209 psS32 where ///< Location to be retrieved. 208 210 ); 209 211 … … 217 219 psBool psMetadataSetIterator( 218 220 psMetadata* restrict md, ///< Metadata collection to iterate. 219 psS32 where ///< Location of iterator.221 psS32 where ///< Location of iterator. 220 222 ); 221 223 … … 229 231 psMetadata* restrict md, ///< Metadata collection to iterate. 230 232 const char *restrict match, ///< Beginning of key name. 231 psS32 which ///< Iterator to be used.233 psS32 which ///< Iterator to be used. 232 234 ); 233 235 … … 241 243 psMetadata* restrict md, ///< Metadata collection to iterate. 242 244 const char *restrict match, ///< Beginning of key name. 243 psS32 which ///< Iterator to be used.245 psS32 which ///< Iterator to be used. 244 246 ); 245 247 -
trunk/psLib/src/types/psMetadataConfig.c
r2525 r2607 9 9 * @author Ross Harman, MHPCC 10 10 * 11 * @version $Revision: 1.1 2$ $Name: not supported by cvs2svn $12 * @date $Date: 2004-1 1-30 01:09:14$11 * @version $Revision: 1.13 $ $Name: not supported by cvs2svn $ 12 * @date $Date: 2004-12-03 23:14:40 $ 13 13 * 14 14 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 60 60 /** Free and null temporary variables used by config file parser */ 61 61 #define CLEAR_TEMPS() \ 62 if(strName) { \ 63 psFree(strName); \ 64 strName = NULL; \ 65 } \ 66 if(strType) { \ 67 psFree(strType); \ 68 strType = NULL; \ 69 } \ 70 if(strValue) { \ 71 psFree(strValue); \ 72 strValue = NULL; \ 73 } \ 74 if(strComment) { \ 75 psFree(strComment); \ 76 strComment = NULL; \ 77 } \ 78 if(tempVec) { \ 79 psFree(tempVec); \ 80 tempVec = NULL; \ 62 if(strName) { \ 63 psFree(strName); \ 64 strName = NULL; \ 65 } \ 66 if(strType) { \ 67 psFree(strType); \ 68 strType = NULL; \ 69 } \ 70 if(strValue) { \ 71 psFree(strValue); \ 72 strValue = NULL; \ 73 } \ 74 if(strComment) { \ 75 psFree(strComment); \ 76 strComment = NULL; \ 81 77 } 82 78 … … 316 312 { 317 313 psMetadataType type; 314 psElemType pType; 318 315 319 316 PS_PTR_CHECK_NULL(fd,); … … 322 319 323 320 type = metadataItem->type; 321 pType = metadataItem->pType; 324 322 325 323 switch(type) { 326 case PS_META_BOOL: 327 fprintf(fd, format, metadataItem->data.B); 328 break; 329 case PS_META_S32: 330 fprintf(fd,format, metadataItem->data.S32); 331 break; 332 case PS_META_F32: 333 fprintf(fd, format, metadataItem->data.F32); 334 break; 335 case PS_META_F64: 336 fprintf(fd, format, metadataItem->data.F64); 324 case PS_META_PRIMITIVE: 325 switch(pType) { 326 case PS_TYPE_BOOL: 327 fprintf(fd, format, metadataItem->data.B); 328 break; 329 case PS_TYPE_S32: 330 fprintf(fd,format, metadataItem->data.S32); 331 break; 332 case PS_TYPE_F32: 333 fprintf(fd, format, metadataItem->data.F32); 334 break; 335 case PS_TYPE_F64: 336 fprintf(fd, format, metadataItem->data.F64); 337 break; 338 default: 339 psError(PS_ERR_BAD_PARAMETER_TYPE,true, PS_ERRORTEXT_psMetadata_METATYPE_INVALID, (int)pType); 340 } 337 341 break; 338 342 case PS_META_STR: 339 fprintf(fd, format, metadataItem->data.V);343 fprintf(fd,format, metadataItem->data.V); 340 344 break; 341 345 default: … … 359 363 psS32 numKeys = 0; 360 364 psS32 keyNum = 0; 361 psMetadataType metadataItemType;362 365 fitsfile *fd = NULL; 363 366 … … 416 419 switch (keyType) { 417 420 case 'I': 418 metadataItemType = PS_META_S32;419 success = psMetadataAdd(output, PS_LIST_TAIL, keyName, metadataItemType,keyComment, atoi(keyValue));421 success = psMetadataAdd(output, PS_LIST_TAIL, keyName, PS_TYPE_S32, PS_META_PRIMITIVE, 422 keyComment, atoi(keyValue)); 420 423 break; 421 424 case 'F': 422 metadataItemType = PS_META_F64;423 success = psMetadataAdd(output, PS_LIST_TAIL, keyName, metadataItemType,keyComment, atof(keyValue));425 success = psMetadataAdd(output, PS_LIST_TAIL, keyName, PS_TYPE_F64, PS_META_PRIMITIVE, 426 keyComment, atof(keyValue)); 424 427 break; 425 428 case 'C': 426 metadataItemType = PS_META_STR;427 success = psMetadataAdd(output, PS_LIST_TAIL, keyName, metadataItemType, keyComment,keyValue);429 success = psMetadataAdd(output, PS_LIST_TAIL, keyName, PS_TYPE_PTR, PS_META_STR, keyComment, 430 keyValue); 428 431 break; 429 432 case 'L': 430 metadataItemType = PS_META_BOOL;431 433 tempBool = (keyValue[0] == 'T') ? 1 : 0; 432 success = psMetadataAdd(output, PS_LIST_TAIL, keyName, metadataItemType, keyComment, tempBool); 434 success = psMetadataAdd(output, PS_LIST_TAIL, keyName, PS_TYPE_BOOL, PS_META_PRIMITIVE, keyComment, 435 tempBool); 433 436 break; 434 437 case 'U': 435 438 case 'X': 436 439 default: 437 psError(PS_ERR_IO, true, 438 PS_ERRORTEXT_psMetadataIO_FITS_METATYPE_INVALID, 439 keyType); 440 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FITS_METATYPE_INVALID, keyType); 440 441 return output; 441 442 } 442 443 443 444 if (!success) { 444 psError(PS_ERR_UNKNOWN, false, 445 PS_ERRORTEXT_psMetadataIO_ADD_FAILED, 446 keyName); 445 psError(PS_ERR_UNKNOWN, false, PS_ERRORTEXT_psMetadataIO_ADD_FAILED, keyName); 447 446 return output; 448 447 } … … 452 451 } 453 452 454 455 psS32 psMetadataParseConfig(psMetadata** md, const char *fileName, psBool overwrite) 453 psMetadata* psMetadataParseConfig(psMetadata* md, psU32 *nFail, const char *fileName, psBool overwrite) 456 454 { 457 455 psBool tempBool; … … 463 461 char *linePtr = NULL; 464 462 psS32 status = 0; 465 psS32 lineCount = 0; 466 psS32 failedLines = 0; 463 psU32 lineCount = 0; 467 464 psF64 tempDbl = 0.0; 468 465 psS32 tempInt = 0.0; … … 470 467 psVector *tempVec = NULL; 471 468 FILE *fp = NULL; 472 psElemType elemType;469 psElemType pType; 473 470 psMetadataType mdType; 474 471 475 472 476 473 // Check for nulls 477 PS_PTR_CHECK_NULL(fileName, -1);474 PS_PTR_CHECK_NULL(fileName,NULL); 478 475 if((fp=fopen(fileName, "r")) == NULL) { 479 psError(PS_ERR_IO, true, 480 PS_ERRORTEXT_psMetadataIO_FILE_OPEN_FAILED, 481 fileName); 482 return -1; 476 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FILE_OPEN_FAILED, fileName); 477 return NULL; 483 478 } 484 479 485 480 // Allocate metadata if necessary 486 if ( *md == NULL) {487 *md = psMetadataAlloc();481 if (md == NULL) { 482 md = psMetadataAlloc(); 488 483 } 489 484 … … 504 499 // Check for more than one '*' or '@' in a line 505 500 if(repeatedChars(linePtr, '@') > 1) { 506 failedLines++;501 (*nFail)++; 507 502 psError(PS_ERR_IO, true, 508 PS_ERRORTEXT_psMetadataIO_FILE_MULTIPLE_CHAR, 509 '@', lineCount, fileName); 503 PS_ERRORTEXT_psMetadataIO_FILE_MULTIPLE_CHAR, '@', lineCount, fileName); 510 504 continue; 511 505 } else if(repeatedChars(linePtr, '*') > 1) { 512 failedLines++;506 (*nFail)++; 513 507 psError(PS_ERR_IO, true, 514 PS_ERRORTEXT_psMetadataIO_FILE_MULTIPLE_CHAR, 515 '*', lineCount, fileName); 508 PS_ERRORTEXT_psMetadataIO_FILE_MULTIPLE_CHAR, '*', lineCount, fileName); 516 509 continue; 517 510 } else if(repeatedChars(linePtr, '~') > 0) { 518 failedLines++;511 (*nFail)++; 519 512 psError(PS_ERR_IO, true, 520 PS_ERRORTEXT_psMetadataIO_FILE_MULTIPLE_CHAR, 521 '~', lineCount, fileName); 513 PS_ERRORTEXT_psMetadataIO_FILE_MULTIPLE_CHAR, '~', lineCount, fileName); 522 514 continue; 523 515 } … … 526 518 strName = getToken(&linePtr, " ", &status); 527 519 if(strName==NULL || status) { 528 failedLines++;520 (*nFail)++; 529 521 status = 0; 530 522 psError(PS_ERR_IO, true, 531 PS_ERRORTEXT_psMetadataIO_FILE_ELEMENT_NULL, 532 "name",lineCount, fileName); 523 PS_ERRORTEXT_psMetadataIO_FILE_ELEMENT_NULL, "name", lineCount, fileName); 533 524 continue; 534 525 } … … 537 528 strType = getToken(&linePtr, " ", &status); 538 529 if(strType==NULL) { 539 failedLines++;530 (*nFail)++; 540 531 status = 0; 541 psError(PS_ERR_IO, true, 542 PS_ERRORTEXT_psMetadataIO_FILE_ELEMENT_NULL, 543 "type",lineCount, fileName); 532 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FILE_ELEMENT_NULL, "type",lineCount, 533 fileName); 544 534 continue; 545 535 } else if(!strncmp(strType, "*", 1)) { 546 mdType = PS_META_ITEM_SET; 536 mdType = PS_META_LIST; 537 pType = PS_TYPE_PTR; 547 538 } else if(!strncmp(strType, "STR", 3)) { 548 539 mdType = PS_META_STR; 549 elemType = PS_TYPE_PTR;540 pType = PS_TYPE_PTR; 550 541 } else if(!strncmp(strType, "BOOL", 3)) { 551 mdType = PS_META_ BOOL;552 elemType = PS_TYPE_U8;542 mdType = PS_META_PRIMITIVE; 543 pType = PS_TYPE_BOOL; 553 544 } else if(!strncmp(strType, "S32", 3)) { 554 mdType = PS_META_ S32;555 elemType = PS_TYPE_S32;545 mdType = PS_META_PRIMITIVE; 546 pType = PS_TYPE_S32; 556 547 } else if(!strncmp(strType, "F32", 3)) { 557 mdType = PS_META_ F32;558 elemType = PS_TYPE_F32;548 mdType = PS_META_PRIMITIVE; 549 pType = PS_TYPE_F32; 559 550 } else if(!strncmp(strType, "F64", 3)) { 560 mdType = PS_META_ F64;561 elemType = PS_TYPE_F64;551 mdType = PS_META_PRIMITIVE; 552 pType = PS_TYPE_F64; 562 553 } else { 563 failedLines++; 564 psError(PS_ERR_IO, true, 565 PS_ERRORTEXT_psMetadataIO_FILE_TYPE_INVALID, 566 strType, lineCount, fileName); 554 (*nFail)++; 555 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FILE_TYPE_INVALID, strType, lineCount, 556 fileName); 567 557 continue; 568 558 } … … 573 563 574 564 // Get the metadata item value if there is one. Lines with * don't have values. 575 if(mdType != PS_META_ ITEM_SET) {565 if(mdType != PS_META_LIST) { 576 566 strValue = getToken(&linePtr, "#", &status); 577 567 if(strValue==NULL) { 578 failedLines++;568 (*nFail)++; 579 569 status = 0; 580 psError(PS_ERR_IO, true, 581 PS_ERRORTEXT_psMetadataIO_FILE_ELEMENT_NULL, 582 "value",lineCount, fileName); 570 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FILE_ELEMENT_NULL, "value", lineCount, 571 fileName); 583 572 continue; 584 573 } … … 588 577 strComment = getToken(&linePtr,"~", &status); 589 578 if(status) { 590 failedLines++;579 (*nFail)++; 591 580 status = 0; 592 psError(PS_ERR_IO, true, 593 PS_ERRORTEXT_psMetadataIO_FILE_ELEMENT_NULL, 594 "comment",lineCount, fileName); 581 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FILE_ELEMENT_NULL, "comment", lineCount, 582 fileName); 595 583 continue; 596 584 } … … 599 587 and allow switch/case below to add new item. If overwrite is false, then report error. If found 600 588 item is folder node, then psMetadataAdd will automatically add a new child. */ 601 metadataItem = psMetadataLookup( *md, strName);589 metadataItem = psMetadataLookup(md, strName); 602 590 if(metadataItem != NULL) { 603 if(metadataItem->type!=PS_META_ ITEM_SET) {591 if(metadataItem->type!=PS_META_LIST) { 604 592 if(overwrite) { 605 psMetadataRemove( *md, PS_LIST_UNKNOWN, strName);593 psMetadataRemove(md, PS_LIST_UNKNOWN, strName); 606 594 } else { 607 failedLines++; 608 psError(PS_ERR_IO, true, 609 PS_ERRORTEXT_psMetadataIO_OVERWRITE_ITEM, 610 strName, lineCount, fileName); 595 (*nFail)++; 596 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_OVERWRITE_ITEM, strName, lineCount, 597 fileName); 611 598 continue; 612 599 } … … 616 603 // Create and add metadata item to metadata and parse values 617 604 switch (mdType) { 618 case PS_META_ ITEM_SET:619 psMetadataAdd( *md, PS_LIST_TAIL, strName, mdType, NULL, NULL);605 case PS_META_LIST: 606 psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, NULL, NULL); 620 607 break; 621 case PS_META_BOOL: 622 tempBool = parseBool(strValue, &status); 608 case PS_META_STR: 609 psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, strComment, strValue); 610 break; 611 case PS_META_VEC: 612 tempVec = parseVector(strValue, pType, &status); 623 613 if(!status) { 624 psMetadataAdd( *md, PS_LIST_TAIL, strName, mdType, strComment, tempBool);614 psMetadataAdd(md, PS_LIST_TAIL, strName+1, pType, mdType, strComment, tempVec); 625 615 } else { 626 616 status = 0; 627 failedLines++; 628 psError(PS_ERR_IO, true, 629 PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, 630 strValue, strName, strType, lineCount, fileName); 617 (*nFail)++; 618 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, 619 strType, lineCount, fileName); 631 620 continue; 632 621 } 633 622 break; 634 case PS_META_S32: 635 tempInt = (psS32)parseValue(strValue, &status); 636 if(!status) { 637 psMetadataAdd(*md, PS_LIST_TAIL, strName, mdType, strComment, tempInt); 638 } else { 639 status = 0; 640 failedLines++; 641 psError(PS_ERR_IO, true, 642 PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, 643 strValue, strName, strType, lineCount, fileName); 623 case PS_META_PRIMITIVE: 624 switch (pType) { 625 case PS_TYPE_BOOL: 626 tempBool = parseBool(strValue, &status); 627 if(!status) { 628 psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, strComment, tempBool); 629 } else { 630 status = 0; 631 (*nFail)++; 632 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, 633 strType, lineCount, fileName); 634 continue; 635 } 636 break; 637 case PS_TYPE_S32: 638 tempInt = (psS32)parseValue(strValue, &status); 639 if(!status) { 640 psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, strComment, tempInt); 641 } else { 642 status = 0; 643 (*nFail)++; 644 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, 645 strType, lineCount, fileName); 646 continue; 647 } 648 break; 649 case PS_TYPE_F32: 650 case PS_TYPE_F64: 651 tempDbl = parseValue(strValue, &status); 652 if(!status) { 653 psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, strComment, tempDbl); 654 } else { 655 status = 0; 656 (*nFail)++; 657 psError(PS_ERR_IO, true, 658 PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, strType, lineCount, 659 fileName); 660 continue; 661 } 662 break; 663 default: 664 (*nFail)++; 665 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FILE_TYPE_INVALID, mdType, lineCount, 666 fileName); 644 667 continue; 645 } 646 break; 647 case PS_META_F32: 648 case PS_META_F64: 649 tempDbl = parseValue(strValue, &status); 650 if(!status) { 651 psMetadataAdd(*md, PS_LIST_TAIL, strName, mdType, strComment, tempDbl); 652 } else { 653 status = 0; 654 failedLines++; 655 psError(PS_ERR_IO, true, 656 PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, 657 strValue, strName, strType, lineCount, fileName); 658 continue; 659 } 660 break; 661 case PS_META_STR: 662 psMetadataAdd(*md, PS_LIST_TAIL, strName, mdType, strComment, strValue); 663 break; 664 case PS_META_VEC: 665 tempVec = parseVector(strValue, elemType, &status); 666 if(!status) { 667 psMetadataAdd(*md, PS_LIST_TAIL, strName+1, mdType, strComment, tempVec); 668 } else { 669 status = 0; 670 failedLines++; 671 psError(PS_ERR_IO, true, 672 PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, 673 strValue, strName, strType, lineCount, fileName); 674 continue; 675 } 668 } // switch 676 669 break; 677 670 default: 678 failedLines++; 679 psError(PS_ERR_IO, true, 680 PS_ERRORTEXT_psMetadataIO_FILE_TYPE_INVALID, 681 mdType, lineCount, fileName); 671 (*nFail)++; 672 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FILE_TYPE_INVALID, mdType, lineCount, 673 fileName); 682 674 continue; 683 675 } // switch … … 687 679 psFree(line); 688 680 689 return failedLines;681 return md; 690 682 } 691 683 … … 753 745 754 746 // Add attributes to metadata 755 psMetadataAdd(md, PS_LIST_TAIL, "htAtts", PS_ META_HASH, NULL, htAtts);747 psMetadataAdd(md, PS_LIST_TAIL, "htAtts", PS_TYPE_PTR, PS_META_HASH, NULL, htAtts); 756 748 757 749 psFree(psTagName); … … 765 757 psBool tempBool = false; 766 758 psS32 status = 0; 767 psU 64lineNumber = 0;759 psU32 lineNumber = 0; 768 760 psF64 tempDbl = 0.0; 769 761 psS32 tempInt = 0.0; 770 psElemType elemType;762 psElemType pType; 771 763 psMetadataType mdType; 772 764 char *fileName = NULL; … … 790 782 metadataItem = psMetadataLookup(md, "htAtts"); 791 783 PS_PTR_CHECK_NULL_GENERAL(metadataItem, return); 792 PS_PTR_CHECK_NULL_GENERAL(metadataItem-> items, return);793 psListSetIterator(metadataItem-> items, PS_LIST_TAIL);794 metadataItem = (psMetadataItem*)psListGetCurrent(metadataItem-> items);795 htAtts = (psHash*)metadataItem->data. V;784 PS_PTR_CHECK_NULL_GENERAL(metadataItem->data.list, return); 785 psListSetIterator(metadataItem->data.list, PS_LIST_TAIL); 786 metadataItem = (psMetadataItem*)psListGetCurrent(metadataItem->data.list); 787 htAtts = (psHash*)metadataItem->data.list; 796 788 PS_PTR_CHECK_NULL_GENERAL(htAtts, return); 797 789 fileName = (char*)input->filename; … … 811 803 if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psString")) { 812 804 mdType = PS_META_STR; 813 elemType = PS_TYPE_PTR;805 pType = PS_TYPE_PTR; 814 806 } else if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psBool")) { 815 mdType = PS_META_ BOOL;816 elemType = PS_TYPE_U8;807 mdType = PS_META_PRIMITIVE; 808 pType = PS_TYPE_U8; 817 809 } else if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psS32")) { 818 mdType = PS_META_ S32;819 elemType = PS_TYPE_S32;810 mdType = PS_META_PRIMITIVE; 811 pType = PS_TYPE_S32; 820 812 } else if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psF32")) { 821 mdType = PS_META_ F32;822 elemType = PS_TYPE_F32;813 mdType = PS_META_PRIMITIVE; 814 pType = PS_TYPE_F32; 823 815 } else if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psF64")) { 824 mdType = PS_META_ F64;825 elemType = PS_TYPE_F64;816 mdType = PS_META_PRIMITIVE; 817 pType = PS_TYPE_F64; 826 818 } else { 827 819 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_TYPE_INVALID_LINE_FILE, strType, lineNumber, … … 847 839 metadataItem = psMetadataLookup(md, strName); 848 840 if(metadataItem != NULL) { 849 if(metadataItem->type != PS_META_ ITEM_SET) {841 if(metadataItem->type != PS_META_LIST) { 850 842 if(overwrite) { 851 843 psMetadataRemove(md, PS_LIST_UNKNOWN, strName); … … 861 853 // Create metadata item and add to metadata 862 854 switch(mdType) { 863 case PS_META_ITEM_SET: 864 psMetadataAdd(md, PS_LIST_TAIL, strName, mdType, NULL, NULL); 865 break; 866 case PS_META_BOOL: 867 tempBool = parseBool((char*)strValue, &status); 868 if(!status) { 869 psMetadataAdd(md, PS_LIST_TAIL, strName, mdType, NULL, tempBool); 870 } else { 871 status = 0; 872 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, strType, 873 lineNumber, fileName); 874 } 875 break; 876 case PS_META_S32: 877 tempInt = (psS32)parseValue((char*)strValue, &status); 878 if(!status) { 879 psMetadataAdd(md, PS_LIST_TAIL, strName, mdType, NULL, tempInt); 880 } else { 881 status = 0; 882 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, strType, 883 lineNumber, fileName); 884 } 885 break; 886 case PS_META_F32: 887 case PS_META_F64: 888 tempDbl = parseValue((char*)strValue, &status); 889 if(!status) { 890 psMetadataAdd(md, PS_LIST_TAIL, strName, mdType, NULL, tempDbl); 891 } else { 892 status = 0; 893 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, strType, 894 lineNumber, fileName); 895 } 855 case PS_META_LIST: 856 psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, NULL, NULL); 896 857 break; 897 858 case PS_META_STR: 898 psMetadataAdd(md, PS_LIST_TAIL, strName, mdType, NULL, strValue); 859 psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, NULL, strValue); 860 break; 861 case PS_META_PRIMITIVE: 862 switch(pType) { 863 case PS_TYPE_BOOL: 864 tempBool = parseBool((char*)strValue, &status); 865 if(!status) { 866 psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, NULL, tempBool); 867 } else { 868 status = 0; 869 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, strType, 870 lineNumber, fileName); 871 } 872 break; 873 case PS_TYPE_S32: 874 tempInt = (psS32)parseValue((char*)strValue, &status); 875 if(!status) { 876 psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, NULL, tempInt); 877 } else { 878 status = 0; 879 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, strType, 880 lineNumber, fileName); 881 } 882 break; 883 case PS_TYPE_F32: 884 case PS_TYPE_F64: 885 tempDbl = parseValue((char*)strValue, &status); 886 if(!status) { 887 psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, NULL, tempDbl); 888 } else { 889 status = 0; 890 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, strType, 891 lineNumber, fileName); 892 } 893 break; 894 default: 895 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FILE_TYPE_INVALID, strType, lineNumber, fileName); 896 } // End switch 899 897 break; 900 898 default: … … 902 900 } // End switch 903 901 902 904 903 return; 905 904 } … … 910 909 bool overwrite = false; 911 910 psS32 status = 0; 912 psU 64lineNumber = 0;913 psElemType elemType;911 psU32 lineNumber = 0; 912 psElemType pType; 914 913 psMetadataType mdType; 915 914 char *strName = NULL; … … 936 935 tables = psMetadataLookup(md, "htAtts"); 937 936 PS_PTR_CHECK_NULL_GENERAL(tables, return); 938 PS_PTR_CHECK_NULL_GENERAL(tables-> items, return);939 psListSetIterator(tables-> items, PS_LIST_TAIL);940 table = (psMetadataItem*)psListGetCurrent(tables-> items);941 htAtts = (psHash*)table->data. V;937 PS_PTR_CHECK_NULL_GENERAL(tables->data.list, return); 938 psListSetIterator(tables->data.list, PS_LIST_TAIL); 939 table = (psMetadataItem*)psListGetCurrent(tables->data.list); 940 htAtts = (psHash*)table->data.list; 942 941 PS_PTR_CHECK_NULL_GENERAL(htAtts, return); 943 942 fileName = (char*)input->filename; … … 957 956 if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psString")) { 958 957 mdType = PS_META_STR; 959 elemType = PS_TYPE_PTR;958 pType = PS_TYPE_PTR; 960 959 } else if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psBool")) { 961 mdType = PS_META_ BOOL;962 elemType = PS_TYPE_U8;960 mdType = PS_META_PRIMITIVE; 961 pType = PS_TYPE_U8; 963 962 } else if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psS32")) { 964 mdType = PS_META_ S32;965 elemType = PS_TYPE_S32;963 mdType = PS_META_PRIMITIVE; 964 pType = PS_TYPE_S32; 966 965 } else if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psF32")) { 967 mdType = PS_META_ F32;968 elemType = PS_TYPE_F32;966 mdType = PS_META_PRIMITIVE; 967 pType = PS_TYPE_F32; 969 968 } else if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psF64")) { 970 mdType = PS_META_ F64;971 elemType = PS_TYPE_F64;969 mdType = PS_META_PRIMITIVE; 970 pType = PS_TYPE_F64; 972 971 } else { 973 972 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_TYPE_INVALID_LINE_FILE, strName, lineNumber, … … 994 993 metadataItem = psMetadataLookup(md, strName); 995 994 if(metadataItem != NULL) { 996 if(metadataItem->type != PS_META_ ITEM_SET) {995 if(metadataItem->type != PS_META_LIST) { 997 996 if(overwrite) { 998 997 psMetadataRemove(md, PS_LIST_UNKNOWN, strName); … … 1007 1006 1008 1007 // Get value 1009 vec = parseVector((char*)strValue, elemType, &status);1008 vec = parseVector((char*)strValue, pType, &status); 1010 1009 if(!status) { 1011 psMetadataAdd(md, PS_LIST_TAIL, strName+1, mdType, NULL, vec);1010 psMetadataAdd(md, PS_LIST_TAIL, strName+1, pType, mdType, NULL, vec); 1012 1011 } else { 1013 1012 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, strType, … … 1038 1037 tables = psMetadataLookup(md, "htAtts"); 1039 1038 PS_PTR_CHECK_NULL_GENERAL(tables, return); 1040 PS_PTR_CHECK_NULL_GENERAL(tables-> items, return);1041 psListSetIterator(tables-> items, PS_LIST_TAIL);1042 table = (psMetadataItem*)psListGetCurrent(tables-> items);1043 htAtts = (psHash*)table->data. V;1039 PS_PTR_CHECK_NULL_GENERAL(tables->data.list, return); 1040 psListSetIterator(tables->data.list, PS_LIST_TAIL); 1041 table = (psMetadataItem*)psListGetCurrent(tables->data.list); 1042 htAtts = (psHash*)table->data.list; 1044 1043 PS_PTR_CHECK_NULL_GENERAL(htAtts, return); 1045 1044 … … 1064 1063 1065 1064 // Free temporary metadata item and its hash table 1066 psListRemove(tables-> items, PS_LIST_TAIL, table);1065 psListRemove(tables->data.list, PS_LIST_TAIL, table); 1067 1066 1068 1067 psFree(psEndTagName); … … 1071 1070 } 1072 1071 1073 ps S32 psMetadataParseConfigXml(psMetadata** md, const char *fileName)1072 psMetadata* psMetadataParseConfigXml(psMetadata* md, psU32 *nFail, const char *fileName, psBool overwrite) 1074 1073 { 1075 1074 xmlSAXHandler saxHandler; … … 1077 1076 1078 1077 // Error checks 1079 PS_PTR_CHECK_NULL(fileName, -1);1078 PS_PTR_CHECK_NULL(fileName, NULL); 1080 1079 1081 1080 // Allocate metadata if necessary 1082 if ( *md == NULL) {1083 *md = psMetadataAlloc();1081 if (md == NULL) { 1082 md = psMetadataAlloc(); 1084 1083 } 1085 1084 … … 1113 1112 saxHandler.externalSubset = NULL; 1114 1113 saxHandler.initialized = 1; 1115 saxHandler._private = *md;1114 saxHandler._private = md; 1116 1115 saxHandler.startElementNs = NULL; 1117 1116 saxHandler.endElementNs = NULL; … … 1121 1120 if (xmlSAXUserParseFile(&saxHandler, NULL, fileName)) { 1122 1121 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FILE_OPEN_FAILED, fileName); 1123 return -1;1122 return NULL; 1124 1123 } 1125 1124 -
trunk/psLib/src/types/psMetadataConfig.h
r2529 r2607 9 9 * @author Ross Harman, MHPCC 10 10 * 11 * @version $Revision: 1. 5$ $Name: not supported by cvs2svn $12 * @date $Date: 2004-1 1-30 01:24:32$11 * @version $Revision: 1.6 $ $Name: not supported by cvs2svn $ 12 * @date $Date: 2004-12-03 23:14:46 $ 13 13 * 14 14 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 58 58 * Loads pre-defined settings by parsing a configuration file into a psMetadata structure. 59 59 * 60 * @return ps S32 : Number of lines that failed to beread.60 * @return psMetadata* : Resulting metadata from read. 61 61 */ 62 psS32 psMetadataParseConfig( 63 psMetadata** md, ///< Resulting metadata from read. 62 psMetadata* psMetadataParseConfig( 63 psMetadata* md, ///< Resulting metadata from read. 64 psU32 *nFail, ///< Number of failed lines. 64 65 const char *fileName, ///< Name of file to read. 65 66 psBool overwrite ///< Allow overwrite of duplicate specifications. … … 70 71 * Loads pre-defined XML settings by parsing a configuration file into a psMetadata structure. 71 72 * 72 * @return ps S32 : Number of lines that failed to beread.73 * @return psMetadata* : Resulting metadata from read. 73 74 */ 74 psS32 psMetadataParseConfigXml( 75 psMetadata** md, ///< Resulting metadata from read. 76 const char *fileName ///< Name of file to read. 75 76 psMetadata* psMetadataParseConfigXml( 77 psMetadata* md, ///< Resulting metadata from read. 78 psU32 *nFail, ///< Number of failed lines. 79 const char *fileName, ///< Name of file to read. 80 psBool overwrite ///< Allow overwrite of duplicate specifications. 77 81 ); 78 82 -
trunk/psLib/src/xml/psXML.c
r2525 r2607 9 9 * @author Ross Harman, MHPCC 10 10 * 11 * @version $Revision: 1.1 2$ $Name: not supported by cvs2svn $12 * @date $Date: 2004-1 1-30 01:09:14$11 * @version $Revision: 1.13 $ $Name: not supported by cvs2svn $ 12 * @date $Date: 2004-12-03 23:14:40 $ 13 13 * 14 14 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 60 60 /** Free and null temporary variables used by config file parser */ 61 61 #define CLEAR_TEMPS() \ 62 if(strName) { \ 63 psFree(strName); \ 64 strName = NULL; \ 65 } \ 66 if(strType) { \ 67 psFree(strType); \ 68 strType = NULL; \ 69 } \ 70 if(strValue) { \ 71 psFree(strValue); \ 72 strValue = NULL; \ 73 } \ 74 if(strComment) { \ 75 psFree(strComment); \ 76 strComment = NULL; \ 77 } \ 78 if(tempVec) { \ 79 psFree(tempVec); \ 80 tempVec = NULL; \ 62 if(strName) { \ 63 psFree(strName); \ 64 strName = NULL; \ 65 } \ 66 if(strType) { \ 67 psFree(strType); \ 68 strType = NULL; \ 69 } \ 70 if(strValue) { \ 71 psFree(strValue); \ 72 strValue = NULL; \ 73 } \ 74 if(strComment) { \ 75 psFree(strComment); \ 76 strComment = NULL; \ 81 77 } 82 78 … … 316 312 { 317 313 psMetadataType type; 314 psElemType pType; 318 315 319 316 PS_PTR_CHECK_NULL(fd,); … … 322 319 323 320 type = metadataItem->type; 321 pType = metadataItem->pType; 324 322 325 323 switch(type) { 326 case PS_META_BOOL: 327 fprintf(fd, format, metadataItem->data.B); 328 break; 329 case PS_META_S32: 330 fprintf(fd,format, metadataItem->data.S32); 331 break; 332 case PS_META_F32: 333 fprintf(fd, format, metadataItem->data.F32); 334 break; 335 case PS_META_F64: 336 fprintf(fd, format, metadataItem->data.F64); 324 case PS_META_PRIMITIVE: 325 switch(pType) { 326 case PS_TYPE_BOOL: 327 fprintf(fd, format, metadataItem->data.B); 328 break; 329 case PS_TYPE_S32: 330 fprintf(fd,format, metadataItem->data.S32); 331 break; 332 case PS_TYPE_F32: 333 fprintf(fd, format, metadataItem->data.F32); 334 break; 335 case PS_TYPE_F64: 336 fprintf(fd, format, metadataItem->data.F64); 337 break; 338 default: 339 psError(PS_ERR_BAD_PARAMETER_TYPE,true, PS_ERRORTEXT_psMetadata_METATYPE_INVALID, (int)pType); 340 } 337 341 break; 338 342 case PS_META_STR: 339 fprintf(fd, format, metadataItem->data.V);343 fprintf(fd,format, metadataItem->data.V); 340 344 break; 341 345 default: … … 359 363 psS32 numKeys = 0; 360 364 psS32 keyNum = 0; 361 psMetadataType metadataItemType;362 365 fitsfile *fd = NULL; 363 366 … … 416 419 switch (keyType) { 417 420 case 'I': 418 metadataItemType = PS_META_S32;419 success = psMetadataAdd(output, PS_LIST_TAIL, keyName, metadataItemType,keyComment, atoi(keyValue));421 success = psMetadataAdd(output, PS_LIST_TAIL, keyName, PS_TYPE_S32, PS_META_PRIMITIVE, 422 keyComment, atoi(keyValue)); 420 423 break; 421 424 case 'F': 422 metadataItemType = PS_META_F64;423 success = psMetadataAdd(output, PS_LIST_TAIL, keyName, metadataItemType,keyComment, atof(keyValue));425 success = psMetadataAdd(output, PS_LIST_TAIL, keyName, PS_TYPE_F64, PS_META_PRIMITIVE, 426 keyComment, atof(keyValue)); 424 427 break; 425 428 case 'C': 426 metadataItemType = PS_META_STR;427 success = psMetadataAdd(output, PS_LIST_TAIL, keyName, metadataItemType, keyComment,keyValue);429 success = psMetadataAdd(output, PS_LIST_TAIL, keyName, PS_TYPE_PTR, PS_META_STR, keyComment, 430 keyValue); 428 431 break; 429 432 case 'L': 430 metadataItemType = PS_META_BOOL;431 433 tempBool = (keyValue[0] == 'T') ? 1 : 0; 432 success = psMetadataAdd(output, PS_LIST_TAIL, keyName, metadataItemType, keyComment, tempBool); 434 success = psMetadataAdd(output, PS_LIST_TAIL, keyName, PS_TYPE_BOOL, PS_META_PRIMITIVE, keyComment, 435 tempBool); 433 436 break; 434 437 case 'U': 435 438 case 'X': 436 439 default: 437 psError(PS_ERR_IO, true, 438 PS_ERRORTEXT_psMetadataIO_FITS_METATYPE_INVALID, 439 keyType); 440 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FITS_METATYPE_INVALID, keyType); 440 441 return output; 441 442 } 442 443 443 444 if (!success) { 444 psError(PS_ERR_UNKNOWN, false, 445 PS_ERRORTEXT_psMetadataIO_ADD_FAILED, 446 keyName); 445 psError(PS_ERR_UNKNOWN, false, PS_ERRORTEXT_psMetadataIO_ADD_FAILED, keyName); 447 446 return output; 448 447 } … … 452 451 } 453 452 454 455 psS32 psMetadataParseConfig(psMetadata** md, const char *fileName, psBool overwrite) 453 psMetadata* psMetadataParseConfig(psMetadata* md, psU32 *nFail, const char *fileName, psBool overwrite) 456 454 { 457 455 psBool tempBool; … … 463 461 char *linePtr = NULL; 464 462 psS32 status = 0; 465 psS32 lineCount = 0; 466 psS32 failedLines = 0; 463 psU32 lineCount = 0; 467 464 psF64 tempDbl = 0.0; 468 465 psS32 tempInt = 0.0; … … 470 467 psVector *tempVec = NULL; 471 468 FILE *fp = NULL; 472 psElemType elemType;469 psElemType pType; 473 470 psMetadataType mdType; 474 471 475 472 476 473 // Check for nulls 477 PS_PTR_CHECK_NULL(fileName, -1);474 PS_PTR_CHECK_NULL(fileName,NULL); 478 475 if((fp=fopen(fileName, "r")) == NULL) { 479 psError(PS_ERR_IO, true, 480 PS_ERRORTEXT_psMetadataIO_FILE_OPEN_FAILED, 481 fileName); 482 return -1; 476 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FILE_OPEN_FAILED, fileName); 477 return NULL; 483 478 } 484 479 485 480 // Allocate metadata if necessary 486 if ( *md == NULL) {487 *md = psMetadataAlloc();481 if (md == NULL) { 482 md = psMetadataAlloc(); 488 483 } 489 484 … … 504 499 // Check for more than one '*' or '@' in a line 505 500 if(repeatedChars(linePtr, '@') > 1) { 506 failedLines++;501 (*nFail)++; 507 502 psError(PS_ERR_IO, true, 508 PS_ERRORTEXT_psMetadataIO_FILE_MULTIPLE_CHAR, 509 '@', lineCount, fileName); 503 PS_ERRORTEXT_psMetadataIO_FILE_MULTIPLE_CHAR, '@', lineCount, fileName); 510 504 continue; 511 505 } else if(repeatedChars(linePtr, '*') > 1) { 512 failedLines++;506 (*nFail)++; 513 507 psError(PS_ERR_IO, true, 514 PS_ERRORTEXT_psMetadataIO_FILE_MULTIPLE_CHAR, 515 '*', lineCount, fileName); 508 PS_ERRORTEXT_psMetadataIO_FILE_MULTIPLE_CHAR, '*', lineCount, fileName); 516 509 continue; 517 510 } else if(repeatedChars(linePtr, '~') > 0) { 518 failedLines++;511 (*nFail)++; 519 512 psError(PS_ERR_IO, true, 520 PS_ERRORTEXT_psMetadataIO_FILE_MULTIPLE_CHAR, 521 '~', lineCount, fileName); 513 PS_ERRORTEXT_psMetadataIO_FILE_MULTIPLE_CHAR, '~', lineCount, fileName); 522 514 continue; 523 515 } … … 526 518 strName = getToken(&linePtr, " ", &status); 527 519 if(strName==NULL || status) { 528 failedLines++;520 (*nFail)++; 529 521 status = 0; 530 522 psError(PS_ERR_IO, true, 531 PS_ERRORTEXT_psMetadataIO_FILE_ELEMENT_NULL, 532 "name",lineCount, fileName); 523 PS_ERRORTEXT_psMetadataIO_FILE_ELEMENT_NULL, "name", lineCount, fileName); 533 524 continue; 534 525 } … … 537 528 strType = getToken(&linePtr, " ", &status); 538 529 if(strType==NULL) { 539 failedLines++;530 (*nFail)++; 540 531 status = 0; 541 psError(PS_ERR_IO, true, 542 PS_ERRORTEXT_psMetadataIO_FILE_ELEMENT_NULL, 543 "type",lineCount, fileName); 532 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FILE_ELEMENT_NULL, "type",lineCount, 533 fileName); 544 534 continue; 545 535 } else if(!strncmp(strType, "*", 1)) { 546 mdType = PS_META_ITEM_SET; 536 mdType = PS_META_LIST; 537 pType = PS_TYPE_PTR; 547 538 } else if(!strncmp(strType, "STR", 3)) { 548 539 mdType = PS_META_STR; 549 elemType = PS_TYPE_PTR;540 pType = PS_TYPE_PTR; 550 541 } else if(!strncmp(strType, "BOOL", 3)) { 551 mdType = PS_META_ BOOL;552 elemType = PS_TYPE_U8;542 mdType = PS_META_PRIMITIVE; 543 pType = PS_TYPE_BOOL; 553 544 } else if(!strncmp(strType, "S32", 3)) { 554 mdType = PS_META_ S32;555 elemType = PS_TYPE_S32;545 mdType = PS_META_PRIMITIVE; 546 pType = PS_TYPE_S32; 556 547 } else if(!strncmp(strType, "F32", 3)) { 557 mdType = PS_META_ F32;558 elemType = PS_TYPE_F32;548 mdType = PS_META_PRIMITIVE; 549 pType = PS_TYPE_F32; 559 550 } else if(!strncmp(strType, "F64", 3)) { 560 mdType = PS_META_ F64;561 elemType = PS_TYPE_F64;551 mdType = PS_META_PRIMITIVE; 552 pType = PS_TYPE_F64; 562 553 } else { 563 failedLines++; 564 psError(PS_ERR_IO, true, 565 PS_ERRORTEXT_psMetadataIO_FILE_TYPE_INVALID, 566 strType, lineCount, fileName); 554 (*nFail)++; 555 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FILE_TYPE_INVALID, strType, lineCount, 556 fileName); 567 557 continue; 568 558 } … … 573 563 574 564 // Get the metadata item value if there is one. Lines with * don't have values. 575 if(mdType != PS_META_ ITEM_SET) {565 if(mdType != PS_META_LIST) { 576 566 strValue = getToken(&linePtr, "#", &status); 577 567 if(strValue==NULL) { 578 failedLines++;568 (*nFail)++; 579 569 status = 0; 580 psError(PS_ERR_IO, true, 581 PS_ERRORTEXT_psMetadataIO_FILE_ELEMENT_NULL, 582 "value",lineCount, fileName); 570 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FILE_ELEMENT_NULL, "value", lineCount, 571 fileName); 583 572 continue; 584 573 } … … 588 577 strComment = getToken(&linePtr,"~", &status); 589 578 if(status) { 590 failedLines++;579 (*nFail)++; 591 580 status = 0; 592 psError(PS_ERR_IO, true, 593 PS_ERRORTEXT_psMetadataIO_FILE_ELEMENT_NULL, 594 "comment",lineCount, fileName); 581 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FILE_ELEMENT_NULL, "comment", lineCount, 582 fileName); 595 583 continue; 596 584 } … … 599 587 and allow switch/case below to add new item. If overwrite is false, then report error. If found 600 588 item is folder node, then psMetadataAdd will automatically add a new child. */ 601 metadataItem = psMetadataLookup( *md, strName);589 metadataItem = psMetadataLookup(md, strName); 602 590 if(metadataItem != NULL) { 603 if(metadataItem->type!=PS_META_ ITEM_SET) {591 if(metadataItem->type!=PS_META_LIST) { 604 592 if(overwrite) { 605 psMetadataRemove( *md, PS_LIST_UNKNOWN, strName);593 psMetadataRemove(md, PS_LIST_UNKNOWN, strName); 606 594 } else { 607 failedLines++; 608 psError(PS_ERR_IO, true, 609 PS_ERRORTEXT_psMetadataIO_OVERWRITE_ITEM, 610 strName, lineCount, fileName); 595 (*nFail)++; 596 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_OVERWRITE_ITEM, strName, lineCount, 597 fileName); 611 598 continue; 612 599 } … … 616 603 // Create and add metadata item to metadata and parse values 617 604 switch (mdType) { 618 case PS_META_ ITEM_SET:619 psMetadataAdd( *md, PS_LIST_TAIL, strName, mdType, NULL, NULL);605 case PS_META_LIST: 606 psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, NULL, NULL); 620 607 break; 621 case PS_META_BOOL: 622 tempBool = parseBool(strValue, &status); 608 case PS_META_STR: 609 psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, strComment, strValue); 610 break; 611 case PS_META_VEC: 612 tempVec = parseVector(strValue, pType, &status); 623 613 if(!status) { 624 psMetadataAdd( *md, PS_LIST_TAIL, strName, mdType, strComment, tempBool);614 psMetadataAdd(md, PS_LIST_TAIL, strName+1, pType, mdType, strComment, tempVec); 625 615 } else { 626 616 status = 0; 627 failedLines++; 628 psError(PS_ERR_IO, true, 629 PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, 630 strValue, strName, strType, lineCount, fileName); 617 (*nFail)++; 618 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, 619 strType, lineCount, fileName); 631 620 continue; 632 621 } 633 622 break; 634 case PS_META_S32: 635 tempInt = (psS32)parseValue(strValue, &status); 636 if(!status) { 637 psMetadataAdd(*md, PS_LIST_TAIL, strName, mdType, strComment, tempInt); 638 } else { 639 status = 0; 640 failedLines++; 641 psError(PS_ERR_IO, true, 642 PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, 643 strValue, strName, strType, lineCount, fileName); 623 case PS_META_PRIMITIVE: 624 switch (pType) { 625 case PS_TYPE_BOOL: 626 tempBool = parseBool(strValue, &status); 627 if(!status) { 628 psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, strComment, tempBool); 629 } else { 630 status = 0; 631 (*nFail)++; 632 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, 633 strType, lineCount, fileName); 634 continue; 635 } 636 break; 637 case PS_TYPE_S32: 638 tempInt = (psS32)parseValue(strValue, &status); 639 if(!status) { 640 psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, strComment, tempInt); 641 } else { 642 status = 0; 643 (*nFail)++; 644 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, 645 strType, lineCount, fileName); 646 continue; 647 } 648 break; 649 case PS_TYPE_F32: 650 case PS_TYPE_F64: 651 tempDbl = parseValue(strValue, &status); 652 if(!status) { 653 psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, strComment, tempDbl); 654 } else { 655 status = 0; 656 (*nFail)++; 657 psError(PS_ERR_IO, true, 658 PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, strType, lineCount, 659 fileName); 660 continue; 661 } 662 break; 663 default: 664 (*nFail)++; 665 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FILE_TYPE_INVALID, mdType, lineCount, 666 fileName); 644 667 continue; 645 } 646 break; 647 case PS_META_F32: 648 case PS_META_F64: 649 tempDbl = parseValue(strValue, &status); 650 if(!status) { 651 psMetadataAdd(*md, PS_LIST_TAIL, strName, mdType, strComment, tempDbl); 652 } else { 653 status = 0; 654 failedLines++; 655 psError(PS_ERR_IO, true, 656 PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, 657 strValue, strName, strType, lineCount, fileName); 658 continue; 659 } 660 break; 661 case PS_META_STR: 662 psMetadataAdd(*md, PS_LIST_TAIL, strName, mdType, strComment, strValue); 663 break; 664 case PS_META_VEC: 665 tempVec = parseVector(strValue, elemType, &status); 666 if(!status) { 667 psMetadataAdd(*md, PS_LIST_TAIL, strName+1, mdType, strComment, tempVec); 668 } else { 669 status = 0; 670 failedLines++; 671 psError(PS_ERR_IO, true, 672 PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, 673 strValue, strName, strType, lineCount, fileName); 674 continue; 675 } 668 } // switch 676 669 break; 677 670 default: 678 failedLines++; 679 psError(PS_ERR_IO, true, 680 PS_ERRORTEXT_psMetadataIO_FILE_TYPE_INVALID, 681 mdType, lineCount, fileName); 671 (*nFail)++; 672 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FILE_TYPE_INVALID, mdType, lineCount, 673 fileName); 682 674 continue; 683 675 } // switch … … 687 679 psFree(line); 688 680 689 return failedLines;681 return md; 690 682 } 691 683 … … 753 745 754 746 // Add attributes to metadata 755 psMetadataAdd(md, PS_LIST_TAIL, "htAtts", PS_ META_HASH, NULL, htAtts);747 psMetadataAdd(md, PS_LIST_TAIL, "htAtts", PS_TYPE_PTR, PS_META_HASH, NULL, htAtts); 756 748 757 749 psFree(psTagName); … … 765 757 psBool tempBool = false; 766 758 psS32 status = 0; 767 psU 64lineNumber = 0;759 psU32 lineNumber = 0; 768 760 psF64 tempDbl = 0.0; 769 761 psS32 tempInt = 0.0; 770 psElemType elemType;762 psElemType pType; 771 763 psMetadataType mdType; 772 764 char *fileName = NULL; … … 790 782 metadataItem = psMetadataLookup(md, "htAtts"); 791 783 PS_PTR_CHECK_NULL_GENERAL(metadataItem, return); 792 PS_PTR_CHECK_NULL_GENERAL(metadataItem-> items, return);793 psListSetIterator(metadataItem-> items, PS_LIST_TAIL);794 metadataItem = (psMetadataItem*)psListGetCurrent(metadataItem-> items);795 htAtts = (psHash*)metadataItem->data. V;784 PS_PTR_CHECK_NULL_GENERAL(metadataItem->data.list, return); 785 psListSetIterator(metadataItem->data.list, PS_LIST_TAIL); 786 metadataItem = (psMetadataItem*)psListGetCurrent(metadataItem->data.list); 787 htAtts = (psHash*)metadataItem->data.list; 796 788 PS_PTR_CHECK_NULL_GENERAL(htAtts, return); 797 789 fileName = (char*)input->filename; … … 811 803 if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psString")) { 812 804 mdType = PS_META_STR; 813 elemType = PS_TYPE_PTR;805 pType = PS_TYPE_PTR; 814 806 } else if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psBool")) { 815 mdType = PS_META_ BOOL;816 elemType = PS_TYPE_U8;807 mdType = PS_META_PRIMITIVE; 808 pType = PS_TYPE_U8; 817 809 } else if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psS32")) { 818 mdType = PS_META_ S32;819 elemType = PS_TYPE_S32;810 mdType = PS_META_PRIMITIVE; 811 pType = PS_TYPE_S32; 820 812 } else if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psF32")) { 821 mdType = PS_META_ F32;822 elemType = PS_TYPE_F32;813 mdType = PS_META_PRIMITIVE; 814 pType = PS_TYPE_F32; 823 815 } else if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psF64")) { 824 mdType = PS_META_ F64;825 elemType = PS_TYPE_F64;816 mdType = PS_META_PRIMITIVE; 817 pType = PS_TYPE_F64; 826 818 } else { 827 819 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_TYPE_INVALID_LINE_FILE, strType, lineNumber, … … 847 839 metadataItem = psMetadataLookup(md, strName); 848 840 if(metadataItem != NULL) { 849 if(metadataItem->type != PS_META_ ITEM_SET) {841 if(metadataItem->type != PS_META_LIST) { 850 842 if(overwrite) { 851 843 psMetadataRemove(md, PS_LIST_UNKNOWN, strName); … … 861 853 // Create metadata item and add to metadata 862 854 switch(mdType) { 863 case PS_META_ITEM_SET: 864 psMetadataAdd(md, PS_LIST_TAIL, strName, mdType, NULL, NULL); 865 break; 866 case PS_META_BOOL: 867 tempBool = parseBool((char*)strValue, &status); 868 if(!status) { 869 psMetadataAdd(md, PS_LIST_TAIL, strName, mdType, NULL, tempBool); 870 } else { 871 status = 0; 872 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, strType, 873 lineNumber, fileName); 874 } 875 break; 876 case PS_META_S32: 877 tempInt = (psS32)parseValue((char*)strValue, &status); 878 if(!status) { 879 psMetadataAdd(md, PS_LIST_TAIL, strName, mdType, NULL, tempInt); 880 } else { 881 status = 0; 882 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, strType, 883 lineNumber, fileName); 884 } 885 break; 886 case PS_META_F32: 887 case PS_META_F64: 888 tempDbl = parseValue((char*)strValue, &status); 889 if(!status) { 890 psMetadataAdd(md, PS_LIST_TAIL, strName, mdType, NULL, tempDbl); 891 } else { 892 status = 0; 893 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, strType, 894 lineNumber, fileName); 895 } 855 case PS_META_LIST: 856 psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, NULL, NULL); 896 857 break; 897 858 case PS_META_STR: 898 psMetadataAdd(md, PS_LIST_TAIL, strName, mdType, NULL, strValue); 859 psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, NULL, strValue); 860 break; 861 case PS_META_PRIMITIVE: 862 switch(pType) { 863 case PS_TYPE_BOOL: 864 tempBool = parseBool((char*)strValue, &status); 865 if(!status) { 866 psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, NULL, tempBool); 867 } else { 868 status = 0; 869 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, strType, 870 lineNumber, fileName); 871 } 872 break; 873 case PS_TYPE_S32: 874 tempInt = (psS32)parseValue((char*)strValue, &status); 875 if(!status) { 876 psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, NULL, tempInt); 877 } else { 878 status = 0; 879 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, strType, 880 lineNumber, fileName); 881 } 882 break; 883 case PS_TYPE_F32: 884 case PS_TYPE_F64: 885 tempDbl = parseValue((char*)strValue, &status); 886 if(!status) { 887 psMetadataAdd(md, PS_LIST_TAIL, strName, pType, mdType, NULL, tempDbl); 888 } else { 889 status = 0; 890 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, strType, 891 lineNumber, fileName); 892 } 893 break; 894 default: 895 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FILE_TYPE_INVALID, strType, lineNumber, fileName); 896 } // End switch 899 897 break; 900 898 default: … … 902 900 } // End switch 903 901 902 904 903 return; 905 904 } … … 910 909 bool overwrite = false; 911 910 psS32 status = 0; 912 psU 64lineNumber = 0;913 psElemType elemType;911 psU32 lineNumber = 0; 912 psElemType pType; 914 913 psMetadataType mdType; 915 914 char *strName = NULL; … … 936 935 tables = psMetadataLookup(md, "htAtts"); 937 936 PS_PTR_CHECK_NULL_GENERAL(tables, return); 938 PS_PTR_CHECK_NULL_GENERAL(tables-> items, return);939 psListSetIterator(tables-> items, PS_LIST_TAIL);940 table = (psMetadataItem*)psListGetCurrent(tables-> items);941 htAtts = (psHash*)table->data. V;937 PS_PTR_CHECK_NULL_GENERAL(tables->data.list, return); 938 psListSetIterator(tables->data.list, PS_LIST_TAIL); 939 table = (psMetadataItem*)psListGetCurrent(tables->data.list); 940 htAtts = (psHash*)table->data.list; 942 941 PS_PTR_CHECK_NULL_GENERAL(htAtts, return); 943 942 fileName = (char*)input->filename; … … 957 956 if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psString")) { 958 957 mdType = PS_META_STR; 959 elemType = PS_TYPE_PTR;958 pType = PS_TYPE_PTR; 960 959 } else if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psBool")) { 961 mdType = PS_META_ BOOL;962 elemType = PS_TYPE_U8;960 mdType = PS_META_PRIMITIVE; 961 pType = PS_TYPE_U8; 963 962 } else if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psS32")) { 964 mdType = PS_META_ S32;965 elemType = PS_TYPE_S32;963 mdType = PS_META_PRIMITIVE; 964 pType = PS_TYPE_S32; 966 965 } else if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psF32")) { 967 mdType = PS_META_ F32;968 elemType = PS_TYPE_F32;966 mdType = PS_META_PRIMITIVE; 967 pType = PS_TYPE_F32; 969 968 } else if(xmlStrEqual(BAD_CAST strType, BAD_CAST "psF64")) { 970 mdType = PS_META_ F64;971 elemType = PS_TYPE_F64;969 mdType = PS_META_PRIMITIVE; 970 pType = PS_TYPE_F64; 972 971 } else { 973 972 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_TYPE_INVALID_LINE_FILE, strName, lineNumber, … … 994 993 metadataItem = psMetadataLookup(md, strName); 995 994 if(metadataItem != NULL) { 996 if(metadataItem->type != PS_META_ ITEM_SET) {995 if(metadataItem->type != PS_META_LIST) { 997 996 if(overwrite) { 998 997 psMetadataRemove(md, PS_LIST_UNKNOWN, strName); … … 1007 1006 1008 1007 // Get value 1009 vec = parseVector((char*)strValue, elemType, &status);1008 vec = parseVector((char*)strValue, pType, &status); 1010 1009 if(!status) { 1011 psMetadataAdd(md, PS_LIST_TAIL, strName+1, mdType, NULL, vec);1010 psMetadataAdd(md, PS_LIST_TAIL, strName+1, pType, mdType, NULL, vec); 1012 1011 } else { 1013 1012 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_PARSE_FAILED, strValue, strName, strType, … … 1038 1037 tables = psMetadataLookup(md, "htAtts"); 1039 1038 PS_PTR_CHECK_NULL_GENERAL(tables, return); 1040 PS_PTR_CHECK_NULL_GENERAL(tables-> items, return);1041 psListSetIterator(tables-> items, PS_LIST_TAIL);1042 table = (psMetadataItem*)psListGetCurrent(tables-> items);1043 htAtts = (psHash*)table->data. V;1039 PS_PTR_CHECK_NULL_GENERAL(tables->data.list, return); 1040 psListSetIterator(tables->data.list, PS_LIST_TAIL); 1041 table = (psMetadataItem*)psListGetCurrent(tables->data.list); 1042 htAtts = (psHash*)table->data.list; 1044 1043 PS_PTR_CHECK_NULL_GENERAL(htAtts, return); 1045 1044 … … 1064 1063 1065 1064 // Free temporary metadata item and its hash table 1066 psListRemove(tables-> items, PS_LIST_TAIL, table);1065 psListRemove(tables->data.list, PS_LIST_TAIL, table); 1067 1066 1068 1067 psFree(psEndTagName); … … 1071 1070 } 1072 1071 1073 ps S32 psMetadataParseConfigXml(psMetadata** md, const char *fileName)1072 psMetadata* psMetadataParseConfigXml(psMetadata* md, psU32 *nFail, const char *fileName, psBool overwrite) 1074 1073 { 1075 1074 xmlSAXHandler saxHandler; … … 1077 1076 1078 1077 // Error checks 1079 PS_PTR_CHECK_NULL(fileName, -1);1078 PS_PTR_CHECK_NULL(fileName, NULL); 1080 1079 1081 1080 // Allocate metadata if necessary 1082 if ( *md == NULL) {1083 *md = psMetadataAlloc();1081 if (md == NULL) { 1082 md = psMetadataAlloc(); 1084 1083 } 1085 1084 … … 1113 1112 saxHandler.externalSubset = NULL; 1114 1113 saxHandler.initialized = 1; 1115 saxHandler._private = *md;1114 saxHandler._private = md; 1116 1115 saxHandler.startElementNs = NULL; 1117 1116 saxHandler.endElementNs = NULL; … … 1121 1120 if (xmlSAXUserParseFile(&saxHandler, NULL, fileName)) { 1122 1121 psError(PS_ERR_IO, true, PS_ERRORTEXT_psMetadataIO_FILE_OPEN_FAILED, fileName); 1123 return -1;1122 return NULL; 1124 1123 } 1125 1124 -
trunk/psLib/src/xml/psXML.h
r2529 r2607 9 9 * @author Ross Harman, MHPCC 10 10 * 11 * @version $Revision: 1. 5$ $Name: not supported by cvs2svn $12 * @date $Date: 2004-1 1-30 01:24:32$11 * @version $Revision: 1.6 $ $Name: not supported by cvs2svn $ 12 * @date $Date: 2004-12-03 23:14:46 $ 13 13 * 14 14 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 58 58 * Loads pre-defined settings by parsing a configuration file into a psMetadata structure. 59 59 * 60 * @return ps S32 : Number of lines that failed to beread.60 * @return psMetadata* : Resulting metadata from read. 61 61 */ 62 psS32 psMetadataParseConfig( 63 psMetadata** md, ///< Resulting metadata from read. 62 psMetadata* psMetadataParseConfig( 63 psMetadata* md, ///< Resulting metadata from read. 64 psU32 *nFail, ///< Number of failed lines. 64 65 const char *fileName, ///< Name of file to read. 65 66 psBool overwrite ///< Allow overwrite of duplicate specifications. … … 70 71 * Loads pre-defined XML settings by parsing a configuration file into a psMetadata structure. 71 72 * 72 * @return ps S32 : Number of lines that failed to beread.73 * @return psMetadata* : Resulting metadata from read. 73 74 */ 74 psS32 psMetadataParseConfigXml( 75 psMetadata** md, ///< Resulting metadata from read. 76 const char *fileName ///< Name of file to read. 75 76 psMetadata* psMetadataParseConfigXml( 77 psMetadata* md, ///< Resulting metadata from read. 78 psU32 *nFail, ///< Number of failed lines. 79 const char *fileName, ///< Name of file to read. 80 psBool overwrite ///< Allow overwrite of duplicate specifications. 77 81 ); 78 82 -
trunk/psLib/test/astronomy/tst_psMetadataIO.c
r2392 r2607 13 13 * @author Ross Harman, MHPCC 14 14 * 15 * @version $Revision: 1. 4$ $Name: not supported by cvs2svn $16 * @date $Date: 2004-1 1-22 20:53:39$15 * @version $Revision: 1.5 $ $Name: not supported by cvs2svn $ 16 * @date $Date: 2004-12-03 23:19:07 $ 17 17 * 18 18 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 25 25 26 26 static void printMetadataItem(psMetadataItem *metadataItem, char *spaces); 27 static void printMetadata(psMetadata *metadata); 28 static void printMetadataList(psList *metadataItemList, char* spaces); 29 static void printMetadataTable(psHash *mdTable); 27 30 28 static void printMetadataItemList(psList *metadataItemList) 31 static void printMetadata(psMetadata *metadata) 32 { 33 printf("Contents of metadata list:\n"); 34 printMetadataList(metadata->list, " "); 35 printf("\nContents of metadata table:\n"); 36 printMetadataTable(metadata->table); 37 } 38 39 static void printMetadataList(psList *metadataItemList, char* spaces) 29 40 { 30 41 psMetadataItem *entryChild = NULL; … … 33 44 entryChild = psListGetCurrent(metadataItemList); 34 45 while (entryChild != NULL) { 35 printMetadataItem(entryChild, " ");46 printMetadataItem(entryChild, spaces); 36 47 entryChild = psListGetNext(metadataItemList); 37 }38 }39 40 static void printMetadataList(psList *metadataItemList)41 {42 psMetadataItem *entryChild = NULL;43 44 psListSetIterator(metadataItemList, PS_LIST_HEAD);45 entryChild = psListGetCurrent(metadataItemList);46 while (entryChild != NULL) {47 printMetadataItem(entryChild, " ");48 entryChild = psListGetNext(metadataItemList);49 }50 }51 static void printMetadataItem(psMetadataItem *metadataItem, char *spaces)52 {53 54 psVector *vec = NULL;55 56 57 printf("%sKey Name: %8s ", spaces, metadataItem->name);58 printf("Key Type: %2d ", metadataItem->type);59 60 switch (metadataItem->type ) {61 case PS_META_ITEM_SET:62 printf("Key Value: %17c", ' ');63 break;64 case PS_META_BOOL:65 printf("Key Value: %15d ", metadataItem->data.B);66 break;67 case PS_META_S32:68 printf("Key Value: %15d ", metadataItem->data.S32);69 break;70 case PS_META_F32:71 printf("Key Value: %15.3f ", metadataItem->data.F32);72 break;73 case PS_META_F64:74 printf("Key Value: %15.3f ", metadataItem->data.F64);75 break;76 case PS_META_STR:77 printf("Key Value: %15s ", (char*)metadataItem->data.V);78 break;79 case PS_META_VEC:80 vec = (psVector*)metadataItem->data.V;81 printf("Key Value: ");82 for(psS32 i=0; i<vec->nalloc;i++) {83 printf("%d ", vec->data.S32[i]);84 }85 break;86 case PS_META_IMG:87 case PS_META_JPEG:88 case PS_META_PNG:89 case PS_META_ASTROM:90 case PS_META_UNKNOWN:91 printf("Value: unknown ");92 break;93 default:94 printf("Bad type: %d ", metadataItem->type);95 }96 printf("Key Comment: %s\n", metadataItem->comment);97 98 if(metadataItem->items->size) {99 printMetadataItemList(metadataItem->items);100 48 } 101 49 } … … 114 62 } 115 63 116 static void printMetadata (psMetadata *metadata)64 static void printMetadataItem(psMetadataItem *metadataItem, char *spaces) 117 65 { 118 printf("\nContents of metadata list:\n"); 119 printMetadataList(metadata->list); 120 printf("\nContents of metadata table:\n"); 121 printMetadataTable(metadata->table); 66 printf("%sKey Name: %8s ", spaces, metadataItem->name); 67 printf("Key pType: %d ", metadataItem->pType); 68 printf("Key mdType: %d ", metadataItem->type); 69 70 switch (metadataItem->type) { 71 case PS_META_LIST: 72 printf("Key Value: %17c", ' '); 73 break; 74 case PS_META_PRIMITIVE: 75 switch(metadataItem->pType) { 76 case PS_TYPE_BOOL: 77 printf("Key Value: %15d ", metadataItem->data.B); 78 break; 79 case PS_TYPE_S32: 80 printf("Key Value: %15d ", metadataItem->data.S32); 81 break; 82 case PS_TYPE_F32: 83 printf("Key Value: %15.3f ", metadataItem->data.F32); 84 break; 85 case PS_TYPE_F64: 86 printf("Key Value: %15.3f ", metadataItem->data.F64); 87 break; 88 default: 89 printf("Bad type: %d ", metadataItem->pType); 90 } 91 break; 92 case PS_META_STR: 93 printf("Key Value: %15s ", (char*)metadataItem->data.V); 94 break; 95 default: 96 printf("Bad type: %d ", metadataItem->type); 97 } 98 printf("Key Comment: %s\n", metadataItem->comment); 99 100 if(metadataItem->data.V && metadataItem->type==PS_META_LIST) { 101 printMetadataList(metadataItem->data.V, " "); 102 } 122 103 } 123 104 … … 128 109 printPositiveTestHeader(stdout, "psMetadata", "Test A - Read config file with overwrite set true"); 129 110 psMetadata *metadata1 = NULL; 130 ps S32 failedLines1 = 0;131 failedLines1 = psMetadataParseConfig(&metadata1, "test.config", true);111 psU32 failedLines1 = 0; 112 metadata1 = psMetadataParseConfig(metadata1, &failedLines1, "test.config", true); 132 113 printf("Failed lines: %d Expected: 6\n", failedLines1); 133 114 printMetadata(metadata1); … … 139 120 psMetadata *metadata2 = NULL; 140 121 psS32 failedLines2 = 0; 141 failedLines2 = psMetadataParseConfig(&metadata2, "test.config", false);142 printf("Failed lines: %d Expected: 7 ", failedLines2);122 metadata2 = psMetadataParseConfig(metadata2, &failedLines2, "test.config", false); 123 printf("Failed lines: %d Expected: 7 ", failedLines2); 143 124 printMetadata(metadata2); 144 125 printFooter(stdout, "psMetadata", "Test B - Read config file with overwrite set false", true); … … 149 130 psMetadata *metadata3 = psMetadataAlloc(); 150 131 psS32 failedLines3 = 0; 151 failedLines3 = psMetadataParseConfig(&metadata3, "test.config", false);152 printf("Failed lines: %d Expected: 7", failedLines3);132 metadata3 = psMetadataParseConfig(metadata3, &failedLines3, "test.config", true); 133 printf("Failed lines: %d Expected: 6 ", failedLines3); 153 134 printMetadata(metadata3); 154 135 printFooter(stdout, "psMetadata", "Test C - Read config file without auto-allocation of metadata", true); … … 158 139 printNegativeTestHeader(stdout,"psMetadataIO", "Test D - Attempt to use null fileName argument", 159 140 "Null failedLines not allowed", 0); 160 psMetadataParseConfig( &metadata1, NULL, true);141 psMetadataParseConfig(metadata1, &failedLines1, NULL, true); 161 142 printFooter(stdout, "psMetadata", "Test D - Attempt to use null fileName argument", true); 162 143 … … 165 146 printNegativeTestHeader(stdout,"psMetadataIO", "Test E - Attempt to open nonexistant file", 166 147 "Error opening file", 0); 167 psMetadataParseConfig( &metadata1, "abcedfg", true);148 psMetadataParseConfig(metadata1, &failedLines1, "abcedfg", true); 168 149 printFooter(stdout, "psMetadata", "Test E - Attempt to open nonexistant file", true); 169 150 -
trunk/psLib/test/astronomy/tst_psMetadata_01.c
r2392 r2607 13 13 * Test H - Attempt to use bad extNum 14 14 * Test I - Attempt to use bad extNameTest 15 * Test J - Free psMetadataData 15 * Test J - Read named hdr w/ invalid extnum 16 * Test K - Free psMetadata 16 17 * 17 18 * @author Ross Harman, MHPCC 18 19 * 19 * @version $Revision: 1.1 5$ $Name: not supported by cvs2svn $20 * @date $Date: 2004-1 1-22 20:54:50$20 * @version $Revision: 1.16 $ $Name: not supported by cvs2svn $ 21 * @date $Date: 2004-12-03 23:19:07 $ 21 22 * 22 23 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 29 30 30 31 static void printMetadataItem(psMetadataItem *metadataItem, char *spaces); 31 32 static void printMetadataItemList(psList *metadataItemList) 32 static void printMetadata(psMetadata *metadata); 33 static void printMetadataList(psList *metadataItemList, char* spaces); 34 static void printMetadataTable(psHash *mdTable); 35 36 static void printMetadata(psMetadata *metadata) 37 { 38 printf("Contents of metadata list:\n"); 39 printMetadataList(metadata->list, " "); 40 printf("\nContents of metadata table:\n"); 41 printMetadataTable(metadata->table); 42 } 43 44 static void printMetadataList(psList *metadataItemList, char* spaces) 33 45 { 34 46 psMetadataItem *entryChild = NULL; … … 37 49 entryChild = psListGetCurrent(metadataItemList); 38 50 while (entryChild != NULL) { 39 printMetadataItem(entryChild, " ");51 printMetadataItem(entryChild, spaces); 40 52 entryChild = psListGetNext(metadataItemList); 41 }42 }43 44 static void printMetadataList(psList *metadataItemList)45 {46 psMetadataItem *entryChild = NULL;47 48 psListSetIterator(metadataItemList, PS_LIST_HEAD);49 entryChild = psListGetCurrent(metadataItemList);50 while (entryChild != NULL) {51 printMetadataItem(entryChild, " ");52 entryChild = psListGetNext(metadataItemList);53 }54 }55 static void printMetadataItem(psMetadataItem *metadataItem, char *spaces)56 {57 printf("%sKey Name: %8s ", spaces, metadataItem->name);58 printf("Key Type: %2d ", metadataItem->type);59 60 switch (metadataItem->type ) {61 case PS_META_ITEM_SET:62 printf("Key Value: %17c", ' ');63 break;64 case PS_META_BOOL:65 printf("Key Value: %15d ", metadataItem->data.B);66 break;67 case PS_META_S32:68 printf("Key Value: %15d ", metadataItem->data.S32);69 break;70 case PS_META_F32:71 printf("Key Value: %15.3f ", metadataItem->data.F32);72 break;73 case PS_META_F64:74 printf("Key Value: %15.3f ", metadataItem->data.F64);75 break;76 case PS_META_STR:77 printf("Key Value: %15s ", (char*)metadataItem->data.V);78 break;79 case PS_META_IMG:80 case PS_META_JPEG:81 case PS_META_PNG:82 case PS_META_ASTROM:83 case PS_META_UNKNOWN:84 printf("Value: unknown ");85 break;86 default:87 printf("Bad type: %d ", metadataItem->type);88 }89 printf("Key Comment: %s\n", metadataItem->comment);90 91 if(metadataItem->items->size) {92 printMetadataItemList(metadataItem->items);93 53 } 94 54 } … … 107 67 } 108 68 109 static void printMetadata(psMetadata *metadata) 110 { 111 printf("Contents of metadata list:\n"); 112 printMetadataList(metadata->list); 113 printf("\nContents of metadata table:\n"); 114 printMetadataTable(metadata->table); 69 static void printMetadataItem(psMetadataItem *metadataItem, char *spaces) 70 { 71 printf("%sKey Name: %8s ", spaces, metadataItem->name); 72 printf("Key pType: %d ", metadataItem->pType); 73 printf("Key mdType: %d ", metadataItem->type); 74 75 switch (metadataItem->type) { 76 case PS_META_LIST: 77 printf("Key Value: %17c", ' '); 78 break; 79 case PS_META_PRIMITIVE: 80 switch(metadataItem->pType) { 81 case PS_TYPE_BOOL: 82 printf("Key Value: %15d ", metadataItem->data.B); 83 break; 84 case PS_TYPE_S32: 85 printf("Key Value: %15d ", metadataItem->data.S32); 86 break; 87 case PS_TYPE_F32: 88 printf("Key Value: %15.3f ", metadataItem->data.F32); 89 break; 90 case PS_TYPE_F64: 91 printf("Key Value: %15.3f ", metadataItem->data.F64); 92 break; 93 default: 94 printf("Bad type: %d ", metadataItem->pType); 95 } 96 break; 97 case PS_META_STR: 98 printf("Key Value: %15s ", (char*)metadataItem->data.V); 99 break; 100 default: 101 printf("Bad type: %d ", metadataItem->type); 102 } 103 printf("Key Comment: %s\n", metadataItem->comment); 104 105 if(metadataItem->data.V && metadataItem->type==PS_META_LIST) { 106 printMetadataList(metadataItem->data.V, " "); 107 } 115 108 } 116 109 … … 244 237 245 238 246 // Test I1 - Attempt to use a valid named extension withinvalid extnum247 printNegativeTestHeader(stdout, "psMetadata", "Test I1- Read named hdr w/ invalid extnum",239 // Test J - Read named hdr w/ invalid extnum 240 printNegativeTestHeader(stdout, "psMetadata", "Test J - Read named hdr w/ invalid extnum", 248 241 "If extName specified, extNum should be -1.", 0); 249 metadata1 = psMetadataReadHeader(NULL, "MY_DATA_2", 0, "header_2.fits");242 metadata1 = psMetadataReadHeader(NULL, NULL, 0, "header_2.fits"); 250 243 if (metadata1 != NULL ) { 251 244 psError(PS_ERR_UNKNOWN, true,"psMetadataReadHeader did not return null w/ valid extname, invalid extnum"); 252 245 return 12; 253 246 } 254 printFooter(stdout, "psMetadata", "Test C - Read named hdr from complex FITS file", true);255 256 257 // Test J- Free psMetadata258 printPositiveTestHeader(stdout, "psMetadata", "Test J- Free psMetadata");247 printFooter(stdout, "psMetadata", "Test J - Read named hdr w/ invalid extnum", true); 248 249 250 // Test K - Free psMetadata 251 printPositiveTestHeader(stdout, "psMetadata", "Test K - Free psMetadata"); 259 252 psFree(metadata1); 260 253 psFree(metadata2); … … 262 255 if(psMemCheckLeaks(0, NULL, stdout,false)) { 263 256 psError(PS_ERR_UNKNOWN,true,"Memory leaks detected."); 264 return 10;265 257 } 266 258 psMemCheckCorruption(0); … … 269 261 printf("ERROR: Found %d bad memory blocks\n", nBad); 270 262 } 271 printFooter(stdout, "psMetadata", "Test J- Free psMetadata", true);263 printFooter(stdout, "psMetadata", "Test K - Free psMetadata", true); 272 264 273 265 return 0; -
trunk/psLib/test/astronomy/tst_psMetadata_02.c
r2392 r2607 14 14 * @author Ross Harman, MHPCC 15 15 * 16 * @version $Revision: 1. 8$ $Name: not supported by cvs2svn $17 * @date $Date: 2004-1 1-22 20:54:50$16 * @version $Revision: 1.9 $ $Name: not supported by cvs2svn $ 17 * @date $Date: 2004-12-03 23:19:07 $ 18 18 * 19 19 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 25 25 #include <string.h> 26 26 27 static void printMetadataItem(psMetadataItem * item)27 static void printMetadataItem(psMetadataItem *metadataItem) 28 28 { 29 printf("Key Name: %8s ", item->name); 30 printf("Key Type: %2d ", item->type); 29 printf("Key Name: %8s ", metadataItem->name); 30 printf("Key pType: %2d ", metadataItem->pType); 31 printf("Key mdType: %2d ", metadataItem->type); 31 32 32 switch ( item->type) {33 case PS_META_ BOOL:34 printf("Key Value: %1 5d ", item->data.B);33 switch (metadataItem->type) { 34 case PS_META_LIST: 35 printf("Key Value: %17c", ' '); 35 36 break; 36 case PS_META_S32: 37 printf("Key Value: %15d ", item->data.S32); 38 break; 39 case PS_META_F32: 40 printf("Key Value: %15.3f ", item->data.F32); 41 break; 42 case PS_META_F64: 43 printf("Key Value: %15.3f ", item->data.F64); 37 case PS_META_PRIMITIVE: 38 switch(metadataItem->pType) { 39 case PS_TYPE_BOOL: 40 printf("Key Value: %15d ", metadataItem->data.B); 41 break; 42 case PS_TYPE_S32: 43 printf("Key Value: %15d ", metadataItem->data.S32); 44 break; 45 case PS_TYPE_F32: 46 printf("Key Value: %15.3f ", metadataItem->data.F32); 47 break; 48 case PS_TYPE_F64: 49 printf("Key Value: %15.3f ", metadataItem->data.F64); 50 break; 51 default: 52 printf("Bad type: %d ", metadataItem->pType); 53 } 44 54 break; 45 55 case PS_META_STR: 46 printf("Key Value: %15s ", (char*)item->data.V); 47 break; 48 case PS_META_IMG: 49 case PS_META_JPEG: 50 case PS_META_PNG: 51 case PS_META_ASTROM: 52 case PS_META_UNKNOWN: 53 printf("Value: unknown "); 56 printf("Key Value: %15s ", (char*)metadataItem->data.V); 54 57 break; 55 58 default: 56 printf("Bad type: %d ", item->type);59 printf("Bad type: %d ", metadataItem->type); 57 60 } 58 printf("Key Comment: %s\n", item->comment);61 printf("Key Comment: %s\n", metadataItem->comment); 59 62 } 60 63 … … 73 76 // Test A - Allocate metadata items 74 77 printPositiveTestHeader(stdout, "psMetadata", "Test A - Allocate metadata items"); 75 item1 = psMetadataItemAlloc("myItem1", PS_ META_BOOL, "I am a boolean", true);76 item2 = psMetadataItemAlloc("myItem2", PS_ META_S32, "I am a signed integer", 111);77 item3 = psMetadataItemAlloc("myItem3", PS_ META_F32, "I am a single precision floating point", 222.222);78 item4 = psMetadataItemAlloc("myItem4", PS_ META_F64, "I am a double precision floating point", 333.333);79 item5 = psMetadataItemAlloc("myItem5", PS_ META_STR, "I am a string", "HELLO WORLD");78 item1 = psMetadataItemAlloc("myItem1", PS_TYPE_BOOL, PS_META_PRIMITIVE, "I am a boolean", true); 79 item2 = psMetadataItemAlloc("myItem2", PS_TYPE_S32, PS_META_PRIMITIVE, "I am a signed integer", 111); 80 item3 = psMetadataItemAlloc("myItem3", PS_TYPE_F32, PS_META_PRIMITIVE, "I am a single precision floating point", 222.222); 81 item4 = psMetadataItemAlloc("myItem4", PS_TYPE_F64, PS_META_PRIMITIVE, "I am a double precision floating point", 333.333); 82 item5 = psMetadataItemAlloc("myItem5", PS_TYPE_PTR, PS_META_STR, "I am a string", "HELLO WORLD"); 80 83 printMetadataItem(item1); 81 84 printMetadataItem(item2); … … 90 93 "Null value for name not allowed", 0); 91 94 psLogMsg(__func__,PS_LOG_INFO,"Following should produce error for null name."); 92 badItem = psMetadataItemAlloc(NULL, PS_ META_STR, "I am a string", "HELLO WORLD");95 badItem = psMetadataItemAlloc(NULL, PS_TYPE_PTR, PS_META_STR, "I am a string", "HELLO WORLD"); 93 96 if (badItem != NULL) { 94 97 psError(PS_ERR_UNKNOWN, true,"psMetadataItemAlloc did not return null with null name item."); … … 101 104 printNegativeTestHeader(stdout,"psMetadata", "Test C - Attempt to create metadata item with invalid type", 102 105 "Invalid psMetadataType: 6", 0); 103 badItem = psMetadataItemAlloc("badItem", PS_ META_IMG, "I am bad", "Bad comment");106 badItem = psMetadataItemAlloc("badItem", PS_TYPE_PTR, PS_META_NTYPE, "I am bad", "Bad comment"); 104 107 printFooter(stdout, "psMetadata", "Test C - Attempt to create metadata item with invalid type", true); 105 108 -
trunk/psLib/test/astronomy/tst_psMetadata_03.c
r2392 r2607 10 10 * Test E - Attempt to remove non-existant metadata item by name 11 11 * Test F - Attempt to remove non-existant metadata item by index 12 * Test G - Free psMetadata 13 * 12 * Test G - Attempt to add item to an invalid metadata structure 13 * Test H - Attempt to add item to an invalid metadata structure 14 * Test I - Attempt to add item with a null name 15 * Test J - Attempt to add item to an invalid metadata structure 16 * Test K - Free psMetadata 17 * 14 18 * @author Ross Harman, MHPCC 15 19 * 16 * @version $Revision: 1.1 0$ $Name: not supported by cvs2svn $17 * @date $Date: 2004-1 1-22 20:54:50$20 * @version $Revision: 1.11 $ $Name: not supported by cvs2svn $ 21 * @date $Date: 2004-12-03 23:19:07 $ 18 22 * 19 23 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 25 29 #include <string.h> 26 30 27 static void printMetadataItem(psMetadataItem * item)31 static void printMetadataItem(psMetadataItem *metadataItem) 28 32 { 29 printf("Key Name: %8s ", item->name); 30 printf("Key Type: %2d ", item->type); 31 32 switch (item->type ) { 33 case PS_META_BOOL: 34 printf("Key Value: %15d ", item->data.B); 33 printf("Key Name: %8s ", metadataItem->name); 34 printf("Key pType: %2d ", metadataItem->pType); 35 printf("Key mdType: %2d ", metadataItem->type); 36 37 switch (metadataItem->type) { 38 case PS_META_LIST: 39 printf("Key Value: %17c", ' '); 35 40 break; 36 case PS_META_S32: 37 printf("Key Value: %15d ", item->data.S32); 38 break; 39 case PS_META_F32: 40 printf("Key Value: %15.3f ", item->data.F32); 41 break; 42 case PS_META_F64: 43 printf("Key Value: %15.3f ", item->data.F64); 41 case PS_META_PRIMITIVE: 42 switch(metadataItem->pType) { 43 case PS_TYPE_BOOL: 44 printf("Key Value: %15d ", metadataItem->data.B); 45 break; 46 case PS_TYPE_S32: 47 printf("Key Value: %15d ", metadataItem->data.S32); 48 break; 49 case PS_TYPE_F32: 50 printf("Key Value: %15.3f ", metadataItem->data.F32); 51 break; 52 case PS_TYPE_F64: 53 printf("Key Value: %15.3f ", metadataItem->data.F64); 54 break; 55 default: 56 printf("Bad type: %d ", metadataItem->pType); 57 } 44 58 break; 45 59 case PS_META_STR: 46 printf("Key Value: %15s ", (char*)item->data.V); 47 break; 48 case PS_META_IMG: 49 case PS_META_JPEG: 50 case PS_META_PNG: 51 case PS_META_ASTROM: 52 case PS_META_UNKNOWN: 53 printf("Value: unknown "); 60 printf("Key Value: %15s ", (char*)metadataItem->data.V); 54 61 break; 55 62 default: 56 printf("Bad type: %d ", item->type);57 } 58 printf("Key Comment: %s\n", item->comment);63 printf("Bad type: %d ", metadataItem->type); 64 } 65 printf("Key Comment: %s\n", metadataItem->comment); 59 66 } 60 67 … … 76 83 printPositiveTestHeader(stdout, "psMetadata", "Test A - Allocate metadata items"); 77 84 metadata = psMetadataAlloc(); 78 item1 = psMetadataItemAlloc("myItem1", PS_ META_BOOL, "I am a boolean", true);79 item2 = psMetadataItemAlloc("myItem2", PS_ META_S32, "I am a integer", 55);80 item3 = psMetadataItemAlloc("myItem3", PS_ META_BOOL, "I am a boolean", false);81 item4 = psMetadataItemAlloc("myItem4", PS_ META_S32, "I am a integer", 66);82 errItem = psMetadataItemAlloc("errItem", PS_ META_S32, "I am a integer", 99);85 item1 = psMetadataItemAlloc("myItem1", PS_TYPE_BOOL, PS_META_PRIMITIVE, "I am a boolean", true); 86 item2 = psMetadataItemAlloc("myItem2", PS_TYPE_S32, PS_META_PRIMITIVE, "I am a integer", 55); 87 item3 = psMetadataItemAlloc("myItem3", PS_TYPE_BOOL, PS_META_PRIMITIVE, "I am a boolean", false); 88 item4 = psMetadataItemAlloc("myItem4", PS_TYPE_S32, PS_META_PRIMITIVE, "I am a integer", 66); 89 errItem = psMetadataItemAlloc("errItem", PS_TYPE_S32, PS_META_PRIMITIVE, "I am a integer", 99); 83 90 printMetadataItem(item1); 84 91 printMetadataItem(item2); … … 90 97 // Test B - Remove items from metadata by name 91 98 printPositiveTestHeader(stdout, "psMetadata", "Test B - Remove items from metadata by name"); 92 if( ! psMetadataAddItem(metadata, item1, PS_LIST_HEAD)) {99 if(!psMetadataAddItem(metadata, item1, PS_LIST_HEAD)) { 93 100 psError(PS_ERR_UNKNOWN, true,"psMetadataAddItem did not return true when adding by name."); 94 101 return 10; 95 102 } 96 if( ! psMetadataAdd(metadata,PS_LIST_HEAD,"myItem2",PS_META_S32,"I am S32 integer",77)) {103 if(!psMetadataAdd(metadata,PS_LIST_HEAD,"myItem2", PS_TYPE_S32, PS_META_PRIMITIVE, "I am S32 integer",77)) { 97 104 psError(PS_ERR_UNKNOWN, true,"psMetadataAddItem did not return true when adding by name."); 98 105 return 11; 99 106 } 100 if ( ! psMetadataRemove(metadata, 0, "myItem1" )) {107 if (!psMetadataRemove(metadata, 0, "myItem1")) { 101 108 psError(PS_ERR_UNKNOWN, true,"psMetadataRemove did not return true when removing by name."); 102 109 return 12; 103 110 } 104 if ( ! psMetadataRemove(metadata, 0, "myItem2" )) {111 if (!psMetadataRemove(metadata, 0, "myItem2")) { 105 112 psError(PS_ERR_UNKNOWN, true,"psMetadataRemove did not return true when removing by name."); 106 113 return 13; … … 115 122 return 14; 116 123 } 117 if ( ! psMetadataAdd(metadata,PS_LIST_HEAD,"myItem4", PS_META_S32,"I am S32 integer",88) ) {124 if ( ! psMetadataAdd(metadata,PS_LIST_HEAD,"myItem4", PS_TYPE_S32, PS_META_PRIMITIVE, "I am S32 integer",88) ) { 118 125 psError(PS_ERR_UNKNOWN, true,"psMetadataAddItem did not return true when adding by index."); 119 126 return 15; … … 160 167 161 168 162 // Test H- Attempt to add item to an invalid metadata structure163 printNegativeTestHeader(stdout,"psMetadata","Test H- Attempt to add item to metadata w/o hash table",169 // Test G - Attempt to add item to an invalid metadata structure 170 printNegativeTestHeader(stdout,"psMetadata","Test G - Attempt to add item to metadata w/o hash table", 164 171 "Couldn't add item to invalid metadata structure.",0); 165 172 errMetadata = psMetadataAlloc(); … … 175 182 } 176 183 errMetadata->table = mdTable; 177 printFooter(stdout,"psMetadata","Test H- Attempt to add item to invalid metadata w/o hash table", true);178 179 // Test J- Attempt to add item to an invalid metadata structure180 printNegativeTestHeader(stdout,"psMetadata","Test J- Attempt to add item to metadata w/o link list",184 printFooter(stdout,"psMetadata","Test G - Attempt to add item to invalid metadata w/o hash table", true); 185 186 // Test H - Attempt to add item to an invalid metadata structure 187 printNegativeTestHeader(stdout,"psMetadata","Test H - Attempt to add item to metadata w/o link list", 181 188 "Couldn't add item to invalid metadata structure.",0); 182 189 mdList = errMetadata->list; … … 191 198 } 192 199 errMetadata->list = mdList; 193 printFooter(stdout,"psMetadata","Test J- Attempt to add item to invalid metadata w/o link list", true);194 195 // Test K- Attempt to add item with a null name196 printNegativeTestHeader(stdout,"psMetadata","Test K- Attempt to add item with null name",200 printFooter(stdout,"psMetadata","Test H - Attempt to add item to invalid metadata w/o link list", true); 201 202 // Test I - Attempt to add item with a null name 203 printNegativeTestHeader(stdout,"psMetadata","Test I - Attempt to add item with null name", 197 204 "Couldn't add item with null name.",0); 198 205 errName = errItem->name; … … 203 210 } 204 211 errItem->name = errName; 205 printFooter(stdout,"psMetadata","Test K- Attempt to add item with null name", true);206 207 // Test L- Attempt to add item to an invalid metadata structure208 printNegativeTestHeader(stdout,"psMetadata","Test L- Attempt to add item to metadata w/o hash table",212 printFooter(stdout,"psMetadata","Test I - Attempt to add item with null name", true); 213 214 // Test J - Attempt to add item to an invalid metadata structure 215 printNegativeTestHeader(stdout,"psMetadata","Test J - Attempt to add item to metadata w/o hash table", 209 216 "Couldn't add item to invalid metadata structure.",0); 210 217 mdTable = errMetadata->table; 211 218 errMetadata->table = NULL; 212 if ( psMetadataAdd(errMetadata, PS_LIST_HEAD, "errItem", PS_META_S32,"Integer",22) ) {219 if (psMetadataAdd(errMetadata, PS_LIST_HEAD, "errItem", PS_TYPE_S32, PS_META_PRIMITIVE, "Integer",22) ) { 213 220 psError(PS_ERR_UNKNOWN, true,"psMetadataAddItem did not return false w/ invalid metadata struct w/o hash table."); 214 221 return 24; 215 222 } 216 223 errMetadata->table = mdTable; 217 printFooter(stdout,"psMetadata","Test L- Attempt to add item to invalid metadata w/o hash table", true);218 219 // Test G- Free psMetadata220 printPositiveTestHeader(stdout, "psMetadata", "Test G- Free psMetadata");224 printFooter(stdout,"psMetadata","Test J - Attempt to add item to invalid metadata w/o hash table", true); 225 226 // Test K - Free psMetadata 227 printPositiveTestHeader(stdout, "psMetadata", "Test K - Free psMetadata"); 221 228 psFree(metadata); 222 229 psFree(item1); … … 235 242 printf("ERROR: Found %d bad memory blocks\n", nBad); 236 243 } 237 printFooter(stdout, "psMetadata", "Test G- Free psMetadata", true);244 printFooter(stdout, "psMetadata", "Test K - Free psMetadata", true); 238 245 239 246 -
trunk/psLib/test/astronomy/tst_psMetadata_04.c
r2392 r2607 13 13 * Test G - Attempt to use null metadata 14 14 * Test H - Attempt to get non-existant metadata item 15 * Test I - Free psMetadata 16 * Test J - Attempt to look up with an invalid metadata object 15 * Test I - Attempt to look up with an invalid metadata object 16 * Test J - Attempt get item with an invalid metadata object 17 * Test K - Free psMetadata 17 18 * 18 19 * @author Ross Harman, MHPCC 19 20 * 20 * @version $Revision: 1. 8$ $Name: not supported by cvs2svn $21 * @date $Date: 2004-1 1-22 20:54:50$21 * @version $Revision: 1.9 $ $Name: not supported by cvs2svn $ 22 * @date $Date: 2004-12-03 23:19:07 $ 22 23 * 23 24 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 29 30 #include <string.h> 30 31 31 static void printMetadataItem(psMetadataItem * item)32 static void printMetadataItem(psMetadataItem *metadataItem) 32 33 { 33 printf("Key Name: %8s ", item->name); 34 printf("Key Type: %2d ", item->type); 35 36 switch (item->type ) { 37 case PS_META_BOOL: 38 printf("Key Value: %15d ", item->data.B); 34 printf("Key Name: %8s ", metadataItem->name); 35 printf("Key pType: %2d ", metadataItem->pType); 36 printf("Key mdType: %2d ", metadataItem->type); 37 38 switch (metadataItem->type) { 39 case PS_META_LIST: 40 printf("Key Value: %17c", ' '); 39 41 break; 40 case PS_META_S32: 41 printf("Key Value: %15d ", item->data.S32); 42 break; 43 case PS_META_F32: 44 printf("Key Value: %15.3f ", item->data.F32); 45 break; 46 case PS_META_F64: 47 printf("Key Value: %15.3f ", item->data.F64); 42 case PS_META_PRIMITIVE: 43 switch(metadataItem->pType) { 44 case PS_TYPE_BOOL: 45 printf("Key Value: %15d ", metadataItem->data.B); 46 break; 47 case PS_TYPE_S32: 48 printf("Key Value: %15d ", metadataItem->data.S32); 49 break; 50 case PS_TYPE_F32: 51 printf("Key Value: %15.3f ", metadataItem->data.F32); 52 break; 53 case PS_TYPE_F64: 54 printf("Key Value: %15.3f ", metadataItem->data.F64); 55 break; 56 default: 57 printf("Bad type: %d ", metadataItem->pType); 58 } 48 59 break; 49 60 case PS_META_STR: 50 printf("Key Value: %15s ", (char*)item->data.V); 51 break; 52 case PS_META_IMG: 53 case PS_META_JPEG: 54 case PS_META_PNG: 55 case PS_META_ASTROM: 56 case PS_META_UNKNOWN: 57 printf("Value: unknown "); 61 printf("Key Value: %15s ", (char*)metadataItem->data.V); 58 62 break; 59 63 default: 60 printf("Bad type: %d ", item->type);61 } 62 printf("Key Comment: %s\n", item->comment);64 printf("Bad type: %d ", metadataItem->type); 65 } 66 printf("Key Comment: %s\n", metadataItem->comment); 63 67 } 64 68 … … 75 79 psList* tmpList = NULL; 76 80 81 77 82 // Test A - Allocate metadata and items 78 83 printPositiveTestHeader(stdout, "psMetadata", "Test A - Allocate metadata items"); 79 84 metadata = psMetadataAlloc(); 80 item1 = psMetadataItemAlloc("myItem1", PS_ META_BOOL, "I am a boolean", true);81 item2 = psMetadataItemAlloc("myItem2", PS_ META_S32, "I am a integer", 55);82 item3 = psMetadataItemAlloc("myItem3", PS_ META_BOOL, "I am a boolean", false);83 item4 = psMetadataItemAlloc("myItem4", PS_ META_S32, "I am a integer", 66);85 item1 = psMetadataItemAlloc("myItem1", PS_TYPE_BOOL, PS_META_PRIMITIVE, "I am a boolean", true); 86 item2 = psMetadataItemAlloc("myItem2", PS_TYPE_S32, PS_META_PRIMITIVE, "I am a integer", 55); 87 item3 = psMetadataItemAlloc("myItem3", PS_TYPE_BOOL, PS_META_PRIMITIVE, "I am a boolean", false); 88 item4 = psMetadataItemAlloc("myItem4", PS_TYPE_S32, PS_META_PRIMITIVE, "I am a integer", 66); 84 89 printMetadataItem(item1); 85 90 printMetadataItem(item2); … … 165 170 printFooter(stdout, "psMetadata", "Test H - Attempt to get non-existant metadata item", true); 166 171 167 // Test J- Attempt to look up with an invalid metadata object168 printNegativeTestHeader(stdout,"psMetadata","Test J- Attemp to look up with an invalid metadata",172 // Test I - Attempt to look up with an invalid metadata object 173 printNegativeTestHeader(stdout,"psMetadata","Test I - Attemp to look up with an invalid metadata", 169 174 "Lookup item with invalid metadata object.", 0 ); 170 175 tmpTable = metadata->table; … … 175 180 } 176 181 metadata->table = tmpTable; 177 printFooter(stdout, "psMetadata","Test J- Attempt to lookup an invalid metadata object.",true);178 179 // Test K- Attempt get item with an invalid metadata object180 printNegativeTestHeader(stdout,"psMetadata","Test K- Attemp to get item with an invalid metadata",182 printFooter(stdout, "psMetadata","Test I - Attempt to lookup an invalid metadata object.",true); 183 184 // Test J - Attempt get item with an invalid metadata object 185 printNegativeTestHeader(stdout,"psMetadata","Test J - Attemp to get item with an invalid metadata", 181 186 "Get item with invalid metadata object.", 0 ); 182 187 tmpList = metadata->list; … … 187 192 } 188 193 metadata->list = tmpList; 189 printFooter(stdout, "psMetadata","Test K- Attempt to get item with invalid metadata object.",true);190 191 // Test I- Free psMetadata192 printPositiveTestHeader(stdout, "psMetadata", "Test I- Free psMetadata");194 printFooter(stdout, "psMetadata","Test J - Attempt to get item with invalid metadata object.",true); 195 196 // Test K - Free psMetadata 197 printPositiveTestHeader(stdout, "psMetadata", "Test K - Free psMetadata"); 193 198 psFree(metadata); 194 199 psFree(item1); … … 206 211 return 21; 207 212 } 208 printFooter(stdout, "psMetadata", "Test I- Free psMetadata", true);213 printFooter(stdout, "psMetadata", "Test K - Free psMetadata", true); 209 214 210 215 -
trunk/psLib/test/astronomy/tst_psMetadata_05.c
r2527 r2607 22 22 * @author Ross Harman, MHPCC 23 23 * 24 * @version $Revision: 1.1 2$ $Name: not supported by cvs2svn $25 * @date $Date: 2004-1 1-30 01:16:43$24 * @version $Revision: 1.13 $ $Name: not supported by cvs2svn $ 25 * @date $Date: 2004-12-03 23:19:07 $ 26 26 * 27 27 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 33 33 #include <string.h> 34 34 35 static void printMetadataItem(psMetadataItem * item)35 static void printMetadataItem(psMetadataItem *metadataItem) 36 36 { 37 printf("Key Name: %8s ", item->name); 38 printf("Key Type: %2d ", item->type); 39 40 switch (item->type ) { 41 case PS_META_BOOL: 42 printf("Key Value: %15d ", item->data.B); 37 printf("Key Name: %8s ", metadataItem->name); 38 printf("Key pType: %2d ", metadataItem->pType); 39 printf("Key mdType: %2d ", metadataItem->type); 40 41 switch (metadataItem->type) { 42 case PS_META_LIST: 43 printf("Key Value: %17c", ' '); 43 44 break; 44 case PS_META_S32: 45 printf("Key Value: %15d ", item->data.S32); 46 break; 47 case PS_META_F32: 48 printf("Key Value: %15.3f ", item->data.F32); 49 break; 50 case PS_META_F64: 51 printf("Key Value: %15.3f ", item->data.F64); 45 case PS_META_PRIMITIVE: 46 switch(metadataItem->pType) { 47 case PS_TYPE_BOOL: 48 printf("Key Value: %15d ", metadataItem->data.B); 49 break; 50 case PS_TYPE_S32: 51 printf("Key Value: %15d ", metadataItem->data.S32); 52 break; 53 case PS_TYPE_F32: 54 printf("Key Value: %15.3f ", metadataItem->data.F32); 55 break; 56 case PS_TYPE_F64: 57 printf("Key Value: %15.3f ", metadataItem->data.F64); 58 break; 59 default: 60 printf("Bad type: %d ", metadataItem->pType); 61 } 52 62 break; 53 63 case PS_META_STR: 54 printf("Key Value: %15s ", (char*)item->data.V); 55 break; 56 case PS_META_IMG: 57 case PS_META_JPEG: 58 case PS_META_PNG: 59 case PS_META_ASTROM: 60 case PS_META_UNKNOWN: 61 printf("Value: unknown "); 64 printf("Key Value: %15s ", (char*)metadataItem->data.V); 62 65 break; 63 66 default: 64 printf("Bad type: %d ", item->type);65 } 66 printf("Key Comment: %s\n", item->comment);67 printf("Bad type: %d ", metadataItem->type); 68 } 69 printf("Key Comment: %s\n", metadataItem->comment); 67 70 } 68 71 … … 70 73 psS32 main( psS32 argc, char* argv[] ) 71 74 { 72 psS64 data;73 psF32 fpdata;74 75 psMetadataItem *item1 = NULL; 75 76 psMetadataItem *item2 = NULL; … … 80 81 psMetadataItem *item7 = NULL; 81 82 psMetadataItem *item8 = NULL; 82 psMetadataItem *item = NULL;83 83 psMetadata *metadata = NULL; 84 84 FILE *fd = NULL; 85 char str[7];86 psList* tmpList = NULL;87 85 88 86 // Test A - Allocate metadata and items 89 87 printPositiveTestHeader(stdout, "psMetadata", "Test A - Allocate metadata items"); 90 88 metadata = psMetadataAlloc(); 91 item1 = psMetadataItemAlloc("myItem1", PS_ META_BOOL, "I am a boolean", true);92 item2 = psMetadataItemAlloc("myItem2", PS_ META_S32, "I am a integer", 55);93 item3 = psMetadataItemAlloc("myItem3", PS_ META_BOOL, "I am a boolean", false);94 item4 = psMetadataItemAlloc("myItem4", PS_ META_S32, "I am a integer", 66);95 item5 = psMetadataItemAlloc("myItem5", PS_ META_F32, "I am a float", 3.14);96 item6 = psMetadataItemAlloc("myItem6", PS_ META_F64,"I am a double", 6.28);97 item7 = psMetadataItemAlloc("myItem7", PS_ META_STR, "I am a string", "GNIRTS");98 item8 = psMetadataItemAlloc("myItem8", PS_ META_UNKNOWN, "I am unknown");89 item1 = psMetadataItemAlloc("myItem1", PS_TYPE_BOOL, PS_META_PRIMITIVE, "I am a boolean", true); 90 item2 = psMetadataItemAlloc("myItem2", PS_TYPE_S32, PS_META_PRIMITIVE, "I am a integer", 55); 91 item3 = psMetadataItemAlloc("myItem3", PS_TYPE_BOOL, PS_META_PRIMITIVE, "I am a boolean", false); 92 item4 = psMetadataItemAlloc("myItem4", PS_TYPE_S32, PS_META_PRIMITIVE, "I am a integer", 66); 93 item5 = psMetadataItemAlloc("myItem5", PS_TYPE_F32, PS_META_PRIMITIVE, "I am a float", 3.14); 94 item6 = psMetadataItemAlloc("myItem6", PS_TYPE_F64, PS_META_PRIMITIVE,"I am a double", 6.28); 95 item7 = psMetadataItemAlloc("myItem7", PS_TYPE_PTR, PS_META_STR, "I am a string", "GNIRTS"); 96 item8 = psMetadataItemAlloc("myItem8", PS_TYPE_PTR, PS_META_UNKNOWN, "I am unknown"); 99 97 printMetadataItem(item1); 100 98 printMetadataItem(item2); … … 107 105 printFooter(stdout, "psMetadata", "Test A - Allocate metadata items", true); 108 106 109 110 // Test B - Set iterator at second index111 printPositiveTestHeader(stdout, "psMetadata", "Test B - Set iterator at second index");112 if (!psMetadataSetIterator(metadata, 2)) {113 psError(PS_ERR_UNKNOWN,true,"Failed to set iterator");114 return 100;115 }116 printFooter(stdout, "psMetadata", "Test B - Set iterator at second index", true);117 118 119 // Test C - Get next item at index120 printPositiveTestHeader(stdout, "psMetadata", "Test C - Get next item at index");121 item = psMetadataGetNext(metadata, NULL, 2);122 if(item == NULL) {123 printf("ERROR: Item should not be null\n");124 } else {125 printf("Found item named %s\n", item->name);126 }127 printFooter(stdout, "psMetadata", "Test C - Get next item at index", true);128 129 130 // Test D - Get next item at index and string131 printPositiveTestHeader(stdout, "psMetadata", "Test D - Get next item at index and string");132 item = psMetadataGetNext(metadata, "myItem1", 1);133 if(item == NULL) {134 printf("ERROR: Item should not be null\n");135 } else {136 printf("Found item named %s\n", item->name);137 }138 printFooter(stdout, "psMetadata", "Test D - Get next item at index and string", true);139 140 141 // Test E - Get previous item at index142 printPositiveTestHeader(stdout, "psMetadata", "Test E - Get previous item at index");143 item = psMetadataGetPrevious(metadata, NULL, 1);144 if(item == NULL) {145 printf("ERROR: Item should not be null\n");146 } else {147 printf("Found item named %s\n", item->name);148 }149 if( psMetadataGetPrevious(metadata,"myItem3",1) == NULL) {150 psError(PS_ERR_UNKNOWN, true,"psMetadataGetPrevious did not return an item from metadata.");151 return 45;152 }153 tmpList = metadata->list;154 metadata->list = NULL;155 if ( psMetadataGetPrevious(metadata,NULL,1) != NULL) {156 psError(PS_ERR_UNKNOWN, true,"psMetadataGetPrevious did not return null for invalid metadata.");157 return 50;158 }159 metadata->list = tmpList;160 printFooter(stdout, "psMetadata", "Test E - Get previous item at index", true);161 162 107 /* 108 // Test B - Set iterator at second index 109 printPositiveTestHeader(stdout, "psMetadata", "Test B - Set iterator at second index"); 110 if (!psMetadataSetIterator(metadata, 2)) { 111 psError(PS_ERR_UNKNOWN,true,"Failed to set iterator"); 112 return 100; 113 } 114 printFooter(stdout, "psMetadata", "Test B - Set iterator at second index", true); 115 116 117 // Test C - Get next item at index 118 printPositiveTestHeader(stdout, "psMetadata", "Test C - Get next item at index"); 119 item = psMetadataGetNext(metadata, NULL, 2); 120 if(item == NULL) { 121 printf("ERROR: Item should not be null\n"); 122 } else { 123 printf("Found item named %s\n", item->name); 124 } 125 printFooter(stdout, "psMetadata", "Test C - Get next item at index", true); 126 127 128 // Test D - Get next item at index and string 129 printPositiveTestHeader(stdout, "psMetadata", "Test D - Get next item at index and string"); 130 item = psMetadataGetNext(metadata, "myItem1", 1); 131 if(item == NULL) { 132 printf("ERROR: Item should not be null\n"); 133 } else { 134 printf("Found item named %s\n", item->name); 135 } 136 printFooter(stdout, "psMetadata", "Test D - Get next item at index and string", true); 137 138 139 // Test E - Get previous item at index 140 printPositiveTestHeader(stdout, "psMetadata", "Test E - Get previous item at index"); 141 item = psMetadataGetPrevious(metadata, NULL, 1); 142 if(item == NULL) { 143 printf("ERROR: Item should not be null\n"); 144 } else { 145 printf("Found item named %s\n", item->name); 146 } 147 if( psMetadataGetPrevious(metadata,"myItem3",1) == NULL) { 148 psError(PS_ERR_UNKNOWN, true,"psMetadataGetPrevious did not return an item from metadata."); 149 return 45; 150 } 151 tmpList = metadata->list; 152 metadata->list = NULL; 153 if ( psMetadataGetPrevious(metadata,NULL,1) != NULL) { 154 psError(PS_ERR_UNKNOWN, true,"psMetadataGetPrevious did not return null for invalid metadata."); 155 return 50; 156 } 157 metadata->list = tmpList; 158 printFooter(stdout, "psMetadata", "Test E - Get previous item at index", true); 159 160 */ 163 161 // Test F - Write metadata item to file 164 162 printPositiveTestHeader(stdout, "psMetadata", "Test F - Write metadata item to file"); … … 167 165 printf("ERROR: Couldn't open file for writing\n"); 168 166 } 169 psMetadataItemPrint(fd, "S32 = %ld\n", item2); 170 psMetadataItemPrint(fd, "BOL = %ld\n", item3); 171 psMetadataItemPrint(fd, "F32 = %g\n", item5); 172 psMetadataItemPrint(fd, "F64 = %g\n", item6); 173 psMetadataItemPrint(fd, "STR = %s\n", item7); 174 psMetadataItemPrint(fd, "UNK = \n", item8); 175 printFooter(stdout, "psMetadata", "Test F - Write metadata item to file", true); 167 psMetadataItemPrint(fd, "S32 = %ld\n", item2); 168 psMetadataItemPrint(fd, "BOL = %ld\n", item3); 169 psMetadataItemPrint(fd, "F32 = %g\n", item5); 170 psMetadataItemPrint(fd, "F64 = %g\n", item6); 171 psMetadataItemPrint(fd, "STR = %s\n", item7); 172 psMetadataItemPrint(fd, "UNK = \n", item8); 176 173 fclose(fd); 177 174 fd = fopen("./tst_psMetadata05_OUT", "r"); … … 179 176 printf("ERROR: Couldn't open file for reading\n"); 180 177 } 181 fscanf(fd, "S64 = %lld\n", &data); 182 if(data != 55) { 183 printf("ERROR: Data in file is not as expected. Value: %lld. Should be: 55.\n", data); 184 } 185 fscanf(fd, "BOL = %lld\n", &data); 186 if(data != 0) { 187 printf("ERROR: Data in file is not as expected. Value: %lld. Should be: 0.\n", data); 188 } 189 fscanf(fd, "F32 = %g\n", &fpdata); 190 if ( (fpdata <= 3.1) || (fpdata >= 3.2) ) { 191 printf("ERROR: Data in file is not as expected. Value: %g. Should be: 3.14.\n", fpdata); 192 } 193 fscanf(fd, "F64 = %g\n", &fpdata); 194 if ( (fpdata <= 6.2) || ( fpdata >= 6.3) ) { 195 printf("ERROR: Data in file is not as expected. Value: %g. Should be: 6.28.\n", fpdata); 196 } 197 fscanf(fd, "STR = %s\n", str); 198 if ( strcmp(str,"GNIRTS") != 0 ) { 199 printf("ERROR: Data is file is not as expected. Value: %s. Should be: GNIRTS.\n", str); 200 } 178 179 char line[256]; 180 char truth1[] = "S32 = 55"; 181 fgets(line, 256, fd); 182 if(strncmp(line, truth1, 8)) { 183 printf("ERROR: Data in file is not as expected. Value: %s. Should be: %s\n", line, truth1); 184 } 185 186 char truth2[] = "BOL = 0"; 187 fgets(line, 256, fd); 188 if(strncmp(line, truth2, 7)) { 189 printf("ERROR: Data in file is not as expected. Value: %s. Should be: %s\n", line, truth2); 190 } 191 192 char truth3[] = "F32 = 3.14"; 193 fgets(line, 256, fd); 194 if(strncmp(line, truth3, 10)) { 195 printf("ERROR: Data in file is not as expected. Value: %s. Should be: %s\n", line, truth3); 196 } 197 198 char truth4[] = "F64 = 6.28"; 199 fgets(line, 256, fd); 200 if(strncmp(line, truth4, 10)) { 201 printf("ERROR: Data in file is not as expected. Value: %s. Should be: %s\n", line, truth4); 202 } 203 204 char truth5[] = "STR = GNIRTS"; 205 fgets(line, 256, fd); 206 if(strncmp(line, truth5, 12)) { 207 printf("ERROR: Data in file is not as expected. Value: %s. Should be: %s\n", line, truth5); 208 } 209 201 210 fclose(fd); 202 203 // Test G - Attempt to use null metadata with setIterator 204 printNegativeTestHeader(stdout,"psMetadata", "Test G - Attempt to use null metadata with setIterator", 205 "Null metadata collection not allowed", 0); 206 if( psMetadataSetIterator(NULL, 0)) { 207 psError(PS_ERR_UNKNOWN,true,"Set iterator did not detect invalid parameter."); 208 return 101; 209 } 210 tmpList = metadata->list; 211 metadata->list = NULL; 212 if( psMetadataSetIterator(metadata,0)) { 213 psError(PS_ERR_UNKNOWN,true,"Set iterator did not detect null list."); 214 return 102; 215 } 216 metadata->list = tmpList; 217 printFooter(stdout, "psMetadata", "Test G - Attempt to use null metadata with setIterator", true); 218 219 220 // Test H - Attempt to use null metadata with getNext 221 printNegativeTestHeader(stdout,"psMetadata", "Test H - Attempt to use null metadata with getNext", 222 "Null metadata collection not allowed", 0); 223 if( psMetadataGetNext(NULL, "myItem2", 0) != NULL ) { 224 psError(PS_ERR_UNKNOWN, true,"psMetadataGetNext did not return null for null metadata."); 225 return 40; 226 } 227 tmpList = metadata->list; 228 metadata->list = NULL; 229 if ( psMetadataGetNext(metadata, "myItem2", 0) != NULL ) { 230 psError(PS_ERR_UNKNOWN, true,"psMetadataGetNext did not return null for invalid metadata."); 231 return 41; 232 } 233 metadata->list = tmpList; 234 235 printFooter(stdout, "psMetadata", "Test H - Attempt to use null metadata with getNext", true); 236 237 238 // Test I - Attempt to use null metadata with getPrevious 239 printNegativeTestHeader(stdout,"psMetadata", "Test I - Attempt to use null metadata with getPrevious", 240 "Null metadata collection not allowed", 0); 241 psMetadataGetPrevious(NULL, "myItem2", 0); 242 printFooter(stdout, "psMetadata", "Test I - Attempt to use null metadata with getPrevious", true); 243 244 211 printFooter(stdout, "psMetadata", "Test F - Write metadata item to file", true); 212 /* 213 // Test G - Attempt to use null metadata with setIterator 214 printNegativeTestHeader(stdout,"psMetadata", "Test G - Attempt to use null metadata with setIterator", 215 "Null metadata collection not allowed", 0); 216 if( psMetadataSetIterator(NULL, 0)) { 217 psError(PS_ERR_UNKNOWN,true,"Set iterator did not detect invalid parameter."); 218 return 101; 219 } 220 tmpList = metadata->list; 221 metadata->list = NULL; 222 if( psMetadataSetIterator(metadata,0)) { 223 psError(PS_ERR_UNKNOWN,true,"Set iterator did not detect null list."); 224 return 102; 225 } 226 metadata->list = tmpList; 227 printFooter(stdout, "psMetadata", "Test G - Attempt to use null metadata with setIterator", true); 228 229 230 // Test H - Attempt to use null metadata with getNext 231 printNegativeTestHeader(stdout,"psMetadata", "Test H - Attempt to use null metadata with getNext", 232 "Null metadata collection not allowed", 0); 233 if( psMetadataGetNext(NULL, "myItem2", 0) != NULL ) { 234 psError(PS_ERR_UNKNOWN, true,"psMetadataGetNext did not return null for null metadata."); 235 return 40; 236 } 237 tmpList = metadata->list; 238 metadata->list = NULL; 239 if ( psMetadataGetNext(metadata, "myItem2", 0) != NULL ) { 240 psError(PS_ERR_UNKNOWN, true,"psMetadataGetNext did not return null for invalid metadata."); 241 return 41; 242 } 243 metadata->list = tmpList; 244 245 printFooter(stdout, "psMetadata", "Test H - Attempt to use null metadata with getNext", true); 246 247 248 // Test I - Attempt to use null metadata with getPrevious 249 printNegativeTestHeader(stdout,"psMetadata", "Test I - Attempt to use null metadata with getPrevious", 250 "Null metadata collection not allowed", 0); 251 psMetadataGetPrevious(NULL, "myItem2", 0); 252 printFooter(stdout, "psMetadata", "Test I - Attempt to use null metadata with getPrevious", true); 253 254 */ 245 255 // Test J - Attempt to use null file with itemPrint 246 256 printNegativeTestHeader(stdout,"psMetadata", "Test J - Attempt to use null file with itemPrint", -
trunk/psLib/test/astronomy/tst_psMetadata_06.c
r2392 r2607 13 13 * @author Ross Harman, MHPCC 14 14 * 15 * @version $Revision: 1. 6$ $Name: not supported by cvs2svn $16 * @date $Date: 2004-1 1-22 20:54:50$15 * @version $Revision: 1.7 $ $Name: not supported by cvs2svn $ 16 * @date $Date: 2004-12-03 23:19:07 $ 17 17 * 18 18 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 24 24 #include <string.h> 25 25 26 static void printMetadataItem(psMetadataItem * item)26 static void printMetadataItem(psMetadataItem *metadataItem) 27 27 { 28 printf("Key Name: %8s ", item->name); 29 printf("Key Type: %2d ", item->type); 28 printf("Key Name: %8s ", metadataItem->name); 29 printf("Key pType: %2d ", metadataItem->pType); 30 printf("Key mdType: %2d ", metadataItem->type); 30 31 31 switch ( item->type) {32 case PS_META_ BOOL:33 printf("Key Value: %1 5d ", item->data.B);32 switch (metadataItem->type) { 33 case PS_META_LIST: 34 printf("Key Value: %17c", ' '); 34 35 break; 35 case PS_META_S32: 36 printf("Key Value: %15d ", item->data.S32); 37 break; 38 case PS_META_F32: 39 printf("Key Value: %15.3f ", item->data.F32); 40 break; 41 case PS_META_F64: 42 printf("Key Value: %15.3f ", item->data.F64); 36 case PS_META_PRIMITIVE: 37 switch(metadataItem->pType) { 38 case PS_TYPE_BOOL: 39 printf("Key Value: %15d ", metadataItem->data.B); 40 break; 41 case PS_TYPE_S32: 42 printf("Key Value: %15d ", metadataItem->data.S32); 43 break; 44 case PS_TYPE_F32: 45 printf("Key Value: %15.3f ", metadataItem->data.F32); 46 break; 47 case PS_TYPE_F64: 48 printf("Key Value: %15.3f ", metadataItem->data.F64); 49 break; 50 default: 51 printf("Bad type: %d ", metadataItem->pType); 52 } 43 53 break; 44 54 case PS_META_STR: 45 printf("Key Value: %15s ", (char*)item->data.V); 46 break; 47 case PS_META_IMG: 48 case PS_META_JPEG: 49 case PS_META_PNG: 50 case PS_META_ASTROM: 51 case PS_META_UNKNOWN: 52 printf("Value: unknown "); 55 printf("Key Value: %15s ", (char*)metadataItem->data.V); 53 56 break; 54 57 default: 55 printf("Bad type: %d ", item->type);58 printf("Bad type: %d ", metadataItem->type); 56 59 } 57 printf("Key Comment: %s\n", item->comment);60 printf("Key Comment: %s\n", metadataItem->comment); 58 61 } 59 62 … … 71 74 // Test A - Allocate metadata and items 72 75 printPositiveTestHeader(stdout, "psMetadata", "Test A - Allocate metadata and items"); 73 item1a = psMetadataItemAlloc("myItem1", PS_ META_BOOL, "I am a boolean", true);74 item1b = psMetadataItemAlloc("myItem1", PS_ META_S32, "I am a signed integer", 111);75 item1c = psMetadataItemAlloc("myItem1", PS_ META_S32, "I am a signed integer", 222);76 item2a = psMetadataItemAlloc("myItem2", PS_ META_S32, "I am a signed integer", 333);77 item2b = psMetadataItemAlloc("myItem2", PS_ META_ITEM_SET, "I am a folder node", NULL);76 item1a = psMetadataItemAlloc("myItem1", PS_TYPE_BOOL, PS_META_PRIMITIVE, "I am a boolean", true); 77 item1b = psMetadataItemAlloc("myItem1", PS_TYPE_S32, PS_META_PRIMITIVE, "I am a signed integer", 111); 78 item1c = psMetadataItemAlloc("myItem1", PS_TYPE_S32, PS_META_PRIMITIVE, "I am a signed integer", 222); 79 item2a = psMetadataItemAlloc("myItem2", PS_TYPE_S32, PS_META_PRIMITIVE, "I am a signed integer", 333); 80 item2b = psMetadataItemAlloc("myItem2", PS_TYPE_PTR, PS_META_LIST, "I am a folder node", NULL); 78 81 metadata = psMetadataAlloc(); 79 82 printMetadataItem(item1a); … … 87 90 // Test B - Add leaf node on top of existing leaf node 88 91 printPositiveTestHeader(stdout, "psMetadata", "Test B - Add leaf node on top of existing leaf node"); 89 if( ! psMetadataAddItem(metadata, item1a, PS_LIST_HEAD)) {92 if(!psMetadataAddItem(metadata, item1a, PS_LIST_HEAD)) { 90 93 psError(PS_ERR_UNKNOWN, true,"psMetadataAddItem returned false for adding a node top."); 91 94 return 20; 92 95 } 93 if ( ! psMetadataAddItem(metadata, item1b, PS_LIST_HEAD)) {96 if (!psMetadataAddItem(metadata, item1b, PS_LIST_HEAD)) { 94 97 psError(PS_ERR_UNKNOWN, true,"psMetadataAddItem returned false for adding a node top."); 95 98 return 21; … … 101 104 // Test C - Add leaf node to existing folder node 102 105 printPositiveTestHeader(stdout, "psMetadata", "Test C - Add leaf node to existing folder node"); 103 if ( ! psMetadataAddItem(metadata, item1c, PS_LIST_HEAD)) {106 if (!psMetadataAddItem(metadata, item1c, PS_LIST_HEAD)) { 104 107 psError(PS_ERR_UNKNOWN, true,"psMetadataAddItem return false for adding a not to existing node."); 105 108 return 22; … … 110 113 // Test D - Add folder node on top of existing leaf node 111 114 printPositiveTestHeader(stdout, "psMetadata", "Test D - Add folder node on top of existing leaf node"); 112 if ( ! psMetadataAddItem(metadata, item2a, PS_LIST_HEAD)) {115 if (!psMetadataAddItem(metadata, item2a, PS_LIST_HEAD)) { 113 116 psError(PS_ERR_UNKNOWN, true,"psMetadataAddItem returned false for adding a node to existing leaf node."); 114 117 return 23; 115 118 } 116 if ( ! psMetadataAddItem(metadata, item2b, PS_LIST_HEAD)) {119 if (!psMetadataAddItem(metadata, item2b, PS_LIST_HEAD)) { 117 120 psError(PS_ERR_UNKNOWN, true,"psMetadataAddItem returned false for adding a nod to existing leaf node."); 118 121 return 24; -
trunk/psLib/test/collections/tst_psMetadataIO.c
r2392 r2607 13 13 * @author Ross Harman, MHPCC 14 14 * 15 * @version $Revision: 1. 4$ $Name: not supported by cvs2svn $16 * @date $Date: 2004-1 1-22 20:53:39$15 * @version $Revision: 1.5 $ $Name: not supported by cvs2svn $ 16 * @date $Date: 2004-12-03 23:19:07 $ 17 17 * 18 18 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 25 25 26 26 static void printMetadataItem(psMetadataItem *metadataItem, char *spaces); 27 static void printMetadata(psMetadata *metadata); 28 static void printMetadataList(psList *metadataItemList, char* spaces); 29 static void printMetadataTable(psHash *mdTable); 27 30 28 static void printMetadataItemList(psList *metadataItemList) 31 static void printMetadata(psMetadata *metadata) 32 { 33 printf("Contents of metadata list:\n"); 34 printMetadataList(metadata->list, " "); 35 printf("\nContents of metadata table:\n"); 36 printMetadataTable(metadata->table); 37 } 38 39 static void printMetadataList(psList *metadataItemList, char* spaces) 29 40 { 30 41 psMetadataItem *entryChild = NULL; … … 33 44 entryChild = psListGetCurrent(metadataItemList); 34 45 while (entryChild != NULL) { 35 printMetadataItem(entryChild, " ");46 printMetadataItem(entryChild, spaces); 36 47 entryChild = psListGetNext(metadataItemList); 37 }38 }39 40 static void printMetadataList(psList *metadataItemList)41 {42 psMetadataItem *entryChild = NULL;43 44 psListSetIterator(metadataItemList, PS_LIST_HEAD);45 entryChild = psListGetCurrent(metadataItemList);46 while (entryChild != NULL) {47 printMetadataItem(entryChild, " ");48 entryChild = psListGetNext(metadataItemList);49 }50 }51 static void printMetadataItem(psMetadataItem *metadataItem, char *spaces)52 {53 54 psVector *vec = NULL;55 56 57 printf("%sKey Name: %8s ", spaces, metadataItem->name);58 printf("Key Type: %2d ", metadataItem->type);59 60 switch (metadataItem->type ) {61 case PS_META_ITEM_SET:62 printf("Key Value: %17c", ' ');63 break;64 case PS_META_BOOL:65 printf("Key Value: %15d ", metadataItem->data.B);66 break;67 case PS_META_S32:68 printf("Key Value: %15d ", metadataItem->data.S32);69 break;70 case PS_META_F32:71 printf("Key Value: %15.3f ", metadataItem->data.F32);72 break;73 case PS_META_F64:74 printf("Key Value: %15.3f ", metadataItem->data.F64);75 break;76 case PS_META_STR:77 printf("Key Value: %15s ", (char*)metadataItem->data.V);78 break;79 case PS_META_VEC:80 vec = (psVector*)metadataItem->data.V;81 printf("Key Value: ");82 for(psS32 i=0; i<vec->nalloc;i++) {83 printf("%d ", vec->data.S32[i]);84 }85 break;86 case PS_META_IMG:87 case PS_META_JPEG:88 case PS_META_PNG:89 case PS_META_ASTROM:90 case PS_META_UNKNOWN:91 printf("Value: unknown ");92 break;93 default:94 printf("Bad type: %d ", metadataItem->type);95 }96 printf("Key Comment: %s\n", metadataItem->comment);97 98 if(metadataItem->items->size) {99 printMetadataItemList(metadataItem->items);100 48 } 101 49 } … … 114 62 } 115 63 116 static void printMetadata (psMetadata *metadata)64 static void printMetadataItem(psMetadataItem *metadataItem, char *spaces) 117 65 { 118 printf("\nContents of metadata list:\n"); 119 printMetadataList(metadata->list); 120 printf("\nContents of metadata table:\n"); 121 printMetadataTable(metadata->table); 66 printf("%sKey Name: %8s ", spaces, metadataItem->name); 67 printf("Key pType: %d ", metadataItem->pType); 68 printf("Key mdType: %d ", metadataItem->type); 69 70 switch (metadataItem->type) { 71 case PS_META_LIST: 72 printf("Key Value: %17c", ' '); 73 break; 74 case PS_META_PRIMITIVE: 75 switch(metadataItem->pType) { 76 case PS_TYPE_BOOL: 77 printf("Key Value: %15d ", metadataItem->data.B); 78 break; 79 case PS_TYPE_S32: 80 printf("Key Value: %15d ", metadataItem->data.S32); 81 break; 82 case PS_TYPE_F32: 83 printf("Key Value: %15.3f ", metadataItem->data.F32); 84 break; 85 case PS_TYPE_F64: 86 printf("Key Value: %15.3f ", metadataItem->data.F64); 87 break; 88 default: 89 printf("Bad type: %d ", metadataItem->pType); 90 } 91 break; 92 case PS_META_STR: 93 printf("Key Value: %15s ", (char*)metadataItem->data.V); 94 break; 95 default: 96 printf("Bad type: %d ", metadataItem->type); 97 } 98 printf("Key Comment: %s\n", metadataItem->comment); 99 100 if(metadataItem->data.V && metadataItem->type==PS_META_LIST) { 101 printMetadataList(metadataItem->data.V, " "); 102 } 122 103 } 123 104 … … 128 109 printPositiveTestHeader(stdout, "psMetadata", "Test A - Read config file with overwrite set true"); 129 110 psMetadata *metadata1 = NULL; 130 ps S32 failedLines1 = 0;131 failedLines1 = psMetadataParseConfig(&metadata1, "test.config", true);111 psU32 failedLines1 = 0; 112 metadata1 = psMetadataParseConfig(metadata1, &failedLines1, "test.config", true); 132 113 printf("Failed lines: %d Expected: 6\n", failedLines1); 133 114 printMetadata(metadata1); … … 139 120 psMetadata *metadata2 = NULL; 140 121 psS32 failedLines2 = 0; 141 failedLines2 = psMetadataParseConfig(&metadata2, "test.config", false);142 printf("Failed lines: %d Expected: 7 ", failedLines2);122 metadata2 = psMetadataParseConfig(metadata2, &failedLines2, "test.config", false); 123 printf("Failed lines: %d Expected: 7 ", failedLines2); 143 124 printMetadata(metadata2); 144 125 printFooter(stdout, "psMetadata", "Test B - Read config file with overwrite set false", true); … … 149 130 psMetadata *metadata3 = psMetadataAlloc(); 150 131 psS32 failedLines3 = 0; 151 failedLines3 = psMetadataParseConfig(&metadata3, "test.config", false);152 printf("Failed lines: %d Expected: 7", failedLines3);132 metadata3 = psMetadataParseConfig(metadata3, &failedLines3, "test.config", true); 133 printf("Failed lines: %d Expected: 6 ", failedLines3); 153 134 printMetadata(metadata3); 154 135 printFooter(stdout, "psMetadata", "Test C - Read config file without auto-allocation of metadata", true); … … 158 139 printNegativeTestHeader(stdout,"psMetadataIO", "Test D - Attempt to use null fileName argument", 159 140 "Null failedLines not allowed", 0); 160 psMetadataParseConfig( &metadata1, NULL, true);141 psMetadataParseConfig(metadata1, &failedLines1, NULL, true); 161 142 printFooter(stdout, "psMetadata", "Test D - Attempt to use null fileName argument", true); 162 143 … … 165 146 printNegativeTestHeader(stdout,"psMetadataIO", "Test E - Attempt to open nonexistant file", 166 147 "Error opening file", 0); 167 psMetadataParseConfig( &metadata1, "abcedfg", true);148 psMetadataParseConfig(metadata1, &failedLines1, "abcedfg", true); 168 149 printFooter(stdout, "psMetadata", "Test E - Attempt to open nonexistant file", true); 169 150 -
trunk/psLib/test/collections/tst_psMetadata_01.c
r2392 r2607 13 13 * Test H - Attempt to use bad extNum 14 14 * Test I - Attempt to use bad extNameTest 15 * Test J - Free psMetadataData 15 * Test J - Read named hdr w/ invalid extnum 16 * Test K - Free psMetadata 16 17 * 17 18 * @author Ross Harman, MHPCC 18 19 * 19 * @version $Revision: 1.1 5$ $Name: not supported by cvs2svn $20 * @date $Date: 2004-1 1-22 20:54:50$20 * @version $Revision: 1.16 $ $Name: not supported by cvs2svn $ 21 * @date $Date: 2004-12-03 23:19:07 $ 21 22 * 22 23 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 29 30 30 31 static void printMetadataItem(psMetadataItem *metadataItem, char *spaces); 31 32 static void printMetadataItemList(psList *metadataItemList) 32 static void printMetadata(psMetadata *metadata); 33 static void printMetadataList(psList *metadataItemList, char* spaces); 34 static void printMetadataTable(psHash *mdTable); 35 36 static void printMetadata(psMetadata *metadata) 37 { 38 printf("Contents of metadata list:\n"); 39 printMetadataList(metadata->list, " "); 40 printf("\nContents of metadata table:\n"); 41 printMetadataTable(metadata->table); 42 } 43 44 static void printMetadataList(psList *metadataItemList, char* spaces) 33 45 { 34 46 psMetadataItem *entryChild = NULL; … … 37 49 entryChild = psListGetCurrent(metadataItemList); 38 50 while (entryChild != NULL) { 39 printMetadataItem(entryChild, " ");51 printMetadataItem(entryChild, spaces); 40 52 entryChild = psListGetNext(metadataItemList); 41 }42 }43 44 static void printMetadataList(psList *metadataItemList)45 {46 psMetadataItem *entryChild = NULL;47 48 psListSetIterator(metadataItemList, PS_LIST_HEAD);49 entryChild = psListGetCurrent(metadataItemList);50 while (entryChild != NULL) {51 printMetadataItem(entryChild, " ");52 entryChild = psListGetNext(metadataItemList);53 }54 }55 static void printMetadataItem(psMetadataItem *metadataItem, char *spaces)56 {57 printf("%sKey Name: %8s ", spaces, metadataItem->name);58 printf("Key Type: %2d ", metadataItem->type);59 60 switch (metadataItem->type ) {61 case PS_META_ITEM_SET:62 printf("Key Value: %17c", ' ');63 break;64 case PS_META_BOOL:65 printf("Key Value: %15d ", metadataItem->data.B);66 break;67 case PS_META_S32:68 printf("Key Value: %15d ", metadataItem->data.S32);69 break;70 case PS_META_F32:71 printf("Key Value: %15.3f ", metadataItem->data.F32);72 break;73 case PS_META_F64:74 printf("Key Value: %15.3f ", metadataItem->data.F64);75 break;76 case PS_META_STR:77 printf("Key Value: %15s ", (char*)metadataItem->data.V);78 break;79 case PS_META_IMG:80 case PS_META_JPEG:81 case PS_META_PNG:82 case PS_META_ASTROM:83 case PS_META_UNKNOWN:84 printf("Value: unknown ");85 break;86 default:87 printf("Bad type: %d ", metadataItem->type);88 }89 printf("Key Comment: %s\n", metadataItem->comment);90 91 if(metadataItem->items->size) {92 printMetadataItemList(metadataItem->items);93 53 } 94 54 } … … 107 67 } 108 68 109 static void printMetadata(psMetadata *metadata) 110 { 111 printf("Contents of metadata list:\n"); 112 printMetadataList(metadata->list); 113 printf("\nContents of metadata table:\n"); 114 printMetadataTable(metadata->table); 69 static void printMetadataItem(psMetadataItem *metadataItem, char *spaces) 70 { 71 printf("%sKey Name: %8s ", spaces, metadataItem->name); 72 printf("Key pType: %d ", metadataItem->pType); 73 printf("Key mdType: %d ", metadataItem->type); 74 75 switch (metadataItem->type) { 76 case PS_META_LIST: 77 printf("Key Value: %17c", ' '); 78 break; 79 case PS_META_PRIMITIVE: 80 switch(metadataItem->pType) { 81 case PS_TYPE_BOOL: 82 printf("Key Value: %15d ", metadataItem->data.B); 83 break; 84 case PS_TYPE_S32: 85 printf("Key Value: %15d ", metadataItem->data.S32); 86 break; 87 case PS_TYPE_F32: 88 printf("Key Value: %15.3f ", metadataItem->data.F32); 89 break; 90 case PS_TYPE_F64: 91 printf("Key Value: %15.3f ", metadataItem->data.F64); 92 break; 93 default: 94 printf("Bad type: %d ", metadataItem->pType); 95 } 96 break; 97 case PS_META_STR: 98 printf("Key Value: %15s ", (char*)metadataItem->data.V); 99 break; 100 default: 101 printf("Bad type: %d ", metadataItem->type); 102 } 103 printf("Key Comment: %s\n", metadataItem->comment); 104 105 if(metadataItem->data.V && metadataItem->type==PS_META_LIST) { 106 printMetadataList(metadataItem->data.V, " "); 107 } 115 108 } 116 109 … … 244 237 245 238 246 // Test I1 - Attempt to use a valid named extension withinvalid extnum247 printNegativeTestHeader(stdout, "psMetadata", "Test I1- Read named hdr w/ invalid extnum",239 // Test J - Read named hdr w/ invalid extnum 240 printNegativeTestHeader(stdout, "psMetadata", "Test J - Read named hdr w/ invalid extnum", 248 241 "If extName specified, extNum should be -1.", 0); 249 metadata1 = psMetadataReadHeader(NULL, "MY_DATA_2", 0, "header_2.fits");242 metadata1 = psMetadataReadHeader(NULL, NULL, 0, "header_2.fits"); 250 243 if (metadata1 != NULL ) { 251 244 psError(PS_ERR_UNKNOWN, true,"psMetadataReadHeader did not return null w/ valid extname, invalid extnum"); 252 245 return 12; 253 246 } 254 printFooter(stdout, "psMetadata", "Test C - Read named hdr from complex FITS file", true);255 256 257 // Test J- Free psMetadata258 printPositiveTestHeader(stdout, "psMetadata", "Test J- Free psMetadata");247 printFooter(stdout, "psMetadata", "Test J - Read named hdr w/ invalid extnum", true); 248 249 250 // Test K - Free psMetadata 251 printPositiveTestHeader(stdout, "psMetadata", "Test K - Free psMetadata"); 259 252 psFree(metadata1); 260 253 psFree(metadata2); … … 262 255 if(psMemCheckLeaks(0, NULL, stdout,false)) { 263 256 psError(PS_ERR_UNKNOWN,true,"Memory leaks detected."); 264 return 10;265 257 } 266 258 psMemCheckCorruption(0); … … 269 261 printf("ERROR: Found %d bad memory blocks\n", nBad); 270 262 } 271 printFooter(stdout, "psMetadata", "Test J- Free psMetadata", true);263 printFooter(stdout, "psMetadata", "Test K - Free psMetadata", true); 272 264 273 265 return 0; -
trunk/psLib/test/collections/tst_psMetadata_02.c
r2392 r2607 14 14 * @author Ross Harman, MHPCC 15 15 * 16 * @version $Revision: 1. 8$ $Name: not supported by cvs2svn $17 * @date $Date: 2004-1 1-22 20:54:50$16 * @version $Revision: 1.9 $ $Name: not supported by cvs2svn $ 17 * @date $Date: 2004-12-03 23:19:07 $ 18 18 * 19 19 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 25 25 #include <string.h> 26 26 27 static void printMetadataItem(psMetadataItem * item)27 static void printMetadataItem(psMetadataItem *metadataItem) 28 28 { 29 printf("Key Name: %8s ", item->name); 30 printf("Key Type: %2d ", item->type); 29 printf("Key Name: %8s ", metadataItem->name); 30 printf("Key pType: %2d ", metadataItem->pType); 31 printf("Key mdType: %2d ", metadataItem->type); 31 32 32 switch ( item->type) {33 case PS_META_ BOOL:34 printf("Key Value: %1 5d ", item->data.B);33 switch (metadataItem->type) { 34 case PS_META_LIST: 35 printf("Key Value: %17c", ' '); 35 36 break; 36 case PS_META_S32: 37 printf("Key Value: %15d ", item->data.S32); 38 break; 39 case PS_META_F32: 40 printf("Key Value: %15.3f ", item->data.F32); 41 break; 42 case PS_META_F64: 43 printf("Key Value: %15.3f ", item->data.F64); 37 case PS_META_PRIMITIVE: 38 switch(metadataItem->pType) { 39 case PS_TYPE_BOOL: 40 printf("Key Value: %15d ", metadataItem->data.B); 41 break; 42 case PS_TYPE_S32: 43 printf("Key Value: %15d ", metadataItem->data.S32); 44 break; 45 case PS_TYPE_F32: 46 printf("Key Value: %15.3f ", metadataItem->data.F32); 47 break; 48 case PS_TYPE_F64: 49 printf("Key Value: %15.3f ", metadataItem->data.F64); 50 break; 51 default: 52 printf("Bad type: %d ", metadataItem->pType); 53 } 44 54 break; 45 55 case PS_META_STR: 46 printf("Key Value: %15s ", (char*)item->data.V); 47 break; 48 case PS_META_IMG: 49 case PS_META_JPEG: 50 case PS_META_PNG: 51 case PS_META_ASTROM: 52 case PS_META_UNKNOWN: 53 printf("Value: unknown "); 56 printf("Key Value: %15s ", (char*)metadataItem->data.V); 54 57 break; 55 58 default: 56 printf("Bad type: %d ", item->type);59 printf("Bad type: %d ", metadataItem->type); 57 60 } 58 printf("Key Comment: %s\n", item->comment);61 printf("Key Comment: %s\n", metadataItem->comment); 59 62 } 60 63 … … 73 76 // Test A - Allocate metadata items 74 77 printPositiveTestHeader(stdout, "psMetadata", "Test A - Allocate metadata items"); 75 item1 = psMetadataItemAlloc("myItem1", PS_ META_BOOL, "I am a boolean", true);76 item2 = psMetadataItemAlloc("myItem2", PS_ META_S32, "I am a signed integer", 111);77 item3 = psMetadataItemAlloc("myItem3", PS_ META_F32, "I am a single precision floating point", 222.222);78 item4 = psMetadataItemAlloc("myItem4", PS_ META_F64, "I am a double precision floating point", 333.333);79 item5 = psMetadataItemAlloc("myItem5", PS_ META_STR, "I am a string", "HELLO WORLD");78 item1 = psMetadataItemAlloc("myItem1", PS_TYPE_BOOL, PS_META_PRIMITIVE, "I am a boolean", true); 79 item2 = psMetadataItemAlloc("myItem2", PS_TYPE_S32, PS_META_PRIMITIVE, "I am a signed integer", 111); 80 item3 = psMetadataItemAlloc("myItem3", PS_TYPE_F32, PS_META_PRIMITIVE, "I am a single precision floating point", 222.222); 81 item4 = psMetadataItemAlloc("myItem4", PS_TYPE_F64, PS_META_PRIMITIVE, "I am a double precision floating point", 333.333); 82 item5 = psMetadataItemAlloc("myItem5", PS_TYPE_PTR, PS_META_STR, "I am a string", "HELLO WORLD"); 80 83 printMetadataItem(item1); 81 84 printMetadataItem(item2); … … 90 93 "Null value for name not allowed", 0); 91 94 psLogMsg(__func__,PS_LOG_INFO,"Following should produce error for null name."); 92 badItem = psMetadataItemAlloc(NULL, PS_ META_STR, "I am a string", "HELLO WORLD");95 badItem = psMetadataItemAlloc(NULL, PS_TYPE_PTR, PS_META_STR, "I am a string", "HELLO WORLD"); 93 96 if (badItem != NULL) { 94 97 psError(PS_ERR_UNKNOWN, true,"psMetadataItemAlloc did not return null with null name item."); … … 101 104 printNegativeTestHeader(stdout,"psMetadata", "Test C - Attempt to create metadata item with invalid type", 102 105 "Invalid psMetadataType: 6", 0); 103 badItem = psMetadataItemAlloc("badItem", PS_ META_IMG, "I am bad", "Bad comment");106 badItem = psMetadataItemAlloc("badItem", PS_TYPE_PTR, PS_META_NTYPE, "I am bad", "Bad comment"); 104 107 printFooter(stdout, "psMetadata", "Test C - Attempt to create metadata item with invalid type", true); 105 108 -
trunk/psLib/test/collections/tst_psMetadata_03.c
r2392 r2607 10 10 * Test E - Attempt to remove non-existant metadata item by name 11 11 * Test F - Attempt to remove non-existant metadata item by index 12 * Test G - Free psMetadata 13 * 12 * Test G - Attempt to add item to an invalid metadata structure 13 * Test H - Attempt to add item to an invalid metadata structure 14 * Test I - Attempt to add item with a null name 15 * Test J - Attempt to add item to an invalid metadata structure 16 * Test K - Free psMetadata 17 * 14 18 * @author Ross Harman, MHPCC 15 19 * 16 * @version $Revision: 1.1 0$ $Name: not supported by cvs2svn $17 * @date $Date: 2004-1 1-22 20:54:50$20 * @version $Revision: 1.11 $ $Name: not supported by cvs2svn $ 21 * @date $Date: 2004-12-03 23:19:07 $ 18 22 * 19 23 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 25 29 #include <string.h> 26 30 27 static void printMetadataItem(psMetadataItem * item)31 static void printMetadataItem(psMetadataItem *metadataItem) 28 32 { 29 printf("Key Name: %8s ", item->name); 30 printf("Key Type: %2d ", item->type); 31 32 switch (item->type ) { 33 case PS_META_BOOL: 34 printf("Key Value: %15d ", item->data.B); 33 printf("Key Name: %8s ", metadataItem->name); 34 printf("Key pType: %2d ", metadataItem->pType); 35 printf("Key mdType: %2d ", metadataItem->type); 36 37 switch (metadataItem->type) { 38 case PS_META_LIST: 39 printf("Key Value: %17c", ' '); 35 40 break; 36 case PS_META_S32: 37 printf("Key Value: %15d ", item->data.S32); 38 break; 39 case PS_META_F32: 40 printf("Key Value: %15.3f ", item->data.F32); 41 break; 42 case PS_META_F64: 43 printf("Key Value: %15.3f ", item->data.F64); 41 case PS_META_PRIMITIVE: 42 switch(metadataItem->pType) { 43 case PS_TYPE_BOOL: 44 printf("Key Value: %15d ", metadataItem->data.B); 45 break; 46 case PS_TYPE_S32: 47 printf("Key Value: %15d ", metadataItem->data.S32); 48 break; 49 case PS_TYPE_F32: 50 printf("Key Value: %15.3f ", metadataItem->data.F32); 51 break; 52 case PS_TYPE_F64: 53 printf("Key Value: %15.3f ", metadataItem->data.F64); 54 break; 55 default: 56 printf("Bad type: %d ", metadataItem->pType); 57 } 44 58 break; 45 59 case PS_META_STR: 46 printf("Key Value: %15s ", (char*)item->data.V); 47 break; 48 case PS_META_IMG: 49 case PS_META_JPEG: 50 case PS_META_PNG: 51 case PS_META_ASTROM: 52 case PS_META_UNKNOWN: 53 printf("Value: unknown "); 60 printf("Key Value: %15s ", (char*)metadataItem->data.V); 54 61 break; 55 62 default: 56 printf("Bad type: %d ", item->type);57 } 58 printf("Key Comment: %s\n", item->comment);63 printf("Bad type: %d ", metadataItem->type); 64 } 65 printf("Key Comment: %s\n", metadataItem->comment); 59 66 } 60 67 … … 76 83 printPositiveTestHeader(stdout, "psMetadata", "Test A - Allocate metadata items"); 77 84 metadata = psMetadataAlloc(); 78 item1 = psMetadataItemAlloc("myItem1", PS_ META_BOOL, "I am a boolean", true);79 item2 = psMetadataItemAlloc("myItem2", PS_ META_S32, "I am a integer", 55);80 item3 = psMetadataItemAlloc("myItem3", PS_ META_BOOL, "I am a boolean", false);81 item4 = psMetadataItemAlloc("myItem4", PS_ META_S32, "I am a integer", 66);82 errItem = psMetadataItemAlloc("errItem", PS_ META_S32, "I am a integer", 99);85 item1 = psMetadataItemAlloc("myItem1", PS_TYPE_BOOL, PS_META_PRIMITIVE, "I am a boolean", true); 86 item2 = psMetadataItemAlloc("myItem2", PS_TYPE_S32, PS_META_PRIMITIVE, "I am a integer", 55); 87 item3 = psMetadataItemAlloc("myItem3", PS_TYPE_BOOL, PS_META_PRIMITIVE, "I am a boolean", false); 88 item4 = psMetadataItemAlloc("myItem4", PS_TYPE_S32, PS_META_PRIMITIVE, "I am a integer", 66); 89 errItem = psMetadataItemAlloc("errItem", PS_TYPE_S32, PS_META_PRIMITIVE, "I am a integer", 99); 83 90 printMetadataItem(item1); 84 91 printMetadataItem(item2); … … 90 97 // Test B - Remove items from metadata by name 91 98 printPositiveTestHeader(stdout, "psMetadata", "Test B - Remove items from metadata by name"); 92 if( ! psMetadataAddItem(metadata, item1, PS_LIST_HEAD)) {99 if(!psMetadataAddItem(metadata, item1, PS_LIST_HEAD)) { 93 100 psError(PS_ERR_UNKNOWN, true,"psMetadataAddItem did not return true when adding by name."); 94 101 return 10; 95 102 } 96 if( ! psMetadataAdd(metadata,PS_LIST_HEAD,"myItem2",PS_META_S32,"I am S32 integer",77)) {103 if(!psMetadataAdd(metadata,PS_LIST_HEAD,"myItem2", PS_TYPE_S32, PS_META_PRIMITIVE, "I am S32 integer",77)) { 97 104 psError(PS_ERR_UNKNOWN, true,"psMetadataAddItem did not return true when adding by name."); 98 105 return 11; 99 106 } 100 if ( ! psMetadataRemove(metadata, 0, "myItem1" )) {107 if (!psMetadataRemove(metadata, 0, "myItem1")) { 101 108 psError(PS_ERR_UNKNOWN, true,"psMetadataRemove did not return true when removing by name."); 102 109 return 12; 103 110 } 104 if ( ! psMetadataRemove(metadata, 0, "myItem2" )) {111 if (!psMetadataRemove(metadata, 0, "myItem2")) { 105 112 psError(PS_ERR_UNKNOWN, true,"psMetadataRemove did not return true when removing by name."); 106 113 return 13; … … 115 122 return 14; 116 123 } 117 if ( ! psMetadataAdd(metadata,PS_LIST_HEAD,"myItem4", PS_META_S32,"I am S32 integer",88) ) {124 if ( ! psMetadataAdd(metadata,PS_LIST_HEAD,"myItem4", PS_TYPE_S32, PS_META_PRIMITIVE, "I am S32 integer",88) ) { 118 125 psError(PS_ERR_UNKNOWN, true,"psMetadataAddItem did not return true when adding by index."); 119 126 return 15; … … 160 167 161 168 162 // Test H- Attempt to add item to an invalid metadata structure163 printNegativeTestHeader(stdout,"psMetadata","Test H- Attempt to add item to metadata w/o hash table",169 // Test G - Attempt to add item to an invalid metadata structure 170 printNegativeTestHeader(stdout,"psMetadata","Test G - Attempt to add item to metadata w/o hash table", 164 171 "Couldn't add item to invalid metadata structure.",0); 165 172 errMetadata = psMetadataAlloc(); … … 175 182 } 176 183 errMetadata->table = mdTable; 177 printFooter(stdout,"psMetadata","Test H- Attempt to add item to invalid metadata w/o hash table", true);178 179 // Test J- Attempt to add item to an invalid metadata structure180 printNegativeTestHeader(stdout,"psMetadata","Test J- Attempt to add item to metadata w/o link list",184 printFooter(stdout,"psMetadata","Test G - Attempt to add item to invalid metadata w/o hash table", true); 185 186 // Test H - Attempt to add item to an invalid metadata structure 187 printNegativeTestHeader(stdout,"psMetadata","Test H - Attempt to add item to metadata w/o link list", 181 188 "Couldn't add item to invalid metadata structure.",0); 182 189 mdList = errMetadata->list; … … 191 198 } 192 199 errMetadata->list = mdList; 193 printFooter(stdout,"psMetadata","Test J- Attempt to add item to invalid metadata w/o link list", true);194 195 // Test K- Attempt to add item with a null name196 printNegativeTestHeader(stdout,"psMetadata","Test K- Attempt to add item with null name",200 printFooter(stdout,"psMetadata","Test H - Attempt to add item to invalid metadata w/o link list", true); 201 202 // Test I - Attempt to add item with a null name 203 printNegativeTestHeader(stdout,"psMetadata","Test I - Attempt to add item with null name", 197 204 "Couldn't add item with null name.",0); 198 205 errName = errItem->name; … … 203 210 } 204 211 errItem->name = errName; 205 printFooter(stdout,"psMetadata","Test K- Attempt to add item with null name", true);206 207 // Test L- Attempt to add item to an invalid metadata structure208 printNegativeTestHeader(stdout,"psMetadata","Test L- Attempt to add item to metadata w/o hash table",212 printFooter(stdout,"psMetadata","Test I - Attempt to add item with null name", true); 213 214 // Test J - Attempt to add item to an invalid metadata structure 215 printNegativeTestHeader(stdout,"psMetadata","Test J - Attempt to add item to metadata w/o hash table", 209 216 "Couldn't add item to invalid metadata structure.",0); 210 217 mdTable = errMetadata->table; 211 218 errMetadata->table = NULL; 212 if ( psMetadataAdd(errMetadata, PS_LIST_HEAD, "errItem", PS_META_S32,"Integer",22) ) {219 if (psMetadataAdd(errMetadata, PS_LIST_HEAD, "errItem", PS_TYPE_S32, PS_META_PRIMITIVE, "Integer",22) ) { 213 220 psError(PS_ERR_UNKNOWN, true,"psMetadataAddItem did not return false w/ invalid metadata struct w/o hash table."); 214 221 return 24; 215 222 } 216 223 errMetadata->table = mdTable; 217 printFooter(stdout,"psMetadata","Test L- Attempt to add item to invalid metadata w/o hash table", true);218 219 // Test G- Free psMetadata220 printPositiveTestHeader(stdout, "psMetadata", "Test G- Free psMetadata");224 printFooter(stdout,"psMetadata","Test J - Attempt to add item to invalid metadata w/o hash table", true); 225 226 // Test K - Free psMetadata 227 printPositiveTestHeader(stdout, "psMetadata", "Test K - Free psMetadata"); 221 228 psFree(metadata); 222 229 psFree(item1); … … 235 242 printf("ERROR: Found %d bad memory blocks\n", nBad); 236 243 } 237 printFooter(stdout, "psMetadata", "Test G- Free psMetadata", true);244 printFooter(stdout, "psMetadata", "Test K - Free psMetadata", true); 238 245 239 246 -
trunk/psLib/test/collections/tst_psMetadata_04.c
r2392 r2607 13 13 * Test G - Attempt to use null metadata 14 14 * Test H - Attempt to get non-existant metadata item 15 * Test I - Free psMetadata 16 * Test J - Attempt to look up with an invalid metadata object 15 * Test I - Attempt to look up with an invalid metadata object 16 * Test J - Attempt get item with an invalid metadata object 17 * Test K - Free psMetadata 17 18 * 18 19 * @author Ross Harman, MHPCC 19 20 * 20 * @version $Revision: 1. 8$ $Name: not supported by cvs2svn $21 * @date $Date: 2004-1 1-22 20:54:50$21 * @version $Revision: 1.9 $ $Name: not supported by cvs2svn $ 22 * @date $Date: 2004-12-03 23:19:07 $ 22 23 * 23 24 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 29 30 #include <string.h> 30 31 31 static void printMetadataItem(psMetadataItem * item)32 static void printMetadataItem(psMetadataItem *metadataItem) 32 33 { 33 printf("Key Name: %8s ", item->name); 34 printf("Key Type: %2d ", item->type); 35 36 switch (item->type ) { 37 case PS_META_BOOL: 38 printf("Key Value: %15d ", item->data.B); 34 printf("Key Name: %8s ", metadataItem->name); 35 printf("Key pType: %2d ", metadataItem->pType); 36 printf("Key mdType: %2d ", metadataItem->type); 37 38 switch (metadataItem->type) { 39 case PS_META_LIST: 40 printf("Key Value: %17c", ' '); 39 41 break; 40 case PS_META_S32: 41 printf("Key Value: %15d ", item->data.S32); 42 break; 43 case PS_META_F32: 44 printf("Key Value: %15.3f ", item->data.F32); 45 break; 46 case PS_META_F64: 47 printf("Key Value: %15.3f ", item->data.F64); 42 case PS_META_PRIMITIVE: 43 switch(metadataItem->pType) { 44 case PS_TYPE_BOOL: 45 printf("Key Value: %15d ", metadataItem->data.B); 46 break; 47 case PS_TYPE_S32: 48 printf("Key Value: %15d ", metadataItem->data.S32); 49 break; 50 case PS_TYPE_F32: 51 printf("Key Value: %15.3f ", metadataItem->data.F32); 52 break; 53 case PS_TYPE_F64: 54 printf("Key Value: %15.3f ", metadataItem->data.F64); 55 break; 56 default: 57 printf("Bad type: %d ", metadataItem->pType); 58 } 48 59 break; 49 60 case PS_META_STR: 50 printf("Key Value: %15s ", (char*)item->data.V); 51 break; 52 case PS_META_IMG: 53 case PS_META_JPEG: 54 case PS_META_PNG: 55 case PS_META_ASTROM: 56 case PS_META_UNKNOWN: 57 printf("Value: unknown "); 61 printf("Key Value: %15s ", (char*)metadataItem->data.V); 58 62 break; 59 63 default: 60 printf("Bad type: %d ", item->type);61 } 62 printf("Key Comment: %s\n", item->comment);64 printf("Bad type: %d ", metadataItem->type); 65 } 66 printf("Key Comment: %s\n", metadataItem->comment); 63 67 } 64 68 … … 75 79 psList* tmpList = NULL; 76 80 81 77 82 // Test A - Allocate metadata and items 78 83 printPositiveTestHeader(stdout, "psMetadata", "Test A - Allocate metadata items"); 79 84 metadata = psMetadataAlloc(); 80 item1 = psMetadataItemAlloc("myItem1", PS_ META_BOOL, "I am a boolean", true);81 item2 = psMetadataItemAlloc("myItem2", PS_ META_S32, "I am a integer", 55);82 item3 = psMetadataItemAlloc("myItem3", PS_ META_BOOL, "I am a boolean", false);83 item4 = psMetadataItemAlloc("myItem4", PS_ META_S32, "I am a integer", 66);85 item1 = psMetadataItemAlloc("myItem1", PS_TYPE_BOOL, PS_META_PRIMITIVE, "I am a boolean", true); 86 item2 = psMetadataItemAlloc("myItem2", PS_TYPE_S32, PS_META_PRIMITIVE, "I am a integer", 55); 87 item3 = psMetadataItemAlloc("myItem3", PS_TYPE_BOOL, PS_META_PRIMITIVE, "I am a boolean", false); 88 item4 = psMetadataItemAlloc("myItem4", PS_TYPE_S32, PS_META_PRIMITIVE, "I am a integer", 66); 84 89 printMetadataItem(item1); 85 90 printMetadataItem(item2); … … 165 170 printFooter(stdout, "psMetadata", "Test H - Attempt to get non-existant metadata item", true); 166 171 167 // Test J- Attempt to look up with an invalid metadata object168 printNegativeTestHeader(stdout,"psMetadata","Test J- Attemp to look up with an invalid metadata",172 // Test I - Attempt to look up with an invalid metadata object 173 printNegativeTestHeader(stdout,"psMetadata","Test I - Attemp to look up with an invalid metadata", 169 174 "Lookup item with invalid metadata object.", 0 ); 170 175 tmpTable = metadata->table; … … 175 180 } 176 181 metadata->table = tmpTable; 177 printFooter(stdout, "psMetadata","Test J- Attempt to lookup an invalid metadata object.",true);178 179 // Test K- Attempt get item with an invalid metadata object180 printNegativeTestHeader(stdout,"psMetadata","Test K- Attemp to get item with an invalid metadata",182 printFooter(stdout, "psMetadata","Test I - Attempt to lookup an invalid metadata object.",true); 183 184 // Test J - Attempt get item with an invalid metadata object 185 printNegativeTestHeader(stdout,"psMetadata","Test J - Attemp to get item with an invalid metadata", 181 186 "Get item with invalid metadata object.", 0 ); 182 187 tmpList = metadata->list; … … 187 192 } 188 193 metadata->list = tmpList; 189 printFooter(stdout, "psMetadata","Test K- Attempt to get item with invalid metadata object.",true);190 191 // Test I- Free psMetadata192 printPositiveTestHeader(stdout, "psMetadata", "Test I- Free psMetadata");194 printFooter(stdout, "psMetadata","Test J - Attempt to get item with invalid metadata object.",true); 195 196 // Test K - Free psMetadata 197 printPositiveTestHeader(stdout, "psMetadata", "Test K - Free psMetadata"); 193 198 psFree(metadata); 194 199 psFree(item1); … … 206 211 return 21; 207 212 } 208 printFooter(stdout, "psMetadata", "Test I- Free psMetadata", true);213 printFooter(stdout, "psMetadata", "Test K - Free psMetadata", true); 209 214 210 215 -
trunk/psLib/test/collections/tst_psMetadata_05.c
r2527 r2607 22 22 * @author Ross Harman, MHPCC 23 23 * 24 * @version $Revision: 1.1 2$ $Name: not supported by cvs2svn $25 * @date $Date: 2004-1 1-30 01:16:43$24 * @version $Revision: 1.13 $ $Name: not supported by cvs2svn $ 25 * @date $Date: 2004-12-03 23:19:07 $ 26 26 * 27 27 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 33 33 #include <string.h> 34 34 35 static void printMetadataItem(psMetadataItem * item)35 static void printMetadataItem(psMetadataItem *metadataItem) 36 36 { 37 printf("Key Name: %8s ", item->name); 38 printf("Key Type: %2d ", item->type); 39 40 switch (item->type ) { 41 case PS_META_BOOL: 42 printf("Key Value: %15d ", item->data.B); 37 printf("Key Name: %8s ", metadataItem->name); 38 printf("Key pType: %2d ", metadataItem->pType); 39 printf("Key mdType: %2d ", metadataItem->type); 40 41 switch (metadataItem->type) { 42 case PS_META_LIST: 43 printf("Key Value: %17c", ' '); 43 44 break; 44 case PS_META_S32: 45 printf("Key Value: %15d ", item->data.S32); 46 break; 47 case PS_META_F32: 48 printf("Key Value: %15.3f ", item->data.F32); 49 break; 50 case PS_META_F64: 51 printf("Key Value: %15.3f ", item->data.F64); 45 case PS_META_PRIMITIVE: 46 switch(metadataItem->pType) { 47 case PS_TYPE_BOOL: 48 printf("Key Value: %15d ", metadataItem->data.B); 49 break; 50 case PS_TYPE_S32: 51 printf("Key Value: %15d ", metadataItem->data.S32); 52 break; 53 case PS_TYPE_F32: 54 printf("Key Value: %15.3f ", metadataItem->data.F32); 55 break; 56 case PS_TYPE_F64: 57 printf("Key Value: %15.3f ", metadataItem->data.F64); 58 break; 59 default: 60 printf("Bad type: %d ", metadataItem->pType); 61 } 52 62 break; 53 63 case PS_META_STR: 54 printf("Key Value: %15s ", (char*)item->data.V); 55 break; 56 case PS_META_IMG: 57 case PS_META_JPEG: 58 case PS_META_PNG: 59 case PS_META_ASTROM: 60 case PS_META_UNKNOWN: 61 printf("Value: unknown "); 64 printf("Key Value: %15s ", (char*)metadataItem->data.V); 62 65 break; 63 66 default: 64 printf("Bad type: %d ", item->type);65 } 66 printf("Key Comment: %s\n", item->comment);67 printf("Bad type: %d ", metadataItem->type); 68 } 69 printf("Key Comment: %s\n", metadataItem->comment); 67 70 } 68 71 … … 70 73 psS32 main( psS32 argc, char* argv[] ) 71 74 { 72 psS64 data;73 psF32 fpdata;74 75 psMetadataItem *item1 = NULL; 75 76 psMetadataItem *item2 = NULL; … … 80 81 psMetadataItem *item7 = NULL; 81 82 psMetadataItem *item8 = NULL; 82 psMetadataItem *item = NULL;83 83 psMetadata *metadata = NULL; 84 84 FILE *fd = NULL; 85 char str[7];86 psList* tmpList = NULL;87 85 88 86 // Test A - Allocate metadata and items 89 87 printPositiveTestHeader(stdout, "psMetadata", "Test A - Allocate metadata items"); 90 88 metadata = psMetadataAlloc(); 91 item1 = psMetadataItemAlloc("myItem1", PS_ META_BOOL, "I am a boolean", true);92 item2 = psMetadataItemAlloc("myItem2", PS_ META_S32, "I am a integer", 55);93 item3 = psMetadataItemAlloc("myItem3", PS_ META_BOOL, "I am a boolean", false);94 item4 = psMetadataItemAlloc("myItem4", PS_ META_S32, "I am a integer", 66);95 item5 = psMetadataItemAlloc("myItem5", PS_ META_F32, "I am a float", 3.14);96 item6 = psMetadataItemAlloc("myItem6", PS_ META_F64,"I am a double", 6.28);97 item7 = psMetadataItemAlloc("myItem7", PS_ META_STR, "I am a string", "GNIRTS");98 item8 = psMetadataItemAlloc("myItem8", PS_ META_UNKNOWN, "I am unknown");89 item1 = psMetadataItemAlloc("myItem1", PS_TYPE_BOOL, PS_META_PRIMITIVE, "I am a boolean", true); 90 item2 = psMetadataItemAlloc("myItem2", PS_TYPE_S32, PS_META_PRIMITIVE, "I am a integer", 55); 91 item3 = psMetadataItemAlloc("myItem3", PS_TYPE_BOOL, PS_META_PRIMITIVE, "I am a boolean", false); 92 item4 = psMetadataItemAlloc("myItem4", PS_TYPE_S32, PS_META_PRIMITIVE, "I am a integer", 66); 93 item5 = psMetadataItemAlloc("myItem5", PS_TYPE_F32, PS_META_PRIMITIVE, "I am a float", 3.14); 94 item6 = psMetadataItemAlloc("myItem6", PS_TYPE_F64, PS_META_PRIMITIVE,"I am a double", 6.28); 95 item7 = psMetadataItemAlloc("myItem7", PS_TYPE_PTR, PS_META_STR, "I am a string", "GNIRTS"); 96 item8 = psMetadataItemAlloc("myItem8", PS_TYPE_PTR, PS_META_UNKNOWN, "I am unknown"); 99 97 printMetadataItem(item1); 100 98 printMetadataItem(item2); … … 107 105 printFooter(stdout, "psMetadata", "Test A - Allocate metadata items", true); 108 106 109 110 // Test B - Set iterator at second index111 printPositiveTestHeader(stdout, "psMetadata", "Test B - Set iterator at second index");112 if (!psMetadataSetIterator(metadata, 2)) {113 psError(PS_ERR_UNKNOWN,true,"Failed to set iterator");114 return 100;115 }116 printFooter(stdout, "psMetadata", "Test B - Set iterator at second index", true);117 118 119 // Test C - Get next item at index120 printPositiveTestHeader(stdout, "psMetadata", "Test C - Get next item at index");121 item = psMetadataGetNext(metadata, NULL, 2);122 if(item == NULL) {123 printf("ERROR: Item should not be null\n");124 } else {125 printf("Found item named %s\n", item->name);126 }127 printFooter(stdout, "psMetadata", "Test C - Get next item at index", true);128 129 130 // Test D - Get next item at index and string131 printPositiveTestHeader(stdout, "psMetadata", "Test D - Get next item at index and string");132 item = psMetadataGetNext(metadata, "myItem1", 1);133 if(item == NULL) {134 printf("ERROR: Item should not be null\n");135 } else {136 printf("Found item named %s\n", item->name);137 }138 printFooter(stdout, "psMetadata", "Test D - Get next item at index and string", true);139 140 141 // Test E - Get previous item at index142 printPositiveTestHeader(stdout, "psMetadata", "Test E - Get previous item at index");143 item = psMetadataGetPrevious(metadata, NULL, 1);144 if(item == NULL) {145 printf("ERROR: Item should not be null\n");146 } else {147 printf("Found item named %s\n", item->name);148 }149 if( psMetadataGetPrevious(metadata,"myItem3",1) == NULL) {150 psError(PS_ERR_UNKNOWN, true,"psMetadataGetPrevious did not return an item from metadata.");151 return 45;152 }153 tmpList = metadata->list;154 metadata->list = NULL;155 if ( psMetadataGetPrevious(metadata,NULL,1) != NULL) {156 psError(PS_ERR_UNKNOWN, true,"psMetadataGetPrevious did not return null for invalid metadata.");157 return 50;158 }159 metadata->list = tmpList;160 printFooter(stdout, "psMetadata", "Test E - Get previous item at index", true);161 162 107 /* 108 // Test B - Set iterator at second index 109 printPositiveTestHeader(stdout, "psMetadata", "Test B - Set iterator at second index"); 110 if (!psMetadataSetIterator(metadata, 2)) { 111 psError(PS_ERR_UNKNOWN,true,"Failed to set iterator"); 112 return 100; 113 } 114 printFooter(stdout, "psMetadata", "Test B - Set iterator at second index", true); 115 116 117 // Test C - Get next item at index 118 printPositiveTestHeader(stdout, "psMetadata", "Test C - Get next item at index"); 119 item = psMetadataGetNext(metadata, NULL, 2); 120 if(item == NULL) { 121 printf("ERROR: Item should not be null\n"); 122 } else { 123 printf("Found item named %s\n", item->name); 124 } 125 printFooter(stdout, "psMetadata", "Test C - Get next item at index", true); 126 127 128 // Test D - Get next item at index and string 129 printPositiveTestHeader(stdout, "psMetadata", "Test D - Get next item at index and string"); 130 item = psMetadataGetNext(metadata, "myItem1", 1); 131 if(item == NULL) { 132 printf("ERROR: Item should not be null\n"); 133 } else { 134 printf("Found item named %s\n", item->name); 135 } 136 printFooter(stdout, "psMetadata", "Test D - Get next item at index and string", true); 137 138 139 // Test E - Get previous item at index 140 printPositiveTestHeader(stdout, "psMetadata", "Test E - Get previous item at index"); 141 item = psMetadataGetPrevious(metadata, NULL, 1); 142 if(item == NULL) { 143 printf("ERROR: Item should not be null\n"); 144 } else { 145 printf("Found item named %s\n", item->name); 146 } 147 if( psMetadataGetPrevious(metadata,"myItem3",1) == NULL) { 148 psError(PS_ERR_UNKNOWN, true,"psMetadataGetPrevious did not return an item from metadata."); 149 return 45; 150 } 151 tmpList = metadata->list; 152 metadata->list = NULL; 153 if ( psMetadataGetPrevious(metadata,NULL,1) != NULL) { 154 psError(PS_ERR_UNKNOWN, true,"psMetadataGetPrevious did not return null for invalid metadata."); 155 return 50; 156 } 157 metadata->list = tmpList; 158 printFooter(stdout, "psMetadata", "Test E - Get previous item at index", true); 159 160 */ 163 161 // Test F - Write metadata item to file 164 162 printPositiveTestHeader(stdout, "psMetadata", "Test F - Write metadata item to file"); … … 167 165 printf("ERROR: Couldn't open file for writing\n"); 168 166 } 169 psMetadataItemPrint(fd, "S32 = %ld\n", item2); 170 psMetadataItemPrint(fd, "BOL = %ld\n", item3); 171 psMetadataItemPrint(fd, "F32 = %g\n", item5); 172 psMetadataItemPrint(fd, "F64 = %g\n", item6); 173 psMetadataItemPrint(fd, "STR = %s\n", item7); 174 psMetadataItemPrint(fd, "UNK = \n", item8); 175 printFooter(stdout, "psMetadata", "Test F - Write metadata item to file", true); 167 psMetadataItemPrint(fd, "S32 = %ld\n", item2); 168 psMetadataItemPrint(fd, "BOL = %ld\n", item3); 169 psMetadataItemPrint(fd, "F32 = %g\n", item5); 170 psMetadataItemPrint(fd, "F64 = %g\n", item6); 171 psMetadataItemPrint(fd, "STR = %s\n", item7); 172 psMetadataItemPrint(fd, "UNK = \n", item8); 176 173 fclose(fd); 177 174 fd = fopen("./tst_psMetadata05_OUT", "r"); … … 179 176 printf("ERROR: Couldn't open file for reading\n"); 180 177 } 181 fscanf(fd, "S64 = %lld\n", &data); 182 if(data != 55) { 183 printf("ERROR: Data in file is not as expected. Value: %lld. Should be: 55.\n", data); 184 } 185 fscanf(fd, "BOL = %lld\n", &data); 186 if(data != 0) { 187 printf("ERROR: Data in file is not as expected. Value: %lld. Should be: 0.\n", data); 188 } 189 fscanf(fd, "F32 = %g\n", &fpdata); 190 if ( (fpdata <= 3.1) || (fpdata >= 3.2) ) { 191 printf("ERROR: Data in file is not as expected. Value: %g. Should be: 3.14.\n", fpdata); 192 } 193 fscanf(fd, "F64 = %g\n", &fpdata); 194 if ( (fpdata <= 6.2) || ( fpdata >= 6.3) ) { 195 printf("ERROR: Data in file is not as expected. Value: %g. Should be: 6.28.\n", fpdata); 196 } 197 fscanf(fd, "STR = %s\n", str); 198 if ( strcmp(str,"GNIRTS") != 0 ) { 199 printf("ERROR: Data is file is not as expected. Value: %s. Should be: GNIRTS.\n", str); 200 } 178 179 char line[256]; 180 char truth1[] = "S32 = 55"; 181 fgets(line, 256, fd); 182 if(strncmp(line, truth1, 8)) { 183 printf("ERROR: Data in file is not as expected. Value: %s. Should be: %s\n", line, truth1); 184 } 185 186 char truth2[] = "BOL = 0"; 187 fgets(line, 256, fd); 188 if(strncmp(line, truth2, 7)) { 189 printf("ERROR: Data in file is not as expected. Value: %s. Should be: %s\n", line, truth2); 190 } 191 192 char truth3[] = "F32 = 3.14"; 193 fgets(line, 256, fd); 194 if(strncmp(line, truth3, 10)) { 195 printf("ERROR: Data in file is not as expected. Value: %s. Should be: %s\n", line, truth3); 196 } 197 198 char truth4[] = "F64 = 6.28"; 199 fgets(line, 256, fd); 200 if(strncmp(line, truth4, 10)) { 201 printf("ERROR: Data in file is not as expected. Value: %s. Should be: %s\n", line, truth4); 202 } 203 204 char truth5[] = "STR = GNIRTS"; 205 fgets(line, 256, fd); 206 if(strncmp(line, truth5, 12)) { 207 printf("ERROR: Data in file is not as expected. Value: %s. Should be: %s\n", line, truth5); 208 } 209 201 210 fclose(fd); 202 203 // Test G - Attempt to use null metadata with setIterator 204 printNegativeTestHeader(stdout,"psMetadata", "Test G - Attempt to use null metadata with setIterator", 205 "Null metadata collection not allowed", 0); 206 if( psMetadataSetIterator(NULL, 0)) { 207 psError(PS_ERR_UNKNOWN,true,"Set iterator did not detect invalid parameter."); 208 return 101; 209 } 210 tmpList = metadata->list; 211 metadata->list = NULL; 212 if( psMetadataSetIterator(metadata,0)) { 213 psError(PS_ERR_UNKNOWN,true,"Set iterator did not detect null list."); 214 return 102; 215 } 216 metadata->list = tmpList; 217 printFooter(stdout, "psMetadata", "Test G - Attempt to use null metadata with setIterator", true); 218 219 220 // Test H - Attempt to use null metadata with getNext 221 printNegativeTestHeader(stdout,"psMetadata", "Test H - Attempt to use null metadata with getNext", 222 "Null metadata collection not allowed", 0); 223 if( psMetadataGetNext(NULL, "myItem2", 0) != NULL ) { 224 psError(PS_ERR_UNKNOWN, true,"psMetadataGetNext did not return null for null metadata."); 225 return 40; 226 } 227 tmpList = metadata->list; 228 metadata->list = NULL; 229 if ( psMetadataGetNext(metadata, "myItem2", 0) != NULL ) { 230 psError(PS_ERR_UNKNOWN, true,"psMetadataGetNext did not return null for invalid metadata."); 231 return 41; 232 } 233 metadata->list = tmpList; 234 235 printFooter(stdout, "psMetadata", "Test H - Attempt to use null metadata with getNext", true); 236 237 238 // Test I - Attempt to use null metadata with getPrevious 239 printNegativeTestHeader(stdout,"psMetadata", "Test I - Attempt to use null metadata with getPrevious", 240 "Null metadata collection not allowed", 0); 241 psMetadataGetPrevious(NULL, "myItem2", 0); 242 printFooter(stdout, "psMetadata", "Test I - Attempt to use null metadata with getPrevious", true); 243 244 211 printFooter(stdout, "psMetadata", "Test F - Write metadata item to file", true); 212 /* 213 // Test G - Attempt to use null metadata with setIterator 214 printNegativeTestHeader(stdout,"psMetadata", "Test G - Attempt to use null metadata with setIterator", 215 "Null metadata collection not allowed", 0); 216 if( psMetadataSetIterator(NULL, 0)) { 217 psError(PS_ERR_UNKNOWN,true,"Set iterator did not detect invalid parameter."); 218 return 101; 219 } 220 tmpList = metadata->list; 221 metadata->list = NULL; 222 if( psMetadataSetIterator(metadata,0)) { 223 psError(PS_ERR_UNKNOWN,true,"Set iterator did not detect null list."); 224 return 102; 225 } 226 metadata->list = tmpList; 227 printFooter(stdout, "psMetadata", "Test G - Attempt to use null metadata with setIterator", true); 228 229 230 // Test H - Attempt to use null metadata with getNext 231 printNegativeTestHeader(stdout,"psMetadata", "Test H - Attempt to use null metadata with getNext", 232 "Null metadata collection not allowed", 0); 233 if( psMetadataGetNext(NULL, "myItem2", 0) != NULL ) { 234 psError(PS_ERR_UNKNOWN, true,"psMetadataGetNext did not return null for null metadata."); 235 return 40; 236 } 237 tmpList = metadata->list; 238 metadata->list = NULL; 239 if ( psMetadataGetNext(metadata, "myItem2", 0) != NULL ) { 240 psError(PS_ERR_UNKNOWN, true,"psMetadataGetNext did not return null for invalid metadata."); 241 return 41; 242 } 243 metadata->list = tmpList; 244 245 printFooter(stdout, "psMetadata", "Test H - Attempt to use null metadata with getNext", true); 246 247 248 // Test I - Attempt to use null metadata with getPrevious 249 printNegativeTestHeader(stdout,"psMetadata", "Test I - Attempt to use null metadata with getPrevious", 250 "Null metadata collection not allowed", 0); 251 psMetadataGetPrevious(NULL, "myItem2", 0); 252 printFooter(stdout, "psMetadata", "Test I - Attempt to use null metadata with getPrevious", true); 253 254 */ 245 255 // Test J - Attempt to use null file with itemPrint 246 256 printNegativeTestHeader(stdout,"psMetadata", "Test J - Attempt to use null file with itemPrint", -
trunk/psLib/test/collections/tst_psMetadata_06.c
r2392 r2607 13 13 * @author Ross Harman, MHPCC 14 14 * 15 * @version $Revision: 1. 6$ $Name: not supported by cvs2svn $16 * @date $Date: 2004-1 1-22 20:54:50$15 * @version $Revision: 1.7 $ $Name: not supported by cvs2svn $ 16 * @date $Date: 2004-12-03 23:19:07 $ 17 17 * 18 18 * Copyright 2004 Maui High Performance Computing Center, University of Hawaii … … 24 24 #include <string.h> 25 25 26 static void printMetadataItem(psMetadataItem * item)26 static void printMetadataItem(psMetadataItem *metadataItem) 27 27 { 28 printf("Key Name: %8s ", item->name); 29 printf("Key Type: %2d ", item->type); 28 printf("Key Name: %8s ", metadataItem->name); 29 printf("Key pType: %2d ", metadataItem->pType); 30 printf("Key mdType: %2d ", metadataItem->type); 30 31 31 switch ( item->type) {32 case PS_META_ BOOL:33 printf("Key Value: %1 5d ", item->data.B);32 switch (metadataItem->type) { 33 case PS_META_LIST: 34 printf("Key Value: %17c", ' '); 34 35 break; 35 case PS_META_S32: 36 printf("Key Value: %15d ", item->data.S32); 37 break; 38 case PS_META_F32: 39 printf("Key Value: %15.3f ", item->data.F32); 40 break; 41 case PS_META_F64: 42 printf("Key Value: %15.3f ", item->data.F64); 36 case PS_META_PRIMITIVE: 37 switch(metadataItem->pType) { 38 case PS_TYPE_BOOL: 39 printf("Key Value: %15d ", metadataItem->data.B); 40 break; 41 case PS_TYPE_S32: 42 printf("Key Value: %15d ", metadataItem->data.S32); 43 break; 44 case PS_TYPE_F32: 45 printf("Key Value: %15.3f ", metadataItem->data.F32); 46 break; 47 case PS_TYPE_F64: 48 printf("Key Value: %15.3f ", metadataItem->data.F64); 49 break; 50 default: 51 printf("Bad type: %d ", metadataItem->pType); 52 } 43 53 break; 44 54 case PS_META_STR: 45 printf("Key Value: %15s ", (char*)item->data.V); 46 break; 47 case PS_META_IMG: 48 case PS_META_JPEG: 49 case PS_META_PNG: 50 case PS_META_ASTROM: 51 case PS_META_UNKNOWN: 52 printf("Value: unknown "); 55 printf("Key Value: %15s ", (char*)metadataItem->data.V); 53 56 break; 54 57 default: 55 printf("Bad type: %d ", item->type);58 printf("Bad type: %d ", metadataItem->type); 56 59 } 57 printf("Key Comment: %s\n", item->comment);60 printf("Key Comment: %s\n", metadataItem->comment); 58 61 } 59 62 … … 71 74 // Test A - Allocate metadata and items 72 75 printPositiveTestHeader(stdout, "psMetadata", "Test A - Allocate metadata and items"); 73 item1a = psMetadataItemAlloc("myItem1", PS_ META_BOOL, "I am a boolean", true);74 item1b = psMetadataItemAlloc("myItem1", PS_ META_S32, "I am a signed integer", 111);75 item1c = psMetadataItemAlloc("myItem1", PS_ META_S32, "I am a signed integer", 222);76 item2a = psMetadataItemAlloc("myItem2", PS_ META_S32, "I am a signed integer", 333);77 item2b = psMetadataItemAlloc("myItem2", PS_ META_ITEM_SET, "I am a folder node", NULL);76 item1a = psMetadataItemAlloc("myItem1", PS_TYPE_BOOL, PS_META_PRIMITIVE, "I am a boolean", true); 77 item1b = psMetadataItemAlloc("myItem1", PS_TYPE_S32, PS_META_PRIMITIVE, "I am a signed integer", 111); 78 item1c = psMetadataItemAlloc("myItem1", PS_TYPE_S32, PS_META_PRIMITIVE, "I am a signed integer", 222); 79 item2a = psMetadataItemAlloc("myItem2", PS_TYPE_S32, PS_META_PRIMITIVE, "I am a signed integer", 333); 80 item2b = psMetadataItemAlloc("myItem2", PS_TYPE_PTR, PS_META_LIST, "I am a folder node", NULL); 78 81 metadata = psMetadataAlloc(); 79 82 printMetadataItem(item1a); … … 87 90 // Test B - Add leaf node on top of existing leaf node 88 91 printPositiveTestHeader(stdout, "psMetadata", "Test B - Add leaf node on top of existing leaf node"); 89 if( ! psMetadataAddItem(metadata, item1a, PS_LIST_HEAD)) {92 if(!psMetadataAddItem(metadata, item1a, PS_LIST_HEAD)) { 90 93 psError(PS_ERR_UNKNOWN, true,"psMetadataAddItem returned false for adding a node top."); 91 94 return 20; 92 95 } 93 if ( ! psMetadataAddItem(metadata, item1b, PS_LIST_HEAD)) {96 if (!psMetadataAddItem(metadata, item1b, PS_LIST_HEAD)) { 94 97 psError(PS_ERR_UNKNOWN, true,"psMetadataAddItem returned false for adding a node top."); 95 98 return 21; … … 101 104 // Test C - Add leaf node to existing folder node 102 105 printPositiveTestHeader(stdout, "psMetadata", "Test C - Add leaf node to existing folder node"); 103 if ( ! psMetadataAddItem(metadata, item1c, PS_LIST_HEAD)) {106 if (!psMetadataAddItem(metadata, item1c, PS_LIST_HEAD)) { 104 107 psError(PS_ERR_UNKNOWN, true,"psMetadataAddItem return false for adding a not to existing node."); 105 108 return 22; … … 110 113 // Test D - Add folder node on top of existing leaf node 111 114 printPositiveTestHeader(stdout, "psMetadata", "Test D - Add folder node on top of existing leaf node"); 112 if ( ! psMetadataAddItem(metadata, item2a, PS_LIST_HEAD)) {115 if (!psMetadataAddItem(metadata, item2a, PS_LIST_HEAD)) { 113 116 psError(PS_ERR_UNKNOWN, true,"psMetadataAddItem returned false for adding a node to existing leaf node."); 114 117 return 23; 115 118 } 116 if ( ! psMetadataAddItem(metadata, item2b, PS_LIST_HEAD)) {119 if (!psMetadataAddItem(metadata, item2b, PS_LIST_HEAD)) { 117 120 psError(PS_ERR_UNKNOWN, true,"psMetadataAddItem returned false for adding a nod to existing leaf node."); 118 121 return 24;
Note:
See TracChangeset
for help on using the changeset viewer.
