Skip to content

Commit

Permalink
more fixes for ticket:5030
Browse files Browse the repository at this point in the history
- fix variable cross reference for equations in modelinfo.c
- fix equation display in html in default_profiling.xsl
- fix a bad string comparison (str == "") in systemimpl.c

Belonging to [master]:
  - OpenModelica/OMCompiler#2841
  • Loading branch information
adrpo authored and OpenModelica-Hudson committed Dec 20, 2018
1 parent 434838c commit 4eda4f7
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 6 deletions.
2 changes: 1 addition & 1 deletion Compiler/runtime/systemimpl.c
Expand Up @@ -904,7 +904,7 @@ extern int SystemImpl__copyFile(const char *str_1, const char *str_2)
rv = SystemImpl__createDirectory(str_2);
}

if (str_1 == "")
if (strcmp(str_1, "") == 0)
rv = 0;

char targetFile[100];
Expand Down
2 changes: 1 addition & 1 deletion Compiler/scripts/default_profiling.xsl
Expand Up @@ -133,7 +133,7 @@
<table>
<tr><th class="name">Name</th><th>Variables</th></tr>
<xsl:for-each select="equations/equation">
<tr><td class="name"><a name="{@id}"><xsl:value-of select="@name"/></a></td>
<tr><td class="name"><a name="{@id}"><xsl:value-of select="@id"/></a></td>
<td><xsl:choose>
<xsl:when test="count(refs/ref)=0">&nbsp;</xsl:when>
<xsl:otherwise><xsl:for-each select="refs/ref"><a href="#{@refid}"><xsl:value-of select="id(@refid)/@name"/></a><xsl:if test="position() != last()">, </xsl:if>
Expand Down
46 changes: 42 additions & 4 deletions SimulationRuntime/c/simulation/modelinfo.c
Expand Up @@ -235,7 +235,6 @@ static void printVar(FILE *fout, int level, VAR_INFO* info) {
fprintf(fout, "</variable>\n");
}


static void printFunctions(FILE *fout, FILE *plt, const char *plotFormat, const char *outputPath, const char *modelFilePrefix, DATA *data) {
int i;
for(i=0; i<data->modelData->modelDataXml.nFunctions; i++) {
Expand Down Expand Up @@ -269,13 +268,52 @@ static void printProfileBlocks(FILE *fout, FILE *plt, const char *plotFormat, co
}
}

static void printEquations(FILE *fout, int n, MODEL_DATA_XML *xml) {

static int getVarIdByName(DATA *data, const char* varName)
{
int i;
for(i=0;i<data->modelData->nVariablesReal;++i)
if (strcmp(varName, data->modelData->realVarsData[i].info.name) == 0)
return data->modelData->realVarsData[i].info.id;

for(i=0;i<data->modelData->nParametersReal;++i)
if (strcmp(varName, data->modelData->realParameterData[i].info.name) == 0)
return data->modelData->realParameterData[i].info.id;

for(i=0;i<data->modelData->nVariablesInteger;++i)
if (strcmp(varName, data->modelData->integerVarsData[i].info.name) == 0)
return data->modelData->integerVarsData[i].info.id;

for(i=0;i<data->modelData->nParametersInteger;++i)
if (strcmp(varName, data->modelData->integerParameterData[i].info.name) == 0)
return data->modelData->integerParameterData[i].info.id;

for(i=0;i<data->modelData->nVariablesBoolean;++i)
if (strcmp(varName, data->modelData->integerParameterData[i].info.name) == 0)
return data->modelData->integerParameterData[i].info.id;

for(i=0;i<data->modelData->nParametersBoolean;++i)
if (strcmp(varName, data->modelData->booleanParameterData[i].info.name) == 0)
return data->modelData->booleanParameterData[i].info.id;

for(i=0;i<data->modelData->nVariablesString;++i)
if (strcmp(varName, data->modelData->stringVarsData[i].info.name) == 0)
return data->modelData->stringVarsData[i].info.id;

for(i=0;i<data->modelData->nParametersString;++i)
if (strcmp(varName, data->modelData->stringParameterData[i].info.name) == 0)
return data->modelData->stringParameterData[i].info.id;

return 0;
}

static void printEquations(FILE *fout, int n, MODEL_DATA_XML *xml, DATA *data) {
int i,j;
for(i=0; i<n; i++) {
indent(fout,2);fprintf(fout, "<equation id=\"eq%d\">\n", modelInfoGetEquation(xml,i).id);
indent(fout,4);fprintf(fout, "<refs>\n");
for(j=0; j<modelInfoGetEquation(xml,i).numVar; j++) {
indent(fout,6);fprintf(fout, "<ref refid=\"var%d\" />\n", 0 /* modelInfoGetEquation(xml,i).vars[j]->id */);
indent(fout,6);fprintf(fout, "<ref refid=\"var%d\" />\n", getVarIdByName(data, modelInfoGetEquation(xml,i).vars[j]));
}
indent(fout,4);fprintf(fout, "</refs>\n");
indent(fout,4);fprintf(fout, "<calcinfo time=\"%f\" count=\"%lu\"/>\n", rt_accumulated(SIM_TIMER_FIRST_FUNCTION + xml->nFunctions + xml->nProfileBlocks + modelInfoGetEquation(xml,i).id), (long) rt_ncall(SIM_TIMER_FIRST_FUNCTION + xml->nFunctions + xml->nProfileBlocks + modelInfoGetEquation(xml,i).id));
Expand Down Expand Up @@ -439,7 +477,7 @@ int printModelInfo(DATA *data, threadData_t *threadData, const char *outputPath,
fprintf(fout, "</functions>\n");

fprintf(fout, "<equations>\n");
printEquations(fout, data->modelData->modelDataXml.nEquations, &data->modelData->modelDataXml);
printEquations(fout, data->modelData->modelDataXml.nEquations, &data->modelData->modelDataXml, data);
fprintf(fout, "</equations>\n");

fprintf(fout, "<profileblocks>\n");
Expand Down

0 comments on commit 4eda4f7

Please sign in to comment.