Skip to content
This repository was archived by the owner on May 18, 2019. It is now read-only.

Commit 33fcfcb

Browse files
committed
WIP
1 parent 45b5326 commit 33fcfcb

5 files changed

Lines changed: 69 additions & 75 deletions

File tree

SimulationRuntime/c/meta/meta_modelica.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,11 +61,11 @@ void* mmc_mk_rcon(double d)
6161
return MMC_TAGPTR(p);
6262
}
6363

64-
void* mmc_mk_modelica_array(base_array_t arr)
64+
void* mmc_mk_modelica_array(threadData_t *threadData, base_array_t arr)
6565
{
6666
base_array_t *cpy = mmc_alloc_words(sizeof(arr)/sizeof(void*) + 1);
6767
memcpy(cpy, &arr, sizeof(base_array_t));
68-
clone_base_array_spec(&arr, cpy);
68+
clone_base_array_spec(threadData, &arr, cpy);
6969
/* Note: The data is hopefully not stack-allocated and can be passed this way */
7070
return cpy;
7171
}

SimulationRuntime/c/meta/meta_modelica_data.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,7 @@ typedef int mmc_switch_type;
229229
#define mmc_mk_integer mmc_mk_icon
230230
#define mmc_mk_boolean mmc_mk_bcon
231231
#define mmc_mk_real mmc_mk_rcon
232-
void* mmc_mk_modelica_array(base_array_t);
232+
void* mmc_mk_modelica_array(threadData_t *threadData, base_array_t);
233233

234234
void mmc_catch_dummy_fn();
235235

SimulationRuntime/c/util/base_array.c

Lines changed: 29 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444
** sets all fields in a base_array, i.e. data, ndims and dim_size.
4545
**/
4646

47-
void base_array_create(base_array_t *dest, void *data, int ndims, va_list ap)
47+
void base_array_create(threadData_t *threadData, base_array_t *dest, void *data, int ndims, va_list ap)
4848
{
4949
int i;
5050

@@ -66,7 +66,7 @@ void base_array_create(base_array_t *dest, void *data, int ndims, va_list ap)
6666
*/
6767
}
6868

69-
int base_array_ok(const base_array_t *a)
69+
int base_array_ok(threadData_t *threadData, const base_array_t *a)
7070
{
7171
int i;
7272
if(a == NULL) {
@@ -94,7 +94,7 @@ int base_array_ok(const base_array_t *a)
9494
* Checks that all arrays have the same number of dimensions and same
9595
* dimension sizes.
9696
*/
97-
void check_base_array_dim_sizes(const base_array_t *elts, int n)
97+
void check_base_array_dim_sizes(threadData_t *threadData, const base_array_t *elts, int n)
9898
{
9999
int i, curdim;
100100
int ndims = elts[0].ndims;
@@ -114,7 +114,7 @@ void check_base_array_dim_sizes(const base_array_t *elts, int n)
114114
* Checks that all arrays have the same number of dimensions and same
115115
* dimension sizes for all sizes except for dimension k.
116116
*/
117-
void check_base_array_dim_sizes_except(int k, const base_array_t *elts, int n)
117+
void check_base_array_dim_sizes_except(threadData_t *threadData, int k, const base_array_t *elts, int n)
118118
{
119119
int i, curdim, dimsize;
120120
int k_loc = k - 1;
@@ -136,7 +136,7 @@ void check_base_array_dim_sizes_except(int k, const base_array_t *elts, int n)
136136
}
137137
}
138138

139-
int base_array_shape_eq(const base_array_t *a, const base_array_t *b)
139+
int base_array_shape_eq(threadData_t *threadData, const base_array_t *a, const base_array_t *b)
140140
{
141141
int i;
142142

@@ -156,7 +156,7 @@ int base_array_shape_eq(const base_array_t *a, const base_array_t *b)
156156
return 1;
157157
}
158158

159-
int base_array_one_element_ok(const base_array_t *a)
159+
int base_array_one_element_ok(threadData_t *threadData, const base_array_t *a)
160160
{
161161
int i;
162162

@@ -168,7 +168,7 @@ int base_array_one_element_ok(const base_array_t *a)
168168
return 1;
169169
}
170170

171-
int index_spec_fit_base_array(const index_spec_t *s, const base_array_t *a)
171+
int index_spec_fit_base_array(threadData_t *threadData, const index_spec_t *s, const base_array_t *a)
172172
{
173173
int i, j;
174174

@@ -203,15 +203,15 @@ int index_spec_fit_base_array(const index_spec_t *s, const base_array_t *a)
203203
return 1;
204204
}
205205

206-
void simple_alloc_1d_base_array(base_array_t *dest, int n, void *data)
206+
void simple_alloc_1d_base_array(threadData_t *threadData, base_array_t *dest, int n, void *data)
207207
{
208208
dest->ndims = 1;
209209
dest->dim_size = size_alloc(1);
210210
dest->dim_size[0] = n;
211211
dest->data = data;
212212
}
213213

214-
void simple_alloc_2d_base_array(base_array_t *dest, int r, int c, void *data)
214+
void simple_alloc_2d_base_array(threadData_t *threadData, base_array_t *dest, int r, int c, void *data)
215215
{
216216
dest->ndims = 2;
217217
dest->dim_size = size_alloc(2);
@@ -220,7 +220,7 @@ void simple_alloc_2d_base_array(base_array_t *dest, int r, int c, void *data)
220220
dest->data = data;
221221
}
222222

223-
size_t alloc_base_array(base_array_t *dest, int ndims, va_list ap)
223+
size_t alloc_base_array(threadData_t *threadData, base_array_t *dest, int ndims, va_list ap)
224224
{
225225
int i;
226226
size_t nr_of_elements = 1;
@@ -244,10 +244,10 @@ size_t alloc_base_array(base_array_t *dest, int ndims, va_list ap)
244244
return nr_of_elements;
245245
}
246246

247-
void clone_base_array_spec(const base_array_t *source, base_array_t *dest)
247+
void clone_base_array_spec(threadData_t *threadData, const base_array_t *source, base_array_t *dest)
248248
{
249249
int i;
250-
assert(base_array_ok(source));
250+
assert(base_array_ok(threadData, source));
251251

252252
dest->ndims = source->ndims;
253253
dest->dim_size = size_alloc(dest->ndims);
@@ -262,7 +262,7 @@ void clone_base_array_spec(const base_array_t *source, base_array_t *dest)
262262
a[1:3] := b;
263263
*/
264264

265-
size_t calc_base_index_spec(int ndims, const _index_t *idx_vec,
265+
size_t calc_base_index_spec(threadData_t *threadData, int ndims, const _index_t *idx_vec,
266266
const base_array_t *arr, const index_spec_t *spec)
267267
{
268268
/* idx_vec is zero based */
@@ -271,9 +271,9 @@ size_t calc_base_index_spec(int ndims, const _index_t *idx_vec,
271271
int d2;
272272
size_t index = 0;
273273

274-
assert(base_array_ok(arr));
274+
assert(base_array_ok(threadData, arr));
275275
assert(index_spec_ok(spec));
276-
assert(index_spec_fit_base_array(spec, arr));
276+
assert(index_spec_fit_base_array(threadData, spec, arr));
277277
assert((ndims == arr->ndims) && (ndims == spec->ndims));
278278

279279
index = 0;
@@ -291,7 +291,7 @@ size_t calc_base_index_spec(int ndims, const _index_t *idx_vec,
291291
}
292292

293293
/* Uses zero based indexing */
294-
size_t calc_base_index(int ndims, const _index_t *idx_vec, const base_array_t *arr)
294+
size_t calc_base_index(threadData_t *threadData, int ndims, const _index_t *idx_vec, const base_array_t *arr)
295295
{
296296
int i;
297297
size_t index = 0;
@@ -337,7 +337,7 @@ size_t calc_base_index_dims_subs(threadData_t *threadData, int ndims,...)
337337
}
338338

339339
/* 0-based index*/
340-
size_t calc_base_index_va(const base_array_t *source, int ndims, va_list ap)
340+
size_t calc_base_index_va(threadData_t *threadData, const base_array_t *source, int ndims, va_list ap)
341341
{
342342
int i;
343343
size_t index;
@@ -346,25 +346,24 @@ size_t calc_base_index_va(const base_array_t *source, int ndims, va_list ap)
346346
for(i = 0; i < ndims; ++i) {
347347
int sub_i = va_arg(ap, _index_t) - 1;
348348
if (sub_i < 0 || sub_i >= source->dim_size[i]) {
349-
FILE_INFO info = omc_dummyFileInfo;
350-
omc_assert(NULL, info, "Dimension %d has bounds 1..%d, got array subscript %d", i+1, source->dim_size[i], sub_i+1);
349+
threadData->assert->error(threadData, NULL, "Dimension %d has bounds 1..%d, got array subscript %d", i+1, source->dim_size[i], sub_i+1);
351350
}
352351
index = (index * source->dim_size[i]) + sub_i;
353352
}
354353

355354
return index;
356355
}
357356

358-
int ndims_base_array(const base_array_t* a)
357+
int ndims_base_array(threadData_t *threadData, const base_array_t* a)
359358
{
360-
assert(base_array_ok(a));
359+
assert(base_array_ok(threadData, a));
361360
return a->ndims;
362361
}
363362

364-
void clone_reverse_base_array_spec(const base_array_t* source, base_array_t* dest)
363+
void clone_reverse_base_array_spec(threadData_t *threadData, const base_array_t* source, base_array_t* dest)
365364
{
366365
int i;
367-
assert(base_array_ok(source));
366+
assert(base_array_ok(threadData, source));
368367

369368
dest->ndims = source->ndims;
370369
dest->dim_size = size_alloc(dest->ndims);
@@ -375,16 +374,16 @@ void clone_reverse_base_array_spec(const base_array_t* source, base_array_t* des
375374
}
376375
}
377376

378-
void index_alloc_base_array_size(const real_array_t * source,
377+
void index_alloc_base_array_size(threadData_t *threadData, const real_array_t * source,
379378
const index_spec_t* source_spec,
380379
base_array_t* dest)
381380
{
382381
int i;
383382
int j;
384383

385-
omc_assert_macro(base_array_ok(source));
384+
omc_assert_macro(base_array_ok(threadData, source));
386385
omc_assert_macro(index_spec_ok(source_spec));
387-
omc_assert_macro(index_spec_fit_base_array(source_spec, source));
386+
omc_assert_macro(index_spec_fit_base_array(threadData, source_spec, source));
388387

389388
for(i = 0, j = 0; i < source_spec->ndims; ++i) {
390389
if(source_spec->dim_size[i] != 0) { /* is 'W' or 'A' */
@@ -407,15 +406,15 @@ void index_alloc_base_array_size(const real_array_t * source,
407406
}
408407
}
409408

410-
void indexed_assign_base_array_size_alloc(const base_array_t *source, base_array_t *dest, const index_spec_t *dest_spec, _index_t** _idx_vec1, _index_t** _idx_size)
409+
void indexed_assign_base_array_size_alloc(threadData_t *threadData, const base_array_t *source, base_array_t *dest, const index_spec_t *dest_spec, _index_t** _idx_vec1, _index_t** _idx_size)
411410
{
412411
_index_t* idx_vec1;
413412
_index_t* idx_size;
414413
int i, j;
415-
omc_assert_macro(base_array_ok(source));
416-
omc_assert_macro(base_array_ok(dest));
414+
omc_assert_macro(base_array_ok(threadData, source));
415+
omc_assert_macro(base_array_ok(threadData, dest));
417416
omc_assert_macro(index_spec_ok(dest_spec));
418-
omc_assert_macro(index_spec_fit_base_array(dest_spec, dest));
417+
omc_assert_macro(index_spec_fit_base_array(threadData, dest_spec, dest));
419418
for(i = 0,j = 0; i < dest_spec->ndims; ++i) {
420419
if(dest_spec->dim_size[i] != 0) {
421420
++j;

SimulationRuntime/c/util/base_array.h

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -36,24 +36,24 @@
3636
#include <stdarg.h>
3737
#include "omc_msvc.h"
3838

39-
static OMC_INLINE size_t getIndex_2D(_index_t *dim, int i, int j) {return i*dim[1]+j;}
40-
static OMC_INLINE size_t getIndex_3D(_index_t *dim, int i, int j, int k) {return i*dim[1]*dim[2]+j*dim[2]+k;}
41-
static OMC_INLINE size_t getIndex_4D(_index_t *dim, int i, int j, int k, int l) {return i*dim[1]*dim[2]*dim[3]+j*dim[2]*dim[3]+k*dim[3]+l;}
39+
static OMC_INLINE size_t getIndex_2D(threadData_t *threadData, _index_t *dim, int i, int j) {return i*dim[1]+j;}
40+
static OMC_INLINE size_t getIndex_3D(threadData_t *threadData, _index_t *dim, int i, int j, int k) {return i*dim[1]*dim[2]+j*dim[2]+k;}
41+
static OMC_INLINE size_t getIndex_4D(threadData_t *threadData, _index_t *dim, int i, int j, int k, int l) {return i*dim[1]*dim[2]*dim[3]+j*dim[2]*dim[3]+k*dim[3]+l;}
4242

4343
/* Settings the fields of a base_array */
44-
void base_array_create(base_array_t *dest, void *data, int ndims, va_list ap);
44+
void base_array_create(threadData_t *threadData, base_array_t *dest, void *data, int ndims, va_list ap);
4545

4646
/* Allocation of a vector */
47-
void simple_alloc_1d_base_array(base_array_t *dest, int n, void *data);
47+
void simple_alloc_1d_base_array(threadData_t *threadData, base_array_t *dest, int n, void *data);
4848

4949
/* Allocation of a matrix */
50-
void simple_alloc_2d_base_array(base_array_t *dest, int r, int c, void *data);
50+
void simple_alloc_2d_base_array(threadData_t *threadData, base_array_t *dest, int r, int c, void *data);
5151

5252
/* Allocate array */
53-
size_t alloc_base_array(base_array_t *dest, int ndims, va_list ap);
53+
size_t alloc_base_array(threadData_t *threadData, base_array_t *dest, int ndims, va_list ap);
5454

5555
/* Number of elements in array. */
56-
static OMC_INLINE size_t base_array_nr_of_elements(const base_array_t a)
56+
static OMC_INLINE size_t base_array_nr_of_elements(threadData_t *threadData, const base_array_t a)
5757
{
5858
int i;
5959
size_t nr_of_elements = 1;
@@ -64,12 +64,12 @@ static OMC_INLINE size_t base_array_nr_of_elements(const base_array_t a)
6464
}
6565

6666
/* Clones fields */
67-
void clone_base_array_spec(const base_array_t *source, base_array_t *dest);
67+
void clone_base_array_spec(threadData_t *threadData, const base_array_t *source, base_array_t *dest);
6868

69-
void clone_reverse_base_array_spec(const base_array_t* source, base_array_t* dest);
69+
void clone_reverse_base_array_spec(threadData_t *threadData, const base_array_t* source, base_array_t* dest);
7070

71-
int ndims_base_array(const base_array_t* a);
72-
static OMC_INLINE int size_of_dimension_base_array(const base_array_t a, int i)
71+
int ndims_base_array(threadData_t *threadData, const base_array_t* a);
72+
static OMC_INLINE int size_of_dimension_base_array(threadData_t *threadData, const base_array_t a, int i)
7373
{
7474
/* assert(base_array_ok(&a)); */
7575
if ((i > 0) && (i <= a.ndims)) {
@@ -89,24 +89,24 @@ static OMC_INLINE int size_of_dimension_base_array(const base_array_t a, int i)
8989
}
9090

9191
/* Helper functions */
92-
int base_array_ok(const base_array_t *a);
93-
void check_base_array_dim_sizes(const base_array_t *elts, int n);
94-
void check_base_array_dim_sizes_except(int k, const base_array_t *elts, int n);
95-
int base_array_shape_eq(const base_array_t *a, const base_array_t *b);
96-
int base_array_one_element_ok(const base_array_t *a);
92+
int base_array_ok(threadData_t *threadData, const base_array_t *a);
93+
void check_base_array_dim_sizes(threadData_t *threadData, const base_array_t *elts, int n);
94+
void check_base_array_dim_sizes_except(threadData_t *threadData, int k, const base_array_t *elts, int n);
95+
int base_array_shape_eq(threadData_t *threadData, const base_array_t *a, const base_array_t *b);
96+
int base_array_one_element_ok(threadData_t *threadData, const base_array_t *a);
9797

98-
size_t calc_base_index_spec(int ndims, const _index_t* idx_vec,
98+
size_t calc_base_index_spec(threadData_t *threadData, int ndims, const _index_t* idx_vec,
9999
const base_array_t *arr, const index_spec_t *spec);
100-
size_t calc_base_index(int ndims, const _index_t *idx_vec, const base_array_t *arr);
101-
size_t calc_base_index_va(const base_array_t *source, int ndims, va_list ap);
100+
size_t calc_base_index(threadData_t *threadData, int ndims, const _index_t *idx_vec, const base_array_t *arr);
101+
size_t calc_base_index_va(threadData_t *threadData, const base_array_t *source, int ndims, va_list ap);
102102

103103
size_t calc_base_index_dims_subs(threadData_t *threadData, int ndims, ...);
104104

105-
int index_spec_fit_base_array(const index_spec_t *s, const base_array_t *a);
105+
int index_spec_fit_base_array(threadData_t *threadData, const index_spec_t *s, const base_array_t *a);
106106

107107
/* Helper function for index_alloc_TYPE_array; allocates the ndims and dim_size */
108-
void index_alloc_base_array_size(const base_array_t * source, const index_spec_t* source_spec, base_array_t* dest);
108+
void index_alloc_base_array_size(threadData_t *threadData, const base_array_t * source, const index_spec_t* source_spec, base_array_t* dest);
109109
/* Helper function for indexed_assign_TYPE_array; allocates the ndims and dim_size */
110-
void indexed_assign_base_array_size_alloc(const base_array_t *source, base_array_t *dest, const index_spec_t *dest_spec, _index_t** _idx_vec1, _index_t** _idx_size);
110+
void indexed_assign_base_array_size_alloc(threadData_t *threadData, const base_array_t *source, base_array_t *dest, const index_spec_t *dest_spec, _index_t** _idx_vec1, _index_t** _idx_size);
111111

112112
#endif /* BASE_ARRAY_H_ */

SimulationRuntime/c/util/boolean_array.h

Lines changed: 14 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -37,53 +37,48 @@
3737
#include "omc_msvc.h"
3838
#include <stdarg.h>
3939

40-
static OMC_INLINE modelica_boolean boolean_get(const boolean_array_t a, size_t i)
40+
static OMC_INLINE modelica_boolean boolean_get(threadData_t *threadData, const boolean_array_t a, size_t i)
4141
{
4242
return ((modelica_boolean *) a.data)[i];
4343
}
4444

45-
static OMC_INLINE modelica_boolean boolean_get_2D(const boolean_array_t a, size_t i, size_t j)
45+
static OMC_INLINE modelica_boolean boolean_get_2D(threadData_t *threadData, const boolean_array_t a, size_t i, size_t j)
4646
{
4747
return boolean_get(a, getIndex_2D(a.dim_size,i,j));
4848
}
4949

50-
static OMC_INLINE modelica_boolean boolean_get_3D(const boolean_array_t a, size_t i, size_t j, size_t k)
50+
static OMC_INLINE modelica_boolean boolean_get_3D(threadData_t *threadData, const boolean_array_t a, size_t i, size_t j, size_t k)
5151
{
5252
return boolean_get(a, getIndex_3D(a.dim_size,i,j,k));
5353
}
5454

55-
static OMC_INLINE modelica_boolean boolean_get_4D(const boolean_array_t a, size_t i, size_t j, size_t k, size_t l)
55+
static OMC_INLINE modelica_boolean boolean_get_4D(threadData_t *threadData, const boolean_array_t a, size_t i, size_t j, size_t k, size_t l)
5656
{
5757
return boolean_get(a, getIndex_4D(a.dim_size,i,j,k,l));
5858
}
5959

6060
/* Setting the fields of a boolean_array */
61-
extern void boolean_array_create(boolean_array_t *dest, modelica_boolean *data, int ndims, ...);
61+
extern void boolean_array_create(threadData_t *threadData, boolean_array_t *dest, modelica_boolean *data, int ndims, ...);
6262

6363
/* Allocation of a vector */
64-
extern void simple_alloc_1d_boolean_array(boolean_array_t* dest, int n);
64+
extern void simple_alloc_1d_boolean_array(threadData_t *threadData, boolean_array_t* dest, int n);
6565

6666
/* Allocation of a matrix */
67-
extern void simple_alloc_2d_boolean_array(boolean_array_t *dest, int r, int c);
67+
extern void simple_alloc_2d_boolean_array(threadData_t *threadData, boolean_array_t *dest, int r, int c);
6868

69-
extern void alloc_boolean_array(boolean_array_t *dest, int ndims, ...);
69+
extern void alloc_boolean_array(threadData_t *threadData, boolean_array_t *dest, int ndims, ...);
7070

7171
/* Allocation of boolean data */
72-
extern void alloc_boolean_array_data(boolean_array_t* a);
72+
extern void alloc_boolean_array_data(threadData_t *threadData, boolean_array_t* a);
7373

7474
/* Frees memory*/
75-
extern void free_boolean_array_data(boolean_array_t* a);
76-
77-
/* Clones data*/
78-
static inline void clone_boolean_array_spec(const boolean_array_t* src,
79-
boolean_array_t* dst)
80-
{ clone_base_array_spec(src, dst); }
75+
extern void free_boolean_array_data(threadData_t *threadData, boolean_array_t* a);
8176

8277
/* Copy boolean data*/
83-
extern void copy_boolean_array_data(const boolean_array_t source, boolean_array_t* dest);
78+
extern void copy_boolean_array_data(threadData_t *threadData, const boolean_array_t source, boolean_array_t* dest);
8479

8580
/* Copy boolean data given memory ptr*/
86-
extern void copy_boolean_array_data_mem(const boolean_array_t source, modelica_boolean* dest);
81+
extern void copy_boolean_array_data_mem(threadData_t *threadData, const boolean_array_t source, modelica_boolean* dest);
8782

8883
/* Copy boolean array*/
8984
extern void copy_boolean_array(const boolean_array_t source, boolean_array_t* dest);
@@ -97,8 +92,8 @@ void or_boolean_array(const boolean_array_t *source1, const boolean_array_t *sou
9792
/* 'not' a boolean array*/
9893
void not_boolean_array(const boolean_array_t source, boolean_array_t *dest);
9994

100-
extern modelica_boolean* calc_boolean_index(int ndims, const _index_t* idx_vec, const boolean_array_t* arr);
101-
extern modelica_boolean* calc_boolean_index_va(const boolean_array_t* source,int ndims,va_list ap);
95+
extern modelica_boolean* calc_boolean_index(threadData_t *threadData, int ndims, const _index_t* idx_vec, const boolean_array_t* arr);
96+
extern modelica_boolean* calc_boolean_index_va(threadData_t *threadData, const boolean_array_t* source,int ndims,va_list ap);
10297

10398
extern void put_boolean_element(m_boolean value,int i1,boolean_array_t* dest);
10499
extern void put_boolean_matrix_element(m_boolean value, int r, int c, boolean_array_t* dest);

0 commit comments

Comments
 (0)