Skip to content

Commit 3494f16

Browse files
committed
Cosmetic to improve maintainnability
1 parent 4176cd6 commit 3494f16

File tree

2 files changed

+60
-44
lines changed

2 files changed

+60
-44
lines changed

remoting/communication.c

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -200,32 +200,36 @@ static size_t communication_shm_size(unsigned long nb_reals, unsigned long nb_in
200200
void communication_data_initialize(communication_data_t *data, communication_t *communication) {
201201
char *ptr = (char *)communication->shm + sizeof(communication_shm_t);
202202

203+
/* REALS */
203204
data->reals.value = (void *)ptr;
204-
ptr += sizeof(fmi2Real) * communication->nb_reals;
205+
ptr += sizeof(*data->reals.value) * communication->nb_reals;
206+
207+
data->reals.vr = (void*)ptr;
208+
ptr += sizeof(*data->reals.vr) * communication->nb_reals;
209+
210+
data->reals.changed = (void*)ptr;
211+
ptr += sizeof(*data->reals.changed) * communication->nb_reals;
205212

213+
/* INTEGERS */
206214
data->integers.value = (void *)ptr;
207-
ptr += sizeof(fmi2Integer) * communication->nb_integers;
215+
ptr += sizeof(*data->integers.value) * communication->nb_integers;
208216

209-
data->booleans.value = (void *)ptr;
210-
ptr += sizeof(fmi2Boolean) * communication->nb_booleans;
217+
data->integers.vr = (void*)ptr;
218+
ptr += sizeof(*data->integers.vr) * communication->nb_integers;
211219

212-
data->reals.vr = (void *)ptr;
213-
ptr += sizeof(fmi2ValueReference) * communication->nb_reals;
220+
data->integers.changed = (void*)ptr;
221+
ptr += sizeof(*data->integers.changed) * communication->nb_integers;
214222

215-
data->integers.vr = (void *)ptr;
216-
ptr += sizeof(fmi2ValueReference) * communication->nb_integers;
217223

218-
data->booleans.vr = (void *)ptr;
219-
ptr += sizeof(fmi2ValueReference) * communication->nb_booleans;
220-
221-
data->reals.changed = (void *)ptr;
222-
ptr += sizeof(bool) * communication->nb_reals;
224+
/* BOOLEANS */
225+
data->booleans.value = (void *)ptr;
226+
ptr += sizeof(*data->booleans.value) * communication->nb_booleans;
223227

224-
data->integers.changed = (void *)ptr;
225-
ptr += sizeof(bool) * communication->nb_integers;
228+
data->booleans.vr = (void *)ptr;
229+
ptr += sizeof(*data->booleans.vr) * communication->nb_booleans;
226230

227231
data->booleans.changed = (void *)ptr;
228-
ptr += sizeof(bool) * communication->nb_booleans; /* not needed */
232+
ptr += sizeof(*data->booleans.changed) * communication->nb_booleans; /* not needed */
229233

230234
return;
231235
}

remoting/server.c

Lines changed: 40 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -189,19 +189,25 @@ static server_t* server_new(const char *library_filename, unsigned long ppid, co
189189
server->communication = NULL;
190190
server->library = NULL;
191191

192-
#define ALLOC(_data) \
193-
server->update. _data = malloc(nb_reals * sizeof(*server->update. _data)); \
194-
if (!server->update. _data) { \
195-
server_free(server); \
196-
return NULL; \
192+
#define ALLOC(nb, ptr) \
193+
if (nb) { \
194+
ptr = malloc(sizeof(*ptr)*nb); \
195+
if (!ptr) { \
196+
server_free(server); \
197+
return NULL; \
198+
} \
199+
} else { \
200+
ptr = NULL; \
197201
}
198202

199-
ALLOC(reals.value);
200-
ALLOC(reals.vr);
201-
ALLOC(integers.value);
202-
ALLOC(integers.vr);
203-
ALLOC(booleans.value);
204-
ALLOC(booleans.vr);
203+
ALLOC(nb_reals, server->update.reals.value);
204+
ALLOC(nb_reals, server->update.reals.vr);
205+
ALLOC(nb_integers, server->update.integers.value);
206+
ALLOC(nb_integers, server->update.integers.vr);
207+
ALLOC(nb_booleans, server->update.booleans.value);
208+
ALLOC(nb_booleans, server->update.booleans.vr);
209+
210+
#undef ALLOC
205211

206212
#ifdef WIN32
207213
server->parent_handle = OpenProcess(SYNCHRONIZE, FALSE, ppid);
@@ -320,7 +326,7 @@ static fmi2Status do_step(server_t *server) {
320326
fmi2Status status;
321327

322328
unsigned long nb_reals = 0;
323-
for(unsigned long i = 0; i < server->communication->nb_reals; i += 1) {
329+
for (unsigned long i = 0; i < server->communication->nb_reals; i += 1) {
324330
if (server->data.reals.changed[i]) {
325331
server->update.reals.vr[nb_reals] = server->data.reals.vr[i];
326332
server->update.reals.value[nb_reals] = server->data.reals.value[i];
@@ -383,26 +389,32 @@ static fmi2Status do_step(server_t *server) {
383389
return status;
384390
}
385391

386-
status = server->entries.fmi2GetReal(server->component, server->data.reals.vr,
387-
server->communication->nb_reals, server->data.reals.value);
388-
if (status != fmi2OK) {
389-
LOG_ERROR(server, "Cannot update REALS buffer.");
390-
return status;
391-
}
392392

393-
status = server->entries.fmi2GetInteger(server->component, server->data.integers.vr,
394-
server->communication->nb_integers, server->data.integers.value);
395-
if (status != fmi2OK) {
396-
LOG_ERROR(server, "Cannot update INTEGERS buffer.");
397-
return status;
393+
if (server->communication->nb_reals) {
394+
status = server->entries.fmi2GetReal(server->component, server->data.reals.vr,
395+
server->communication->nb_reals, server->data.reals.value);
396+
if (status != fmi2OK) {
397+
LOG_ERROR(server, "Cannot update REALS buffer.");
398+
return status;
399+
}
398400
}
399401

402+
if (server->communication->nb_integers) {
403+
status = server->entries.fmi2GetInteger(server->component, server->data.integers.vr,
404+
server->communication->nb_integers, server->data.integers.value);
405+
if (status != fmi2OK) {
406+
LOG_ERROR(server, "Cannot update INTEGERS buffer.");
407+
return status;
408+
}
409+
}
400410

401-
status = server->entries.fmi2GetBoolean(server->component, server->data.booleans.vr,
402-
server->communication->nb_booleans, server->data.booleans.value);
403-
if (status != fmi2OK) {
404-
LOG_ERROR(server, "Cannot update BOOLEANS buffer.");
405-
return status;
411+
if (server->communication->nb_booleans) {
412+
status = server->entries.fmi2GetBoolean(server->component, server->data.booleans.vr,
413+
server->communication->nb_booleans, server->data.booleans.value);
414+
if (status != fmi2OK) {
415+
LOG_ERROR(server, "Cannot update BOOLEANS buffer.");
416+
return status;
417+
}
406418
}
407419

408420
return fmi2OK;;

0 commit comments

Comments
 (0)