sg-ode
vector_macros.h
Go to the documentation of this file.
1 #ifndef G_WTDRPPR5HCLZDRBPLUWMIW34N5794
2 #define G_WTDRPPR5HCLZDRBPLUWMIW34N5794
3 
5 #ifdef __cplusplus
6 extern "C" {
7 #endif
8 
10 #define SG_DEFINE_VECTOR_MAP_1(prefix, name, var0, block) \
11  static void name##_inner(const void *restrict ctx, const size_t _offset, double *const restrict _v0, const size_t _num_elems) \
12  { \
13  size_t _i; \
14  (void)ctx; \
15  for (_i = 0; _i < _num_elems; ++_i) { \
16  size_t index = _offset + _i; \
17  double *const var0 = _v0 + _i; \
18  (void)index; \
19  { block } \
20  } \
21  } \
22  prefix void name(void *f_ctx, \
23  SgVectorAccum *accum, \
24  const SgVectorAccum *val, \
25  size_t offset, \
26  double **data, \
27  size_t num_elems) \
28  { \
29  (void)accum; \
30  (void)val; \
31  if (num_elems) { \
32  name##_inner(f_ctx, offset, data[0], num_elems); \
33  } \
34  }
35 
37 #define SG_DEFINE_VECTOR_MAP_2(prefix, name, var0, var1, block) \
38  static void name##_inner(const void *restrict ctx, const size_t _offset, double *const restrict _v0, double *const restrict _v1, const size_t _num_elems) \
39  { \
40  size_t _i; \
41  (void)ctx; \
42  for (_i = 0; _i < _num_elems; ++_i) { \
43  size_t index = _offset + _i; \
44  double *const var0 = _v0 + _i; \
45  double *const var1 = _v1 + _i; \
46  (void)index; \
47  { block } \
48  } \
49  } \
50  prefix void name(void *f_ctx, \
51  SgVectorAccum *accum, \
52  const SgVectorAccum *val, \
53  size_t offset, \
54  double **data, \
55  size_t num_elems) \
56  { \
57  (void)accum; \
58  (void)val; \
59  if (num_elems) { \
60  name##_inner(f_ctx, offset, data[0], data[1], num_elems); \
61  } \
62  }
63 
65 #define SG_DEFINE_VECTOR_MAP_3(prefix, name, var0, var1, var2, block) \
66  static void name##_inner(const void *restrict ctx, const size_t _offset, double *const restrict _v0, double *const restrict _v1, double *const restrict _v2, const size_t _num_elems) \
67  { \
68  size_t _i; \
69  (void)ctx; \
70  for (_i = 0; _i < _num_elems; ++_i) { \
71  size_t index = _offset + _i; \
72  double *const var0 = _v0 + _i; \
73  double *const var1 = _v1 + _i; \
74  double *const var2 = _v2 + _i; \
75  (void)index; \
76  { block } \
77  } \
78  } \
79  prefix void name(void *f_ctx, \
80  SgVectorAccum *accum, \
81  const SgVectorAccum *val, \
82  size_t offset, \
83  double **data, \
84  size_t num_elems) \
85  { \
86  (void)accum; \
87  (void)val; \
88  if (num_elems) { \
89  name##_inner(f_ctx, offset, data[0], data[1], data[2], num_elems); \
90  } \
91  }
92 
94 #define SG_DEFINE_VECTOR_MAP_4(prefix, name, var0, var1, var2, var3, block) \
95  static void name##_inner(const void *restrict ctx, const size_t _offset, double *const restrict _v0, double *const restrict _v1, double *const restrict _v2, double *const restrict _v3, const size_t _num_elems) \
96  { \
97  size_t _i; \
98  (void)ctx; \
99  for (_i = 0; _i < _num_elems; ++_i) { \
100  size_t index = _offset + _i; \
101  double *const var0 = _v0 + _i; \
102  double *const var1 = _v1 + _i; \
103  double *const var2 = _v2 + _i; \
104  double *const var3 = _v3 + _i; \
105  (void)index; \
106  { block } \
107  } \
108  } \
109  prefix void name(void *f_ctx, \
110  SgVectorAccum *accum, \
111  const SgVectorAccum *val, \
112  size_t offset, \
113  double **data, \
114  size_t num_elems) \
115  { \
116  (void)accum; \
117  (void)val; \
118  if (num_elems) { \
119  name##_inner(f_ctx, offset, data[0], data[1], data[2], data[3], num_elems); \
120  } \
121  }
122 
124 #define SG_DEFINE_VECTOR_MAP_5(prefix, name, var0, var1, var2, var3, var4, block) \
125  static void name##_inner(const void *restrict ctx, const size_t _offset, double *const restrict _v0, double *const restrict _v1, double *const restrict _v2, double *const restrict _v3, double *const restrict _v4, const size_t _num_elems) \
126  { \
127  size_t _i; \
128  (void)ctx; \
129  for (_i = 0; _i < _num_elems; ++_i) { \
130  size_t index = _offset + _i; \
131  double *const var0 = _v0 + _i; \
132  double *const var1 = _v1 + _i; \
133  double *const var2 = _v2 + _i; \
134  double *const var3 = _v3 + _i; \
135  double *const var4 = _v4 + _i; \
136  (void)index; \
137  { block } \
138  } \
139  } \
140  prefix void name(void *f_ctx, \
141  SgVectorAccum *accum, \
142  const SgVectorAccum *val, \
143  size_t offset, \
144  double **data, \
145  size_t num_elems) \
146  { \
147  (void)accum; \
148  (void)val; \
149  if (num_elems) { \
150  name##_inner(f_ctx, offset, data[0], data[1], data[2], data[3], data[4], num_elems); \
151  } \
152  }
153 
155 #define SG_DEFINE_VECTOR_MAP_6(prefix, name, var0, var1, var2, var3, var4, var5, block) \
156  static void name##_inner(const void *restrict ctx, const size_t _offset, double *const restrict _v0, double *const restrict _v1, double *const restrict _v2, double *const restrict _v3, double *const restrict _v4, double *const restrict _v5, const size_t _num_elems) \
157  { \
158  size_t _i; \
159  (void)ctx; \
160  for (_i = 0; _i < _num_elems; ++_i) { \
161  size_t index = _offset + _i; \
162  double *const var0 = _v0 + _i; \
163  double *const var1 = _v1 + _i; \
164  double *const var2 = _v2 + _i; \
165  double *const var3 = _v3 + _i; \
166  double *const var4 = _v4 + _i; \
167  double *const var5 = _v5 + _i; \
168  (void)index; \
169  { block } \
170  } \
171  } \
172  prefix void name(void *f_ctx, \
173  SgVectorAccum *accum, \
174  const SgVectorAccum *val, \
175  size_t offset, \
176  double **data, \
177  size_t num_elems) \
178  { \
179  (void)accum; \
180  (void)val; \
181  if (num_elems) { \
182  name##_inner(f_ctx, offset, data[0], data[1], data[2], data[3], data[4], data[5], num_elems); \
183  } \
184  }
185 
187 #define SG_DEFINE_VECTOR_MAP_7(prefix, name, var0, var1, var2, var3, var4, var5, var6, block) \
188  static void name##_inner(const void *restrict ctx, const size_t _offset, double *const restrict _v0, double *const restrict _v1, double *const restrict _v2, double *const restrict _v3, double *const restrict _v4, double *const restrict _v5, double *const restrict _v6, const size_t _num_elems) \
189  { \
190  size_t _i; \
191  (void)ctx; \
192  for (_i = 0; _i < _num_elems; ++_i) { \
193  size_t index = _offset + _i; \
194  double *const var0 = _v0 + _i; \
195  double *const var1 = _v1 + _i; \
196  double *const var2 = _v2 + _i; \
197  double *const var3 = _v3 + _i; \
198  double *const var4 = _v4 + _i; \
199  double *const var5 = _v5 + _i; \
200  double *const var6 = _v6 + _i; \
201  (void)index; \
202  { block } \
203  } \
204  } \
205  prefix void name(void *f_ctx, \
206  SgVectorAccum *accum, \
207  const SgVectorAccum *val, \
208  size_t offset, \
209  double **data, \
210  size_t num_elems) \
211  { \
212  (void)accum; \
213  (void)val; \
214  if (num_elems) { \
215  name##_inner(f_ctx, offset, data[0], data[1], data[2], data[3], data[4], data[5], data[6], num_elems); \
216  } \
217  }
218 
220 #define SG_DEFINE_VECTOR_MAP_8(prefix, name, var0, var1, var2, var3, var4, var5, var6, var7, block) \
221  static void name##_inner(const void *restrict ctx, const size_t _offset, double *const restrict _v0, double *const restrict _v1, double *const restrict _v2, double *const restrict _v3, double *const restrict _v4, double *const restrict _v5, double *const restrict _v6, double *const restrict _v7, const size_t _num_elems) \
222  { \
223  size_t _i; \
224  (void)ctx; \
225  for (_i = 0; _i < _num_elems; ++_i) { \
226  size_t index = _offset + _i; \
227  double *const var0 = _v0 + _i; \
228  double *const var1 = _v1 + _i; \
229  double *const var2 = _v2 + _i; \
230  double *const var3 = _v3 + _i; \
231  double *const var4 = _v4 + _i; \
232  double *const var5 = _v5 + _i; \
233  double *const var6 = _v6 + _i; \
234  double *const var7 = _v7 + _i; \
235  (void)index; \
236  { block } \
237  } \
238  } \
239  prefix void name(void *f_ctx, \
240  SgVectorAccum *accum, \
241  const SgVectorAccum *val, \
242  size_t offset, \
243  double **data, \
244  size_t num_elems) \
245  { \
246  (void)accum; \
247  (void)val; \
248  if (num_elems) { \
249  name##_inner(f_ctx, offset, data[0], data[1], data[2], data[3], data[4], data[5], data[6], data[7], num_elems); \
250  } \
251  }
252 
253 #ifdef __cplusplus
254 }
255 #endif
256 #endif