From b3f78302459ff2e8dd0730706995f033d1855f2d Mon Sep 17 00:00:00 2001 From: Phil Miller Date: Thu, 25 Sep 2025 17:43:54 -0700 Subject: [PATCH 1/2] Fix typo in log message --- src/bmi_serialization.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bmi_serialization.cpp b/src/bmi_serialization.cpp index dbec202..03a3448 100644 --- a/src/bmi_serialization.cpp +++ b/src/bmi_serialization.cpp @@ -89,7 +89,7 @@ const int serialize_topmodel(Bmi* bmi) { try { archive << serializer; } catch (const std::exception& e) { - Log(LogLevel::SEVERE, "Serializing Topmodel encounterd an error: %s", e.what()); + Log(LogLevel::SEVERE, "Serializing Topmodel encountered an error: %s", e.what()); return BMI_FAILURE; } // copy serialized data into topmodel data From a0647517294daf7fb48d2488f7c47a11aadb0791 Mon Sep 17 00:00:00 2001 From: Phil Miller Date: Thu, 25 Sep 2025 17:44:54 -0700 Subject: [PATCH 2/2] Adapt serialization to revised protocol --- src/bmi_topmodel.c | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/src/bmi_topmodel.c b/src/bmi_topmodel.c index 5592d17..54f3256 100755 --- a/src/bmi_topmodel.c +++ b/src/bmi_topmodel.c @@ -643,6 +643,9 @@ static int Get_var_type(Bmi *self, const char *name, char *type) { if (strcmp(name, "serialization_create") == 0) { strncpy(type, "uint64_t", BMI_MAX_TYPE_NAME); return BMI_SUCCESS; + } else if (strcmp(name, "serialization_size") == 0) { + strncpy(type, "uint64_t", BMI_MAX_TYPE_NAME); + return BMI_SUCCESS; } else if (strcmp(name, "serialization_state") == 0) { strncpy(type, "char", BMI_MAX_TYPE_NAME); return BMI_SUCCESS; @@ -773,7 +776,7 @@ static int Get_var_nbytes(Bmi *self, const char *name, int *nbytes) { } // special cases for save state if (item_count < 1) { - if (strcmp(name, "serialization_create") == 0 || strcmp(name, "serialization_free") == 0) { + if (strcmp(name, "serialization_create") == 0 || strcmp(name, "serialization_size") == 0 || strcmp(name, "serialization_free") == 0) { item_count = 1; } else if (strcmp(name, "serialization_state") == 0) { topmodel_model* model = (topmodel_model*)self->data; @@ -975,14 +978,14 @@ static int Get_value_ptr(Bmi *self, const char *name, void **dest) { } // serialization commands - if (strcmp(name, "serialization_create") == 0) { - // create new serialized data - if (serialize_topmodel(self) != BMI_SUCCESS) - return BMI_FAILURE; + if (strcmp(name, "serialization_size") == 0) { topmodel_model* topmodel = (topmodel_model*)self->data; - *dest = &topmodel->serialized_length; + if (topmodel->serialized == NULL) + return BMI_FAILURE; + *dest = (void*)&topmodel->serialized_length; return BMI_SUCCESS; - } else if (strcmp(name, "serialization_state") == 0) { + } + if (strcmp(name, "serialization_state") == 0) { topmodel_model* topmodel = (topmodel_model*)self->data; if (topmodel->serialized == NULL) return BMI_FAILURE; @@ -1043,6 +1046,11 @@ static int Set_value(Bmi *self, const char *name, void *array) { model->serialized = NULL; model->serialized_length = 0; return BMI_SUCCESS; + } else if (strcmp(name, "serialization_create") == 0) { + // create new serialized data + if (serialize_topmodel(self) != BMI_SUCCESS) + return BMI_FAILURE; + return BMI_SUCCESS; } else if (strcmp(name, "serialization_state") == 0) { if (deserialize_topmodel(self, (char*)array) == BMI_SUCCESS) { topmodel_model* model = (topmodel_model*)self->data; @@ -1055,9 +1063,6 @@ static int Set_value(Bmi *self, const char *name, void *array) { } else { return BMI_FAILURE; } - } else if (strcmp(name, "serialization_create") == 0) { - Log(WARNING, "Cannot set a value with \"serialization_create\"."); - return BMI_FAILURE; } if (self->get_value_ptr(self, name, &dest) == BMI_FAILURE)