/* * Fills a real array ROW from a range with a start, stop and step value. * The last argument is the row/dimension to be filled. * e.g: Real a[10], b[2][10]; a := 1.0:2.5:10.0; b[1] := 1.0:10.0; * */ 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; size_t i; modelica_real value = start; modelica_real (*comp_func)(modelica_real, modelica_real); omc_assert_macro(step != 0); comp_func = (step > 0) ? &real_le : &real_ge; elements = comp_func(start, stop) ? (((stop - start) / step) + 1) : 0; for(i = 0; i < elements; value += step, ++i) { real_set(dest, i, value); } }
/* * Fills a real array ROW from a range with a start, stop and step value. * The last argument is the row/dimension to be filled. * e.g: Real a[10], b[2][10]; a := 1.0:2.5:10.0; b[1] := 1.0:10.0; * */ 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; 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); } }
/* Creates a real array from a range with a start, stop and step value. * Ex: 1.0:2.0:6.0 => {1.0,3.0,5.0} */ void create_real_array_from_range(real_array_t *dest, modelica_real start, modelica_real step, modelica_real stop) { size_t elements; size_t i; modelica_real (*comp_func)(modelica_real, modelica_real); omc_assert_macro(step != 0); comp_func = (step > 0) ? &real_le : &real_ge; elements = comp_func(start, stop) ? (((stop - start) / step) + 1) : 0; /* fprintf(stderr, "start %g step %g stop %g elements %d\n", start, step, stop, elements); */ simple_alloc_1d_real_array(dest, elements); for(i = 0; i < elements; start += step, ++i) { real_set(dest, i, start); } }