Changeset 9920
- Timestamp:
- Nov 8, 2006, 6:06:16 PM (20 years ago)
- File:
-
- 1 edited
-
trunk/psLib/src/types/psMetadataConfig.c (modified) (23 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psLib/src/types/psMetadataConfig.c
r9919 r9920 10 10 * @author Eric Van Alst, MHPCC 11 11 * 12 * @version $Revision: 1.11 6$ $Name: not supported by cvs2svn $13 * @date $Date: 2006-11-09 0 3:50:08$12 * @version $Revision: 1.117 $ $Name: not supported by cvs2svn $ 13 * @date $Date: 2006-11-09 04:06:16 $ 14 14 * 15 15 * Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii … … 62 62 static psMetadata* setMetadataItem(psMetadata* template, char* linePtr) 63 63 ; 64 static psBool parseLine(ps S32* level, psArray* levelArray, char* linePtr,64 static psBool parseLine(psArray* levelArray, char* linePtr, 65 65 psS32 lineCount, psBool overwrite); 66 static psBool parseMetadataItem(char* keyName, ps S32* level, psArray* levelArray,66 static psBool parseMetadataItem(char* keyName, psArray* levelArray, 67 67 char* linePtr, psS32 lineCount, psMetadataFlags flags); 68 68 static psString formatMetadataItem(psMetadataItem *item); 69 69 static psArray *p_psMetadataKeyArray(psMetadata *md); 70 70 static bool parseGeneric(char* keyName, 71 psS32* level,72 71 psArray* levelArray, 73 72 char* linePtr, … … 75 74 psMetadataFlags flags); 76 75 static bool parseType(char* keyName, 77 psS32* level,78 76 psArray* levelArray, 79 77 char* linePtr, … … 81 79 psMetadataFlags flags); 82 80 static bool parseMetadataEnd(char* keyName, 83 psS32* level,84 81 psArray* levelArray, 85 82 char* linePtr, … … 687 684 688 685 psBool parseMetadataItem(char* keyName, 689 psS32* level,690 686 psArray* levelArray, 691 687 char* linePtr, … … 719 715 // Get the metadata item type 720 716 strType = getToken(&linePtr, " ", &status,true); 717 718 long level = psArrayLength(levelArray) - 1; 721 719 722 720 // Check for no type … … 793 791 } else { 794 792 // Search through user types 795 typeArray = ((p_psParseLevelInfo*)(levelArray->data[ *level]))->typeArray;796 templateArray = ((p_psParseLevelInfo*)(levelArray->data[ *level]))->templateArray;793 typeArray = ((p_psParseLevelInfo*)(levelArray->data[level]))->typeArray; 794 templateArray = ((p_psParseLevelInfo*)(levelArray->data[level]))->templateArray; 797 795 for(psS32 k = 0; k < typeArray->n; k++) { 798 796 if(strcmp(strType,(char*)typeArray->data[k]) == 0) { … … 800 798 if(tempMeta != NULL) { 801 799 // Add metadata item 802 md = ((p_psParseLevelInfo*)(levelArray->data[ *level]))->metadata;800 md = ((p_psParseLevelInfo*)(levelArray->data[level]))->metadata; 803 801 addStatus = psMetadataAdd(md,PS_LIST_TAIL,keyName, 804 802 PS_DATA_METADATA | flags,"",tempMeta); … … 876 874 // Need to add item to metadata so get pointer to metadata 877 875 status = 0; 878 md = ((p_psParseLevelInfo*)(levelArray->data[ *level]))->metadata;879 nonUniqueKeys = ((p_psParseLevelInfo*)(levelArray->data[ *level]))->nonUniqueKeyArray;876 md = ((p_psParseLevelInfo*)(levelArray->data[level]))->metadata; 877 nonUniqueKeys = ((p_psParseLevelInfo*)(levelArray->data[level]))->nonUniqueKeyArray; 880 878 switch(mdType) { 881 879 case PS_DATA_STRING: … … 1073 1071 psFree(nextLevelInfo); 1074 1072 // Increment level counter 1075 (*level)++;1076 1073 addStatus = true; 1077 1074 break; … … 1094 1091 } 1095 1092 1096 psBool parseLine(psS32* level, 1097 psArray* levelArray, 1093 psBool parseLine(psArray* levelArray, 1098 1094 char* linePtr, 1099 1095 psS32 lineCount, … … 1134 1130 // Check for special keyName values "TYPE", "END" 1135 1131 if (strcmp(keyName, "END") == 0) { 1136 if (!parseMetadataEnd(keyName, level , levelArray, linePtr, lineCount, flags)) {1132 if (!parseMetadataEnd(keyName, levelArray, linePtr, lineCount, flags)) { 1137 1133 goto FAIL; 1138 1134 } 1139 1135 } else if (strcmp(keyName,"TYPE") == 0 ) { 1140 if (!parseType(keyName, level , levelArray, linePtr, lineCount, flags)) {1136 if (!parseType(keyName, levelArray, linePtr, lineCount, flags)) { 1141 1137 goto FAIL; 1142 1138 } 1143 1139 } else { 1144 if (!parseGeneric(keyName, level , levelArray, linePtr, lineCount, flags)) {1140 if (!parseGeneric(keyName, levelArray, linePtr, lineCount, flags)) { 1145 1141 goto FAIL; 1146 1142 } … … 1159 1155 1160 1156 static bool parseGeneric(char* keyName, 1161 psS32* level,1162 1157 psArray* levelArray, 1163 1158 char* linePtr, … … 1166 1161 { 1167 1162 PS_ASSERT_PTR_NON_NULL(keyName, false); 1168 PS_ASSERT_PTR_NON_NULL(level, false);1169 1163 PS_ASSERT_PTR_NON_NULL(levelArray, false); 1170 1164 PS_ASSERT_PTR_NON_NULL(linePtr, false); 1171 1165 1166 long level = psArrayLength(levelArray) - 1; 1167 1172 1168 // Check if key name present in array of non-unique key names 1173 psS32 limit = ((p_psParseLevelInfo*)(levelArray->data[ *level]))->nonUniqueKeyArray->n;1169 psS32 limit = ((p_psParseLevelInfo*)(levelArray->data[level]))->nonUniqueKeyArray->n; 1174 1170 for (psS32 k = 0; k < limit; k++) { 1175 1171 char *name = (char*)((p_psParseLevelInfo*) 1176 (levelArray->data[ *level]))->nonUniqueKeyArray->data[k];1172 (levelArray->data[level]))->nonUniqueKeyArray->data[k]; 1177 1173 if (strcmp(name, keyName) == 0) { 1178 1174 flags = PS_META_DUPLICATE_OK; … … 1181 1177 1182 1178 // Parse metadataItem 1183 if (!parseMetadataItem(keyName, level , levelArray, linePtr, lineCount, flags)) {1179 if (!parseMetadataItem(keyName, levelArray, linePtr, lineCount, flags)) { 1184 1180 return false; 1185 1181 } … … 1189 1185 1190 1186 static bool parseType(char* keyName, 1191 psS32* level,1192 1187 psArray* levelArray, 1193 1188 char* linePtr, … … 1196 1191 { 1197 1192 PS_ASSERT_PTR_NON_NULL(keyName, false); 1198 PS_ASSERT_PTR_NON_NULL(level, false);1199 1193 PS_ASSERT_PTR_NON_NULL(levelArray, false); 1200 1194 PS_ASSERT_PTR_NON_NULL(linePtr, false); 1195 1196 long level = psArrayLength(levelArray) - 1; 1201 1197 1202 1198 // Get the type name … … 1226 1222 1227 1223 // Access type array 1228 psArray *typeArray = ((p_psParseLevelInfo*)(levelArray->data[ *level]))->typeArray;1224 psArray *typeArray = ((p_psParseLevelInfo*)(levelArray->data[level]))->typeArray; 1229 1225 1230 1226 // Check if type already exists in array … … 1246 1242 1247 1243 // Add template to array of templates 1248 psArray *templateArray = ((p_psParseLevelInfo*)(levelArray->data[ *level]))->templateArray;1244 psArray *templateArray = ((p_psParseLevelInfo*)(levelArray->data[level]))->templateArray; 1249 1245 psArrayAdd(templateArray, 0, tempTemplate); 1250 1246 psFree(tempTemplate); … … 1254 1250 1255 1251 static bool parseMetadataEnd(char* keyName, 1256 psS32* level,1257 1252 psArray* levelArray, 1258 1253 char* linePtr, … … 1261 1256 { 1262 1257 PS_ASSERT_PTR_NON_NULL(keyName, false); 1263 PS_ASSERT_PTR_NON_NULL(level, false);1264 1258 PS_ASSERT_PTR_NON_NULL(levelArray, false); 1265 1259 PS_ASSERT_PTR_NON_NULL(linePtr, false); 1266 1260 1267 if ((*level) < 1) { 1261 long level = psArrayLength(levelArray) - 1; 1262 1263 if ((level) < 1) { 1268 1264 psError(PS_ERR_UNKNOWN, false, "can not END the top level metadata"); 1269 1265 return false; 1270 1266 } 1271 1267 1272 p_psParseLevelInfo *upperLevelInfo = ((p_psParseLevelInfo*)(levelArray->data[*level-1])); 1273 p_psParseLevelInfo *lowerLevelInfo = ((p_psParseLevelInfo*)(levelArray->data[*level])); 1268 p_psParseLevelInfo *upperLevelInfo = ((p_psParseLevelInfo*)(levelArray->data[level - 1])); 1269 p_psParseLevelInfo *lowerLevelInfo = ((p_psParseLevelInfo*)(levelArray->data[level])); 1270 1274 1271 // Check name in nonunique list 1275 1272 for (psS32 k = 0; k < psArrayLength(upperLevelInfo->nonUniqueKeyArray); k++) { … … 1301 1298 } 1302 1299 1300 // the END just moved us up one nesting level 1303 1301 // Remove lower info level 1304 if(!psArrayRemoveIndex(levelArray, *level)) {1302 if(!psArrayRemoveIndex(levelArray, level)) { 1305 1303 psError(PS_ERR_UNKNOWN, false, "failed to remove array item"); 1306 1304 psFree(strValue); 1307 1305 psFree(strComment); 1308 1306 } 1309 1310 // the END just moved us up one nesting level1311 (*level)--;1312 1307 1313 1308 psFree(strValue); … … 1441 1436 long lineCount = 0; 1442 1437 char *line = NULL; 1443 psS32 nestingLevel = 0;1444 1438 psListIterator *iter = psListIteratorAlloc(doc, 0, false); 1445 1439 while ((line = psListGetAndIncrement(iter))) { 1446 1440 lineCount++; // indexed from 1 1447 1441 1448 if (!parseLine( &nestingLevel,parseLevelInfoArray, line, lineCount,1442 if (!parseLine(parseLevelInfoArray, line, lineCount, 1449 1443 overwrite)) { 1450 1444 if (nFail != NULL) {
Note:
See TracChangeset
for help on using the changeset viewer.
