Skip to content

Commit

Permalink
Change array_alloc_x_array to take array_t as input instead of `arr…
Browse files Browse the repository at this point in the history
…ay_t*` (solves codegen issues for MSL trunk)

git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@22592 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
  • Loading branch information
sjoelund committed Oct 5, 2014
1 parent 56b8c15 commit 4e965d2
Show file tree
Hide file tree
Showing 11 changed files with 107 additions and 115 deletions.
2 changes: 1 addition & 1 deletion Compiler/Template/CodegenC.tpl
Expand Up @@ -9259,7 +9259,7 @@ case ARRAY(__) then
let scalarPrefix = if scalar then "scalar_" else ""
let scalarRef = if scalar then "&" else ""
let params = (array |> e =>
let prefix = if scalar then '(<%expTypeFromExpModelica(e)%>)' else '&'
let prefix = if scalar then '(<%expTypeFromExpModelica(e)%>)' else ""
'<%prefix%><%daeExp(e, context, &preExp, &varDecls, &auxFunction)%>'
;separator=", ")
let &preExp += 'array_alloc_<%scalarPrefix%><%arrayTypeStr%>(&<%arrayVar%>, <%listLength(array)%><%if params then ", "%><%params%>);<%\n%>'
Expand Down
24 changes: 12 additions & 12 deletions SimulationRuntime/c/util/base_array.c
Expand Up @@ -94,17 +94,17 @@ int base_array_ok(const base_array_t *a)
* Checks that all arrays have the same number of dimensions and same
* dimension sizes.
*/
void check_base_array_dim_sizes(const base_array_t * const *elts, int n)
void check_base_array_dim_sizes(const base_array_t *elts, int n)
{
int i, curdim;
int ndims = elts[0]->ndims;
int ndims = elts[0].ndims;
for(i = 1; i < n; ++i) {
assert(elts[i]->ndims == ndims && "Not same number of dimensions");
assert(elts[i].ndims == ndims && "Not same number of dimensions");
}
for(curdim = 0; curdim < ndims; ++curdim) {
int dimsize = elts[0]->dim_size[curdim];
int dimsize = elts[0].dim_size[curdim];
for(i = 1; i < n; ++i) {
assert(dimsize == elts[i]->dim_size[curdim]
assert(dimsize == elts[i].dim_size[curdim]
&& "Dimensions size not same");
}
}
Expand All @@ -114,22 +114,22 @@ void check_base_array_dim_sizes(const base_array_t * const *elts, int n)
* Checks that all arrays have the same number of dimensions and same
* dimension sizes for all sizes except for dimension k.
*/
void check_base_array_dim_sizes_except(int k, const base_array_t * const *elts, int n)
void check_base_array_dim_sizes_except(int k, const base_array_t *elts, int n)
{
int i, curdim, dimsize;
int k_loc = k - 1;
int ndims = elts[0]->ndims;
int ndims = elts[0].ndims;
for(i = 1; i < n; ++i) {
assert(elts[i]->ndims == ndims && "Not same number of dimensions");
assert(elts[i].ndims == ndims && "Not same number of dimensions");
}
for(curdim = 0; curdim < ndims; ++curdim) {
if(curdim != k_loc) {
assert(elts[0]);
assert(elts[0]->dim_size[curdim]);
dimsize = elts[0]->dim_size[curdim];
assert(elts);
assert(elts[0].dim_size[curdim]);
dimsize = elts[0].dim_size[curdim];

for(i = 1; i < n; ++i) {
assert(dimsize == elts[i]->dim_size[curdim]
assert(dimsize == elts[i].dim_size[curdim]
&& "Dimensions size not same");
}
}
Expand Down
4 changes: 2 additions & 2 deletions SimulationRuntime/c/util/base_array.h
Expand Up @@ -78,8 +78,8 @@ static OMC_INLINE int size_of_dimension_base_array(const base_array_t a, int i)

/* Helper functions */
int base_array_ok(const base_array_t *a);
void check_base_array_dim_sizes(const base_array_t * const *elts, int n);
void check_base_array_dim_sizes_except(int k, const base_array_t * const *elts, int n);
void check_base_array_dim_sizes(const base_array_t *elts, int n);
void check_base_array_dim_sizes_except(int k, const base_array_t *elts, int n);
int base_array_shape_eq(const base_array_t *a, const base_array_t *b);
int base_array_one_element_ok(const base_array_t *a);

Expand Down
44 changes: 21 additions & 23 deletions SimulationRuntime/c/util/boolean_array.c
Expand Up @@ -514,69 +514,67 @@ void simple_index_boolean_array2(const boolean_array_t* source,
}
}

void array_boolean_array(boolean_array_t* dest,int n,boolean_array_t* first,...)
void array_boolean_array(boolean_array_t* dest,int n,boolean_array_t first,...)
{
int i,j,c;
va_list ap;

boolean_array_t **elts=(boolean_array_t**)malloc(sizeof(boolean_array_t *) * n);
boolean_array_t *elts=(boolean_array_t*)malloc(sizeof(boolean_array_t) * n);
assert(elts);
/* collect all array ptrs to simplify traversal.*/
va_start(ap,first);
elts[0] = first;
for(i = 1; i < n; ++i) {
elts[i] = va_arg(ap, boolean_array_t*);
elts[i] = va_arg(ap, boolean_array_t);
}
va_end(ap);

check_base_array_dim_sizes((const base_array_t **)elts,n);
check_base_array_dim_sizes(elts,n);

for(i = 0, c = 0; i < n; ++i) {
int m = base_array_nr_of_elements(*elts[i]);
int m = base_array_nr_of_elements(elts[i]);
for(j = 0; j < m; ++j) {
boolean_set(dest, c, boolean_get(*elts[i], j));
boolean_set(dest, c, boolean_get(elts[i], j));
c++;
}
}
free(elts);
}

void array_alloc_boolean_array(boolean_array_t* dest, int n,
boolean_array_t* first,...)
boolean_array_t first,...)
{
int i,j,c;
va_list ap;

boolean_array_t **elts = (boolean_array_t**)malloc(sizeof(boolean_array_t *) * n);
boolean_array_t *elts = (boolean_array_t*)malloc(sizeof(boolean_array_t) * n);
assert(elts);
/* collect all array ptrs to simplify traversal.*/
va_start(ap,first);
elts[0] = first;
for(i = 1; i < n; ++i) {
elts[i] = va_arg(ap, boolean_array_t*);
elts[i] = va_arg(ap, boolean_array_t);
}
va_end(ap);

check_base_array_dim_sizes((const base_array_t **)elts,n);

if(first->ndims == 1) {
alloc_boolean_array(dest,2,n,first->dim_size[0]);
} else if(first->ndims == 2) {
alloc_boolean_array(dest,3,n,first->dim_size[0],first->dim_size[1]);
} else if(first->ndims == 3) {
alloc_boolean_array(dest,4,n,first->dim_size[0],first->dim_size[1],
first->dim_size[2]);
} else if(first->ndims == 4) {
alloc_boolean_array(dest,5,n,first->dim_size[0],first->dim_size[1],
first->dim_size[2],first->dim_size[3]);
check_base_array_dim_sizes(elts,n);

if(first.ndims == 1) {
alloc_boolean_array(dest, 2, n, first.dim_size[0]);
} else if(first.ndims == 2) {
alloc_boolean_array(dest, 3, n, first.dim_size[0], first.dim_size[1]);
} else if(first.ndims == 3) {
alloc_boolean_array(dest, 4, n, first.dim_size[0],first.dim_size[1], first.dim_size[2]);
} else if(first.ndims == 4) {
alloc_boolean_array(dest, 5, n, first.dim_size[0], first.dim_size[1], first.dim_size[2], first.dim_size[3]);
} else {
assert(0 && "Dimension size > 4 not impl. yet");
}

for(i = 0, c = 0; i < n; ++i) {
int m = base_array_nr_of_elements(*elts[i]);
int m = base_array_nr_of_elements(elts[i]);
for(j = 0; j < m; ++j) {
boolean_set(dest, c, boolean_get(*elts[i], j));
boolean_set(dest, c, boolean_get(elts[i], j));
c++;
}
}
Expand Down
4 changes: 2 additions & 2 deletions SimulationRuntime/c/util/boolean_array.h
Expand Up @@ -145,9 +145,9 @@ extern void simple_index_boolean_array2(const boolean_array_t* source,

/* array(A,B,C) for arrays A,B,C */
extern void array_boolean_array(boolean_array_t* dest,int n,
boolean_array_t* first,...);
boolean_array_t first,...);
extern void array_alloc_boolean_array(boolean_array_t* dest,int n,
boolean_array_t* first,...);
boolean_array_t first,...);

/* array(s1,s2,s3) for scalars s1,s2,s3 */
extern void array_scalar_boolean_array(boolean_array_t* dest,int n,
Expand Down
44 changes: 21 additions & 23 deletions SimulationRuntime/c/util/integer_array.c
Expand Up @@ -508,69 +508,67 @@ void simple_index_integer_array2(const integer_array_t * source,
}
}

void array_integer_array(integer_array_t* dest,int n,integer_array_t* first,...)
void array_integer_array(integer_array_t* dest,int n,integer_array_t first,...)
{
int i,j,c;
va_list ap;

integer_array_t **elts=(integer_array_t**)malloc(sizeof(integer_array_t *) * n);
integer_array_t *elts=(integer_array_t*)malloc(sizeof(integer_array_t) * n);
assert(elts);
/* collect all array ptrs to simplify traversal.*/
va_start(ap,first);
elts[0] = first;
for(i = 1; i < n; ++i) {
elts[i] = va_arg(ap, integer_array_t*);
elts[i] = va_arg(ap, integer_array_t);
}
va_end(ap);

check_base_array_dim_sizes((const base_array_t **)elts,n);
check_base_array_dim_sizes(elts,n);

for(i = 0, c = 0; i < n; ++i) {
int m = base_array_nr_of_elements(*elts[i]);
int m = base_array_nr_of_elements(elts[i]);
for(j = 0; j < m; ++j) {
integer_set(dest, c, integer_get(*elts[i], j));
integer_set(dest, c, integer_get(elts[i], j));
c++;
}
}
free(elts);
}

void array_alloc_integer_array(integer_array_t* dest,int n,
integer_array_t* first,...)
integer_array_t first,...)
{
int i,j,c;
va_list ap;

integer_array_t **elts=(integer_array_t**)malloc(sizeof(integer_array_t *) * n);
integer_array_t *elts=(integer_array_t*)malloc(sizeof(integer_array_t) * n);
assert(elts);
/* collect all array ptrs to simplify traversal.*/
va_start(ap,first);
elts[0] = first;
for(i = 1; i < n; ++i) {
elts[i] = va_arg(ap, integer_array_t*);
elts[i] = va_arg(ap, integer_array_t);
}
va_end(ap);

check_base_array_dim_sizes((const base_array_t **)elts,n);

if(first->ndims == 1) {
alloc_integer_array(dest,2,n,first->dim_size[0]);
} else if(first->ndims == 2) {
alloc_integer_array(dest,3,n,first->dim_size[0],first->dim_size[1]);
} else if(first->ndims == 3) {
alloc_integer_array(dest,4,n,first->dim_size[0],first->dim_size[1],
first->dim_size[2]);
} else if(first->ndims == 4) {
alloc_integer_array(dest,5,n,first->dim_size[0],first->dim_size[1],
first->dim_size[2],first->dim_size[3]);
check_base_array_dim_sizes(elts,n);

if(first.ndims == 1) {
alloc_integer_array(dest, 2, n, first.dim_size[0]);
} else if(first.ndims == 2) {
alloc_integer_array(dest, 3, n, first.dim_size[0], first.dim_size[1]);
} else if(first.ndims == 3) {
alloc_integer_array(dest, 4, n, first.dim_size[0], first.dim_size[1], first.dim_size[2]);
} else if(first.ndims == 4) {
alloc_integer_array(dest, 5, n, first.dim_size[0], first.dim_size[1], first.dim_size[2], first.dim_size[3]);
} else {
assert(0 && "Dimension size > 4 not impl. yet");
}

for(i = 0, c = 0; i < n; ++i) {
int m = base_array_nr_of_elements(*elts[i]);
int m = base_array_nr_of_elements(elts[i]);
for(j = 0; j < m; ++j) {
integer_set(dest, c, integer_get(*elts[i], j));
integer_set(dest, c, integer_get(elts[i], j));
c++;
}
}
Expand Down
4 changes: 2 additions & 2 deletions SimulationRuntime/c/util/integer_array.h
Expand Up @@ -146,9 +146,9 @@ extern void simple_index_integer_array2(const integer_array_t * source,

/* array(A,B,C) for arrays A,B,C */
extern void array_integer_array(integer_array_t* dest,int n,
integer_array_t* first,...);
integer_array_t first,...);
extern void array_alloc_integer_array(integer_array_t* dest,int n,
integer_array_t* first,...);
integer_array_t first,...);

/* array(s1,s2,s3) for scalars s1,s2,s3 */
extern void array_scalar_integer_array(integer_array_t* dest,int n,
Expand Down
44 changes: 21 additions & 23 deletions SimulationRuntime/c/util/real_array.c
Expand Up @@ -549,68 +549,66 @@ void simple_index_real_array2(const real_array_t * source,
}
}

void array_real_array(real_array_t* dest,int n,real_array_t* first,...)
void array_real_array(real_array_t* dest,int n,real_array_t first,...)
{
int i,j,c;
va_list ap;

real_array_t **elts = (real_array_t**)malloc(sizeof(real_array_t *) * n);
real_array_t *elts = (real_array_t*)malloc(sizeof(real_array_t) * n);
assert(elts);
/* collect all array ptrs to simplify traversal.*/
va_start(ap,first);
elts[0] = first;
for(i = 1; i < n; ++i) {
elts[i] = va_arg(ap, real_array_t*);
elts[i] = va_arg(ap, real_array_t);
}
va_end(ap);

check_base_array_dim_sizes((const base_array_t **)elts,n);
check_base_array_dim_sizes(elts,n);

for(i = 0, c = 0; i < n; ++i) {
int m = base_array_nr_of_elements(*elts[i]);
int m = base_array_nr_of_elements(elts[i]);
for(j = 0; j < m; ++j) {
real_set(dest, c, real_get(*elts[i], j));
real_set(dest, c, real_get(elts[i], j));
c++;
}
}
free(elts);
}

void array_alloc_real_array(real_array_t* dest, int n, real_array_t* first,...)
void array_alloc_real_array(real_array_t* dest, int n, real_array_t first,...)
{
int i,j,c;
va_list ap;

real_array_t **elts = (real_array_t**)malloc(sizeof(real_array_t *) * n);
real_array_t *elts = (real_array_t*)malloc(sizeof(real_array_t) * n);
assert(elts);
/* collect all array ptrs to simplify traversal.*/
va_start(ap,first);
elts[0] = first;
for(i = 1; i < n; ++i) {
elts[i] = va_arg(ap, real_array_t*);
elts[i] = va_arg(ap, real_array_t);
}
va_end(ap);

check_base_array_dim_sizes((const base_array_t **)elts,n);

if(first->ndims == 1) {
alloc_real_array(dest,2,n,first->dim_size[0]);
} else if(first->ndims == 2) {
alloc_real_array(dest,3,n,first->dim_size[0],first->dim_size[1]);
} else if(first->ndims == 3) {
alloc_real_array(dest,4,n,first->dim_size[0],first->dim_size[1],
first->dim_size[2]);
} else if(first->ndims == 4) {
alloc_real_array(dest,5,n,first->dim_size[0],first->dim_size[1],
first->dim_size[2],first->dim_size[3]);
check_base_array_dim_sizes(elts,n);

if (first.ndims == 1) {
alloc_real_array(dest,2, n, first.dim_size[0]);
} else if (first.ndims == 2) {
alloc_real_array(dest,3, n, first.dim_size[0], first.dim_size[1]);
} else if (first.ndims == 3) {
alloc_real_array(dest,4, n, first.dim_size[0], first.dim_size[1], first.dim_size[2]);
} else if (first.ndims == 4) {
alloc_real_array(dest, 5, n, first.dim_size[0], first.dim_size[1], first.dim_size[2], first.dim_size[3]);
} else {
assert(0 && "Dimension size > 4 not impl. yet");
}

for(i = 0, c = 0; i < n; ++i) {
int m = base_array_nr_of_elements(*elts[i]);
int m = base_array_nr_of_elements(elts[i]);
for(j = 0; j < m; ++j) {
real_set(dest, c, real_get(*elts[i], j));
real_set(dest, c, real_get(elts[i], j));
c++;
}
}
Expand Down
4 changes: 2 additions & 2 deletions SimulationRuntime/c/util/real_array.h
Expand Up @@ -140,8 +140,8 @@ extern void simple_index_real_array2(const real_array_t * source,
real_array_t* dest);

/* array(A,B,C) for arrays A,B,C */
extern void array_real_array(real_array_t* dest,int n,real_array_t* first,...);
extern void array_alloc_real_array(real_array_t* dest,int n,real_array_t* first,...);
extern void array_real_array(real_array_t* dest,int n,real_array_t first,...);
extern void array_alloc_real_array(real_array_t* dest,int n,real_array_t first,...);

/* array(s1,s2,s3) for scalars s1,s2,s3 */
extern void array_scalar_real_array(real_array_t* dest,int n,modelica_real first,...);
Expand Down

0 comments on commit 4e965d2

Please sign in to comment.