Skip to content

Commit

Permalink
Move FMIValidateVariableNames() to FMIValidateModelDescription()
Browse files Browse the repository at this point in the history
  • Loading branch information
t-sommer committed Oct 18, 2023
1 parent b13624c commit 3d00e9b
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 39 deletions.
62 changes: 25 additions & 37 deletions fmusim/FMIModelDescription.c
Original file line number Diff line number Diff line change
Expand Up @@ -186,8 +186,6 @@ static FMIModelDescription* readModelDescriptionFMI1(xmlNodePtr root) {

xmlXPathFreeContext(xpathCtx);

nProblems += FMIValidateVariableNames(modelDescription);

if (nProblems > 0) {
FMIFreeModelDescription(modelDescription);
modelDescription = NULL;
Expand Down Expand Up @@ -403,8 +401,6 @@ static FMIModelDescription* readModelDescriptionFMI2(xmlNodePtr root) {

nProblems += FMIValidateModelDescription(modelDescription);

nProblems += FMIValidateVariableNames(modelDescription);

if (nProblems > 0) {
FMIFreeModelDescription(modelDescription);
modelDescription = NULL;
Expand Down Expand Up @@ -681,8 +677,6 @@ static FMIModelDescription* readModelDescriptionFMI3(xmlNodePtr root) {

nProblems += FMIValidateModelDescription(modelDescription);

nProblems += FMIValidateVariableNames(modelDescription);

if (nProblems > 0) {
FMIFreeModelDescription(modelDescription);
modelDescription = NULL;
Expand Down Expand Up @@ -990,10 +984,35 @@ static bool isLegalCombination(FMIModelVariable* variable) {
return false;
}

void set_input_string(const char* in);

void end_lexical_scan(void);

void yyerror(const FMIModelVariable* variable, const char* s) {
printf("\"%s\" (line %d) is not a valid variable name for variableNamingConvention=\"structured\".\n", variable->name, variable->line);
}

size_t FMIValidateModelDescription(const FMIModelDescription* modelDescription) {

size_t nProblems = 0;

// validate structured variable names
if (modelDescription->variableNamingConvention == FMIStructured) {

for (size_t i = 0; i < modelDescription->nModelVariables; i++) {

const FMIModelVariable* variable = &modelDescription->modelVariables[i];

set_input_string(variable->name);

if (yyparse(variable)) {
nProblems++;
}

end_lexical_scan();
}
}

// check combinations of causality, variability, and initial
for (size_t i = 0; i < modelDescription->nModelVariables; i++) {

Expand Down Expand Up @@ -1025,37 +1044,6 @@ size_t FMIValidateModelDescription(const FMIModelDescription* modelDescription)
return nProblems;
}

/* Declarations */
void set_input_string(const char* in);
void end_lexical_scan(void);

void yyerror(const FMIModelVariable* variable, const char* s) {
printf("\"%s\" (line %d) is not a valid variable name for variableNamingConvention=\"structured\".\n", variable->name, variable->line);
}

size_t FMIValidateVariableNames(const FMIModelDescription* modelDescription) {

size_t nProblems = 0;

if (modelDescription->variableNamingConvention == FMIStructured) {

for (size_t i = 0; i < modelDescription->nModelVariables; i++) {

const FMIModelVariable* variable = &modelDescription->modelVariables[i];

set_input_string(variable->name);

if (yyparse(variable)) {
nProblems++;
}

end_lexical_scan();
}
}

return nProblems;
}

void FMIDumpModelDescription(FMIModelDescription* modelDescription, FILE* file) {

fprintf(file, "FMI Version 3.0\n");
Expand Down
2 changes: 0 additions & 2 deletions fmusim/FMIModelDescription.h
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,4 @@ FMIModelVariable* FMIModelVariableForIndexLiteral(const FMIModelDescription* mod

size_t FMIValidateModelDescription(const FMIModelDescription* modelDescription);

size_t FMIValidateVariableNames(const FMIModelDescription* modelDescription);

void FMIDumpModelDescription(FMIModelDescription* modelDescription, FILE* file);

0 comments on commit 3d00e9b

Please sign in to comment.