Skip to content

Commit

Permalink
Allocate FMIDimensions individually
Browse files Browse the repository at this point in the history
  • Loading branch information
t-sommer committed Oct 3, 2024
1 parent 940aca4 commit de995e9
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 14 deletions.
2 changes: 1 addition & 1 deletion fmusim-gui/AbstractModelVariablesModel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,7 @@ QVariant AbstractModelVariablesModel::columnData(const FMIModelVariable *variabl

for (size_t i = 0; i < variable->nDimensions; i++) {

FMIDimension* dimension = &variable->dimensions[i];
const FMIDimension* dimension = variable->dimensions[i];

if (i > 0) {
dimensions += ", ";
Expand Down
28 changes: 17 additions & 11 deletions fmusim/FMIModelDescription.c
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ static char* getStringAttribute(const xmlNodePtr node, const char* name) {

FMIDuplicateString(attribute, &value);

xmlFree(attribute);
xmlFree((void*)attribute);

return value;
}
Expand Down Expand Up @@ -295,7 +295,7 @@ static FMIStatus readUnknownsFMI2(xmlXPathContextPtr xpathCtx, FMIModelDescripti

CALL(FMIParseValues(FMIMajorVersion2, FMIUInt32Type, dependenciesLiteral, &unknown->nDependencies, &dependencyIndices));

CALL(FMICalloc(&unknown->dependencies, unknown->nDependencies, sizeof(FMIModelVariable*)));
CALL(FMICalloc((void**)&unknown->dependencies, unknown->nDependencies, sizeof(FMIModelVariable*)));

for (size_t j = 0; j < unknown->nDependencies; j++) {

Expand Down Expand Up @@ -361,7 +361,7 @@ static FMIStatus readUnknownsFMI3(xmlXPathContextPtr xpathCtx, FMIModelDescripti

CALL(FMIParseValues(FMIMajorVersion3, FMIUInt32Type, dependenciesLiteral, &unknown->nDependencies, &dependencyValueReferences));

CALL(FMICalloc(&unknown->dependencies, unknown->nDependencies, sizeof(FMIModelVariable*)));
CALL(FMICalloc((void**)&unknown->dependencies, unknown->nDependencies, sizeof(FMIModelVariable*)));

for (size_t j = 0; j < unknown->nDependencies; j++) {

Expand Down Expand Up @@ -1098,12 +1098,11 @@ static FMIModelDescription* readModelDescriptionFMI3(xmlNodePtr root) {
const char* start = (char*)xmlGetProp(dimensionNode, (xmlChar*)"start");
const char* valueReference = (char*)xmlGetProp(dimensionNode, (xmlChar*)"valueReference");

CALL(FMIRealloc(&variable->dimensions, (variable->nDimensions + 1) * sizeof(FMIDimension)));
CALL(FMIRealloc((void**)& variable->dimensions, (variable->nDimensions + 1) * sizeof(FMIDimension*)));

FMIDimension* dimension = &variable->dimensions[variable->nDimensions];
FMIDimension* dimension;

dimension->start = 0;
dimension->variable = NULL;
CALL(FMICalloc(&dimension, 1, sizeof(FMIDimension)));

if (start) {
dimension->start = atoi(start);
Expand All @@ -1116,10 +1115,10 @@ static FMIModelDescription* readModelDescriptionFMI3(xmlNodePtr root) {
return NULL;
}

xmlFree(start);
xmlFree(valueReference);
xmlFree((void*)start);
xmlFree((void*)valueReference);

variable->nDimensions++;
variable->dimensions[variable->nDimensions++] = dimension;
}

xmlXPathFreeObject(xpathObj2);
Expand Down Expand Up @@ -1264,7 +1263,7 @@ FMIModelDescription* FMIReadModelDescription(const char* filename) {

TERMINATE:

xmlFree(fmiVersion);
xmlFree((void*)fmiVersion);

if (vctxt) {
xmlSchemaFreeValidCtxt(vctxt);
Expand Down Expand Up @@ -1389,13 +1388,20 @@ void FMIFreeModelDescription(FMIModelDescription* modelDescription) {
FMIModelVariable* variable = modelDescription->modelVariables[i];

if (variable) {

FMIFree((void**)&variable->name);
FMIFree((void**)&variable->min);
FMIFree((void**)&variable->max);
FMIFree((void**)&variable->nominal);
FMIFree((void**)&variable->start);
FMIFree((void**)&variable->description);

for (size_t j = 0; j < variable->nDimensions; j++) {
FMIFree(&variable->dimensions[j]);
}

FMIFree((void**)&variable->dimensions);

FMIFree(&variable);
}
}
Expand Down
2 changes: 1 addition & 1 deletion fmusim/FMIModelDescription.h
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ struct FMIModelVariable {
FMIVariability variability;
FMIInitial initial;
size_t nDimensions;
FMIDimension* dimensions;
FMIDimension** dimensions;
FMIModelVariable* derivative;
FMIUnit* unit;
bool relativeQuantity;
Expand Down
2 changes: 1 addition & 1 deletion fmusim/FMIUtil.c
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ FMIStatus FMIGetValues(

for (size_t j = 0; j < variable->nDimensions; j++) {

const FMIDimension* dimension = &variable->dimensions[j];
const FMIDimension* dimension = variable->dimensions[j];

fmi3UInt64 extent;

Expand Down

0 comments on commit de995e9

Please sign in to comment.