Skip to content

Commit

Permalink
- use number of allocated elements to check if array has been filled …
Browse files Browse the repository at this point in the history
…completely instead of comparison of fill value. This avoids possible inconsistencies (for reals) and improves overall performance

git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@16799 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
  • Loading branch information
Henning Kiel committed Aug 14, 2013
1 parent dacfab9 commit e33fb17
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 18 deletions.
16 changes: 7 additions & 9 deletions SimulationRuntime/c/util/integer_array.c
Original file line number Diff line number Diff line change
Expand Up @@ -180,7 +180,7 @@ void create_integer_array_from_range(integer_array_t *dest, modelica_integer sta

simple_alloc_1d_integer_array(dest, elements);

for(i = 0; comp_func(start, stop); start += step, ++i) {
for(i = 0; i < elements; start += step, ++i) {
integer_set(dest, i, start);
}
}
Expand All @@ -194,20 +194,18 @@ void create_integer_array_from_range(integer_array_t *dest, modelica_integer sta
void fill_integer_array_from_range(integer_array_t *dest, modelica_integer start, modelica_integer step,
modelica_integer stop/*, size_t dim*/)
{
size_t elements, offset=0;
modelica_integer value;
size_t elements;
size_t i;
modelica_integer value = start;
modelica_integer (*comp_func)(modelica_integer, modelica_integer);

assert(step != 0);

comp_func = (step > 0) ? &integer_le : &integer_ge;
elements = comp_func(start, stop) ? (((stop - start) / step) + 1) : 0;
/*
for(i = 0; i < dim; i++)
offset += dest->dim_size[i];
*/
for(value = start; comp_func(value, stop); value += step, ++offset) {
integer_set(dest, offset, value);

for(i = 0; i < elements; value += step, ++i) {
integer_set(dest, i, value);
}
}

Expand Down
16 changes: 7 additions & 9 deletions SimulationRuntime/c/util/real_array.c
Original file line number Diff line number Diff line change
Expand Up @@ -176,19 +176,17 @@ static modelica_real real_ge(modelica_real x, modelica_real y)
void fill_real_array_from_range(real_array_t *dest, modelica_real start, modelica_real step,
modelica_real stop/*, size_t dim*/)
{
size_t elements, offset=0;
modelica_real value;
size_t elements;
size_t i;
modelica_real value = start;
modelica_real (*comp_func)(modelica_real, modelica_real);
assert(step != 0);

comp_func = (step > 0) ? &real_le : &real_ge;
elements = comp_func(start, stop) ? (((stop - start) / step) + 1) : 0;
/*
for(i = 0; i < dim; i++)
offset += dest->dim_size[i];
*/
for(value = start; comp_func(value, stop); value += step, ++offset) {
real_set(dest, offset, value);

for(i = 0; i < elements; value += step, ++i) {
real_set(dest, i, value);
}
}

Expand Down Expand Up @@ -1702,7 +1700,7 @@ void create_real_array_from_range(real_array_t *dest, modelica_real start, model

simple_alloc_1d_real_array(dest, elements);

for(i = 0; comp_func(start, stop); start += step, ++i) {
for(i = 0; i < elements; start += step, ++i) {
real_set(dest, i, start);
}
}

0 comments on commit e33fb17

Please sign in to comment.