Skip to content

Commit 328bb14

Browse files
author
henjo
committed
Fixed some things
git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@724 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
1 parent c39a2a8 commit 328bb14

File tree

6 files changed

+106
-25
lines changed

6 files changed

+106
-25
lines changed

c_runtime/index_spec.c

Lines changed: 40 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,57 @@
11
#include "index_spec.h"
2+
#include "memory_pool.h"
23
#include <stdlib.h>
4+
#include <stdarg.h>
35

46
void alloc_index_spec(index_spec_t* s)
57
{
68
int i;
7-
s->index = malloc(s->ndims*sizeof(int*));
9+
s->index = index_alloc(s->ndims);
810
for (i = 0; i < s->ndims; ++i)
911
{
1012
if (s->dim_size[i] > 0)
1113
{
12-
s->index[i] = malloc(s->dim_size[i]*sizeof(int));
14+
s->index[i] = size_alloc(s->dim_size[i]);
1315
}
1416
else
1517
{
1618
s->index[i] = 0;
1719
}
1820
}
1921
}
22+
23+
void create_index_spec(index_spec_t* dest, int nridx, ...)
24+
{
25+
int i;
26+
va_list ap;
27+
va_start(ap,nridx);
28+
29+
dest->ndims = nridx;
30+
dest->dim_size = size_alloc(nridx);
31+
dest->index = index_alloc(nridx);
32+
for (i = 0; i < nridx; ++i)
33+
{
34+
dest->dim_size[i] = va_arg(ap,int);
35+
dest->index[i] = va_arg(ap,int*);
36+
}
37+
va_end(ap);
38+
39+
40+
}
41+
42+
int* make_index_array(int nridx,...)
43+
{
44+
int i;
45+
int* res;
46+
va_list ap;
47+
va_start(ap,nridx);
48+
49+
res = size_alloc(nridx);
50+
for (i = 0; i < nridx; ++i)
51+
{
52+
res[i] = va_arg(ap,int);
53+
}
54+
55+
return res;
56+
57+
}

c_runtime/index_spec.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,6 @@ struct index_spec_s
1111
typedef struct index_spec_s index_spec_t;
1212

1313
void alloc_index_spec(index_spec_t* s);
14-
14+
void create_index_spec(index_spec_t* dest, int nridx, ...);
15+
int* make_index_array(int nridx,...);
1516
#endif

c_runtime/memory_pool.c

Lines changed: 39 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,18 @@ state current_state = {
66
0,/*real buffer*/
77
0,/*integer buffer*/
88
0,/*string buffer*/
9-
0 /*boolean buffer*/
9+
0,/*boolean buffer*/
10+
0,/* size buffer */
11+
0 /* index buffer */
1012
};
1113

12-
size_mem current_buffer_index = {
13-
0
14-
};
14+
real real_buffer[NR_REAL_ELEMENTS];
15+
integer integer_buffer[NR_INTEGER_ELEMENTS];
16+
string string_buffer[NR_STRING_ELEMENTS];
17+
boolean boolean_buffer[NR_BOOLEAN_ELEMENTS];
18+
integer size_buffer[NR_SIZE_ELEMENTS];
19+
int* index_buffer[NR_INDEX_ELEMENTS];
20+
1521

1622
state get_memory_state()
1723
{
@@ -117,15 +123,29 @@ int* size_alloc(int n)
117123
index_t start;
118124

119125
assert(n>=0);
120-
assert(n+current_buffer_index.size_buffer_ptr<NR_SIZE_ELEMENTS);
126+
assert(n + current_state.size_buffer_ptr < NR_SIZE_ELEMENTS);
121127

122-
start = current_buffer_index.size_buffer_ptr;
123-
current_buffer_index.size_buffer_ptr += n;
128+
start = current_state.size_buffer_ptr;
129+
current_state.size_buffer_ptr += n;
124130
return size_buffer+n;
125131

126132
/* return start;*/
127133
}
128134

135+
int** index_alloc(int n)
136+
{
137+
index_t start;
138+
139+
assert(n>=0);
140+
assert(n + current_state.index_buffer_ptr < NR_SIZE_ELEMENTS);
141+
142+
start = current_state.index_buffer_ptr;
143+
current_state.index_buffer_ptr += n;
144+
return index_buffer+n;
145+
146+
/* return start;*/
147+
}
148+
129149
index_t real_free(int n)
130150
{
131151
assert(n>=0);
@@ -165,8 +185,17 @@ index_t boolean_free(int n)
165185
index_t size_free(int n)
166186
{
167187
assert(n>=0);
168-
assert(current_buffer_index.size_buffer_ptr-n>=0);
188+
assert(current_state.size_buffer_ptr-n>=0);
189+
190+
current_state.size_buffer_ptr -= n;
191+
return current_state.size_buffer_ptr;
192+
}
193+
194+
index_t index_free(int n)
195+
{
196+
assert(n>=0);
197+
assert(current_state.index_buffer_ptr-n>=0);
169198

170-
current_buffer_index.size_buffer_ptr -= n;
171-
return current_buffer_index.size_buffer_ptr;
199+
current_state.index_buffer_ptr -= n;
200+
return current_state.index_buffer_ptr;
172201
}

c_runtime/memory_pool.h

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#define NR_STRING_ELEMENTS 10000
77
#define NR_BOOLEAN_ELEMENTS 10000
88
#define NR_SIZE_ELEMENTS 10000
9+
#define NR_INDEX_ELEMENTS 10000
910

1011
typedef double real;
1112
typedef int integer;
@@ -14,25 +15,23 @@ typedef int boolean;
1415

1516
typedef int index_t;
1617

17-
real real_buffer[NR_REAL_ELEMENTS];
18-
integer integer_buffer[NR_INTEGER_ELEMENTS];
19-
string string_buffer[NR_STRING_ELEMENTS];
20-
boolean boolean_buffer[NR_BOOLEAN_ELEMENTS];
21-
integer size_buffer[NR_SIZE_ELEMENTS];
18+
extern real real_buffer[NR_REAL_ELEMENTS];
19+
extern integer integer_buffer[NR_INTEGER_ELEMENTS];
20+
extern string string_buffer[NR_STRING_ELEMENTS];
21+
extern boolean boolean_buffer[NR_BOOLEAN_ELEMENTS];
22+
extern integer size_buffer[NR_SIZE_ELEMENTS];
23+
extern int* index_buffer[NR_INDEX_ELEMENTS];
2224

2325
struct state_s {
2426
index_t real_buffer_ptr;
2527
index_t integer_buffer_ptr;
2628
index_t string_buffer_ptr;
2729
index_t boolean_buffer_ptr;
28-
};
29-
30-
struct size_s {
3130
index_t size_buffer_ptr;
31+
index_t index_buffer_ptr;
3232
};
3333

3434
typedef struct state_s state;
35-
typedef struct size_s size_mem;
3635

3736
state get_memory_state();
3837
void restore_memory_state(state restore_state);
@@ -50,13 +49,13 @@ real* real_alloc(int n);
5049
integer* integer_alloc(int n);
5150
string* string_alloc(int n);
5251
boolean* boolean_alloc(int n);
53-
5452
int* size_alloc(int n);
53+
int** index_alloc(int n);
5554

5655
index_t real_free(int n);
5756
index_t integer_free(int n);
5857
index_t string_free(int n);
5958
index_t boolean_free(int n);
6059
index_t size_free(int n);
61-
60+
index_t index_free(int n);
6261
#endif

c_runtime/real_array.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -407,9 +407,19 @@ void index_real_array(real_array_t* source,
407407
{
408408

409409
}
410+
411+
void index_alloc_real_array(real_array_t* source,
412+
index_spec_t* spec,
413+
real_array_t* dest)
414+
{
415+
416+
}
417+
418+
410419
/* Returns dest := source[i1,:,:...]*/
411420
void simple_index_alloc_real_array1(real_array_t* source,int i1,real_array_t* dest)
412421
{
422+
413423

414424
}
415425

c_runtime/real_array.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,11 @@ void simple_indexed_assign_real_array2(real_array_t* source,
7171
*/
7272
void index_real_array(real_array_t* source,
7373
index_spec_t* spec,
74-
real_array_t*);
74+
real_array_t* dest);
75+
void index_alloc_real_array(real_array_t* source,
76+
index_spec_t* spec,
77+
real_array_t* dest);
78+
7579
void simple_index_alloc_real_array1(real_array_t* source,int i1,real_array_t* dest);
7680

7781
void simple_index_real_array1(real_array_t* source,

0 commit comments

Comments
 (0)