CMreturn NFparseObjAliasFinalize(NFobject_p parent, NFobject_p object) { NFobjList_p list; if (object->Type != NFobjAlias) { CMmsgPrint(CMmsgAppError, "This shouldn't have happened in %s%d.\n", __FILE__, __LINE__); goto Abort; } switch (parent->Type) { case NFcompRegion: list = ((NFcompRegion_p) parent)->Aliases; break; case NFmodEquation: list = ((NFmodEquation_p) parent)->Aliases; break; case NFmodProcess: list = ((NFmodProcess_p) parent)->Aliases; break; default: CMmsgPrint(CMmsgAppError, "This shouldn't have happened in %s%d.\n", __FILE__, __LINE__); goto Abort; } if (NFobjListAddItem(list, object) == CMfailed) { CMmsgPrint(CMmsgAppError, "Error adding alias to %s in %s:%d\n", NFobjTypeName(object->Parent->Type), __FILE__, __LINE__); goto Abort; } return (CMsucceeded); Abort: NFobjectFree(object); return (CMfailed); }
/**************************************************************************************************************** * Entry start *****************************************************************************************************************/ static void XMLCALL _NFentryStart (void *argPtr, const char *entry, const char **attr) { const char *name; const char *modelChildren [] = { NFcompAggregateStr, NFcompContainerStr, NFcompInputStr, NFcompRegionStr, NFnumParameterStr, (char *) NULL }; const char *containerChildren [] = { NFcompAggregateStr, NFcompContainerStr, NFcompRegionStr, NFnumParameterStr, NFnumInitialStr, NFnumVariableStr, NFmodDerivativeStr, NFmodEquationStr, NFmodInterfaceStr, NFmodProcessStr, NFmodRouteStr, NFobjOutputStr, (char *) NULL }; const char *ioChildren [] = { NFnumVariableStr, (char *) NULL }; const char *regionChildren [] = { NFobjAliasStr, (char *) NULL }; const char *aggregateChildren [] = { NFobjCategoryStr, (char *) NULL }; const char *moduleChildren [] = { NFobjAliasStr, NFnumParameterStr, (char *) NULL }; NFdata_t *data; NFobject_p object, parent; XML_Parser parser = (XML_Parser) argPtr; data = (NFdata_t *) XML_GetUserData (parser); if (data->Skip) { if (strcmp (data->SkipName,entry) == 0) data->SkipLevel++; return; } if (data->Stack + 1 >= data->StackSize) { data->Objects = (NFobject_p *) realloc (data->Objects, (data->StackSize + 1) * sizeof (NFobject_p)); if (data->Objects == (NFobject_p *) NULL) { CMmsgPrint (CMmsgSysError, "Memory allocation error in %s:%d\n",__FILE__,__LINE__); goto Abort; } data->Objects [data->StackSize] = (NFobject_p) NULL; data->StackSize++; } if ((name = NFparseGetAttribute (attr, NFattrNameStr, (const char *) NULL)) == (char *) NULL) { CMmsgPrint (CMmsgWarning,"Skipping unnamed %s section in line: %d\n",entry, XML_GetCurrentLineNumber (parser)); goto Skip; } if (data->Stack == 0) { // Document root level if (strcmp (entry,NFcompModelStr) == 0) { if (data->Objects [data->Stack] != (NFobject_p) NULL) { CMmsgPrint (CMmsgWarning, "Skipping second model [%s] section [%s] in line: %d\n",entry, name, XML_GetCurrentLineNumber (parser)); goto Skip; } if ((data->Objects [data->Stack] = NFparseCompModelCreate (parser,name,attr)) == (NFobject_p) NULL) { CMmsgPrint (CMmsgAppError, "Model creation error in %s:%d\n",__FILE__,__LINE__); goto Abort; } data->Model = (NFcompModel_p) data->Objects [data->Stack]; } else { CMmsgPrint (CMmsgWarning,"Skipping [%s] section [%s] in line: %d\n",entry, name, XML_GetCurrentLineNumber (parser)); goto Skip; } } else { parent = data->Objects [data->Stack - 1]; switch (parent->Type) { case NFcompAggregate: if (CMoptLookup (aggregateChildren, entry, true) == CMfailed) { CMmsgPrint (CMmsgWarning,"Skipping [%s] section [%s] in %s [%s]\n",entry, name, NFobjTypeName (parent->Type), parent->Name); goto Skip; } break; case NFcompContainer: if (CMoptLookup (containerChildren, entry, true) == CMfailed) { CMmsgPrint (CMmsgWarning,"Skipping [%s] section [%s] in %s [%s]\n",entry, name, NFobjTypeName (parent->Type), parent->Name); goto Skip; } break; case NFcompInput: if (CMoptLookup (ioChildren, entry, true) == CMfailed) { CMmsgPrint (CMmsgWarning,"Skipping [%s] section [%s] in %s [%s]\n",entry, name, NFobjTypeName (parent->Type), parent->Name); goto Skip; } break; case NFcompModel: if (CMoptLookup (modelChildren, entry, true) == CMfailed) { CMmsgPrint (CMmsgWarning,"Skipping [%s] section [%s] in %s [%s]\n",entry, name, NFobjTypeName (parent->Type), parent->Name); goto Skip; } break; case NFcompRegion: if (CMoptLookup (regionChildren, entry, true) == CMfailed) { CMmsgPrint (CMmsgWarning,"Skipping [%s] section [%s] in %s [%s]\n",entry, name, NFobjTypeName (parent->Type), parent->Name); goto Skip; } break; case NFnumInitial: CMmsgPrint (CMmsgWarning,"Skipping [%s] section [%s] in %s [%s]\n",entry, name, NFobjTypeName (parent->Type), parent->Name); goto Skip; case NFnumParameter: CMmsgPrint (CMmsgWarning,"Skipping [%s] section [%s] in %s [%s]\n",entry, name, NFobjTypeName (parent->Type), parent->Name); goto Skip; case NFnumVariable: CMmsgPrint (CMmsgWarning,"Skipping [%s] section [%s] in %s [%s]\n",entry, name, NFobjTypeName (parent->Type), parent->Name); goto Skip; case NFmodDerivative: CMmsgPrint (CMmsgWarning,"Skipping [%s] section [%s] in %s [%s]\n",entry, name, NFobjTypeName (parent->Type), parent->Name); goto Skip; case NFmodEquation: if (CMoptLookup (moduleChildren, entry, true) == CMfailed) { CMmsgPrint (CMmsgWarning,"Skipping [%s] section [%s] in %s [%s]\n",entry, name, NFobjTypeName (parent->Type), parent->Name); goto Skip; } break; case NFmodInterface: CMmsgPrint (CMmsgWarning,"Skipping [%s] section [%s] in %s [%s]\n",entry, name, NFobjTypeName (parent->Type), parent->Name); goto Skip; case NFmodProcess: if (CMoptLookup (moduleChildren, entry, true) == CMfailed) { CMmsgPrint (CMmsgWarning,"Skipping [%s] section [%s] in %s [%s]\n",entry, name, NFobjTypeName (parent->Type), parent->Name); goto Skip; } break; case NFmodRoute: CMmsgPrint (CMmsgWarning,"Skipping [%s] section [%s] in %s [%s]\n",entry, name, NFobjTypeName (parent->Type), parent->Name); goto Skip; case NFobjAlias: CMmsgPrint (CMmsgWarning,"Skipping [%s] section [%s] in %s [%s]\n",entry, name, NFobjTypeName (parent->Type), parent->Name); goto Skip; case NFobjCategory: CMmsgPrint (CMmsgWarning,"Skipping [%s] section [%s] in %s [%s]\n",entry, name, NFobjTypeName (parent->Type), parent->Name); goto Skip; case NFobjOutput: if (CMoptLookup (ioChildren, entry, true) == CMfailed) { CMmsgPrint (CMmsgWarning,"Skipping [%s] section [%s] in %s [%s]\n",entry, name, NFobjTypeName (parent->Type), parent->Name); goto Skip; } break; case NFobjPlugin: CMmsgPrint (CMmsgWarning,"Skipping [%s] section [%s] in %s [%s]\n",entry, name, NFobjTypeName (parent->Type), parent->Name); goto Skip; } if (strcmp (entry, NFdimensionStr) == 0) { } else if (strcmp (entry, NFextentStr) == 0) { } else { switch (NFobjTypeCode (entry)) { case NFcompAggregate: object = NFparseCompAggregateCreate (parser,parent,name,attr); break; case NFcompContainer: object = NFparseCompContainerCreate (parser,parent,name,attr); break; case NFcompInput: object = NFparseCompInputCreate (parser,parent,name,attr); break; case NFcompModel: CMmsgPrint (CMmsgAppError, "This should never happen! %s:%d\n",__FILE__,__LINE__); goto Skip; case NFcompRegion: object = NFparseCompRegionCreate (parser,parent,name,attr); break; case NFnumInitial: object = NFparseNumVariableCreate (parser,parent,name,attr); break; case NFnumParameter: object = NFparseNumParameterCreate (parser,parent,name,attr); break; case NFnumVariable: object = NFparseNumVariableCreate (parser,parent,name,attr); break; case NFmodDerivative: object = NFparseModDerivativeCreate (parser,parent,name,attr); break; case NFmodEquation: object = NFparseModEquationCreate (parser,parent,name,attr); break; case NFmodInterface: object = NFparseModInterfaceCreate (parser,parent,name,attr); break; case NFmodProcess: object = NFparseModProcessCreate (parser,parent,name,attr); break; case NFmodRoute: object = NFparseModRouteCreate (parser,parent,name,attr); break; case NFobjAlias: object = NFparseObjAliasCreate (parser,parent,name,attr); break; case NFobjCategory: object = NFparseObjCategoryCreate (parser,parent,name,attr); break; case NFobjOutput: object = NFparseObjOutputCreate (parser,parent,name,attr); break; case NFobjPlugin: CMmsgPrint (CMmsgAppError, "This should never happen! %s:%d\n",__FILE__,__LINE__); goto Skip; } if (object == (NFobject_p) NULL) goto Abort; data->Objects [data->Stack] = object; } } data->Stack++; return; Abort: data->Abort = true; Skip: data->SkipName = CMstrDuplicate (entry); data->Skip = true; data->SkipLevel = 1; return; }
void NFobjectPrint(NFobject_p object) { CMmsgPrint(CMmsgInfo, "%s [%s] Begin\n", NFobjTypeName(object->Type), object->Name); CMmsgIndent(CMmsgInfo, true); if (object->Parent != (NFobject_p) NULL) CMmsgPrint(CMmsgInfo, "Parent: %s [%s]\n", NFobjTypeName(object->Parent->Type), object->Parent->Name, object->Name); switch (object->Type) { case NFcompAggregate: _NFcompAggregatePrint(object); break; case NFcompContainer: _NFcompContainerPrint(object); break; case NFcompInput: _NFcompInputPrint(object); break; case NFcompModel: _NFcompModelPrint(object); break; case NFcompRegion: _NFcompRegionPrint(object); break; case NFmodDerivative: _NFmodDerivativePrint(object); break; case NFmodEquation: _NFmodEquationPrint(object); break; case NFmodInterface: _NFmodInterfacePrint(object); break; case NFmodProcess: _NFmodProcessPrint(object); break; case NFmodRoute: _NFmodRoutePrint(object); break; case NFnumInitial: _NFnumVariablePrint(object); break; case NFnumParameter: _NFnumParameterPrint(object); break; case NFnumVariable: _NFnumVariablePrint(object); break; case NFobjAlias: _NFobjAliasPrint(object); break; case NFobjCategory: _NFobjCategoryPrint(object); break; case NFobjOutput: _NFobjOutputPrint(object); break; case NFobjPlugin: _NFobjPluginPrint(object); break; } CMmsgIndent(CMmsgInfo, false); CMmsgPrint(CMmsgInfo, "%s [%s] End\n", NFobjTypeName(object->Type), object->Name); }