void array_real_array(real_array_t* dest,int n,real_array_t* first,...) { int i,j,c,m; va_list ap; 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*); } va_end(ap); check_base_array_dim_sizes((const base_array_t **)elts,n); for (i = 0, c = 0; i < n; ++i) { m = base_array_nr_of_elements(elts[i]); for (j = 0; j < m; ++j) { real_set(dest, c, real_get(elts[i], j)); c++; } } free(elts); }
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); 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); } va_end(ap); check_base_array_dim_sizes(elts,n); for(i = 0, c = 0; i < n; ++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)); c++; } } free(elts); }
void array_alloc_real_array(real_array_t* dest, int n, real_array_t* first,...) { int i,j,c,m; va_list ap; 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*); } 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]); } else { assert(0 && "Dimension size > 4 not impl. yet"); } for (i = 0, c = 0; i < n; ++i) { m = base_array_nr_of_elements(elts[i]); for (j = 0; j < m; ++j) { real_set(dest, c, real_get(elts[i], j)); c++; } } free(elts); }