QUARK  0.9.0
QUARK-QUeuingAndRuntimeforKernels
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups
quark_unpack_args.h
Go to the documentation of this file.
1 
16 
17 #ifndef _UNPACK_ARGS_
18 #define _UNPACK_ARGS_
19 
20 #include "quark.h"
21 
22 #define quark_unpack_args_1(quark, \
23  arg1) \
24 { \
25  void *lastarg = NULL; \
26  void *args_list = (void *)QUARK_Args_List( quark ); \
27  void *arg = QUARK_Args_Pop(args_list, &lastarg); \
28  memcpy(&arg1, arg, sizeof(arg1)); \
29 }
30 
31 #define quark_unpack_args_2(quark, \
32  arg1, \
33  arg2) \
34 { \
35  void *lastarg = NULL; \
36  void *args_list = QUARK_Args_List( quark ); \
37  void *arg = QUARK_Args_Pop(args_list, &lastarg); \
38  memcpy(&arg1, arg, sizeof(arg1)); arg = QUARK_Args_Pop(args_list, &lastarg); \
39  memcpy(&arg2, arg, sizeof(arg2)); \
40 }
41 
42 #define quark_unpack_args_3(quark, \
43  arg1, \
44  arg2, \
45  arg3) \
46 { \
47  void *lastarg = NULL; \
48  void *args_list = QUARK_Args_List( quark ); \
49  void *arg = QUARK_Args_Pop(args_list, &lastarg); \
50  memcpy(&arg1, arg, sizeof(arg1)); arg = QUARK_Args_Pop(args_list, &lastarg); \
51  memcpy(&arg2, arg, sizeof(arg2)); arg = QUARK_Args_Pop(args_list, &lastarg); \
52  memcpy(&arg3, arg, sizeof(arg3)); \
53 }
54 
55 #define quark_unpack_args_4(quark, \
56  arg1, \
57  arg2, \
58  arg3, \
59  arg4) \
60 { \
61  void *lastarg = NULL; \
62  void *args_list = QUARK_Args_List( quark ); \
63  void *arg = QUARK_Args_Pop(args_list, &lastarg); \
64  memcpy(&arg1, arg, sizeof(arg1)); arg = QUARK_Args_Pop(args_list, &lastarg); \
65  memcpy(&arg2, arg, sizeof(arg2)); arg = QUARK_Args_Pop(args_list, &lastarg); \
66  memcpy(&arg3, arg, sizeof(arg3)); arg = QUARK_Args_Pop(args_list, &lastarg); \
67  memcpy(&arg4, arg, sizeof(arg4)); \
68 }
69 
70 #define quark_unpack_args_5(quark, \
71  arg1, \
72  arg2, \
73  arg3, \
74  arg4, \
75  arg5) \
76 { \
77  void *lastarg = NULL; \
78  void *args_list = QUARK_Args_List( quark ); \
79  void *arg = QUARK_Args_Pop(args_list, &lastarg); \
80  memcpy(&arg1, arg, sizeof(arg1)); arg = QUARK_Args_Pop(args_list, &lastarg); \
81  memcpy(&arg2, arg, sizeof(arg2)); arg = QUARK_Args_Pop(args_list, &lastarg); \
82  memcpy(&arg3, arg, sizeof(arg3)); arg = QUARK_Args_Pop(args_list, &lastarg); \
83  memcpy(&arg4, arg, sizeof(arg4)); arg = QUARK_Args_Pop(args_list, &lastarg); \
84  memcpy(&arg5, arg, sizeof(arg5)); \
85 }
86 
87 #define quark_unpack_args_6(quark, \
88  arg1, \
89  arg2, \
90  arg3, \
91  arg4, \
92  arg5, \
93  arg6) \
94 { \
95  void *lastarg = NULL; \
96  void *args_list = QUARK_Args_List( quark ); \
97  void *arg = QUARK_Args_Pop(args_list, &lastarg); \
98  memcpy(&arg1, arg, sizeof(arg1)); arg = QUARK_Args_Pop(args_list, &lastarg); \
99  memcpy(&arg2, arg, sizeof(arg2)); arg = QUARK_Args_Pop(args_list, &lastarg); \
100  memcpy(&arg3, arg, sizeof(arg3)); arg = QUARK_Args_Pop(args_list, &lastarg); \
101  memcpy(&arg4, arg, sizeof(arg4)); arg = QUARK_Args_Pop(args_list, &lastarg); \
102  memcpy(&arg5, arg, sizeof(arg5)); arg = QUARK_Args_Pop(args_list, &lastarg); \
103  memcpy(&arg6, arg, sizeof(arg6)); \
104 }
105 
106 #define quark_unpack_args_7(quark, \
107  arg1, \
108  arg2, \
109  arg3, \
110  arg4, \
111  arg5, \
112  arg6, \
113  arg7) \
114 { \
115  void *lastarg = NULL; \
116  void *args_list = QUARK_Args_List( quark ); \
117  void *arg = QUARK_Args_Pop(args_list, &lastarg); \
118  memcpy(&arg1, arg, sizeof(arg1)); arg = QUARK_Args_Pop(args_list, &lastarg); \
119  memcpy(&arg2, arg, sizeof(arg2)); arg = QUARK_Args_Pop(args_list, &lastarg); \
120  memcpy(&arg3, arg, sizeof(arg3)); arg = QUARK_Args_Pop(args_list, &lastarg); \
121  memcpy(&arg4, arg, sizeof(arg4)); arg = QUARK_Args_Pop(args_list, &lastarg); \
122  memcpy(&arg5, arg, sizeof(arg5)); arg = QUARK_Args_Pop(args_list, &lastarg); \
123  memcpy(&arg6, arg, sizeof(arg6)); arg = QUARK_Args_Pop(args_list, &lastarg); \
124  memcpy(&arg7, arg, sizeof(arg7)); \
125 }
126 
127 #define quark_unpack_args_8(quark, \
128  arg1, \
129  arg2, \
130  arg3, \
131  arg4, \
132  arg5, \
133  arg6, \
134  arg7, \
135  arg8) \
136 { \
137  void *lastarg = NULL; \
138  void *args_list = QUARK_Args_List( quark ); \
139  void *arg = QUARK_Args_Pop(args_list, &lastarg); \
140  memcpy(&arg1, arg, sizeof(arg1)); arg = QUARK_Args_Pop(args_list, &lastarg); \
141  memcpy(&arg2, arg, sizeof(arg2)); arg = QUARK_Args_Pop(args_list, &lastarg); \
142  memcpy(&arg3, arg, sizeof(arg3)); arg = QUARK_Args_Pop(args_list, &lastarg); \
143  memcpy(&arg4, arg, sizeof(arg4)); arg = QUARK_Args_Pop(args_list, &lastarg); \
144  memcpy(&arg5, arg, sizeof(arg5)); arg = QUARK_Args_Pop(args_list, &lastarg); \
145  memcpy(&arg6, arg, sizeof(arg6)); arg = QUARK_Args_Pop(args_list, &lastarg); \
146  memcpy(&arg7, arg, sizeof(arg7)); arg = QUARK_Args_Pop(args_list, &lastarg); \
147  memcpy(&arg8, arg, sizeof(arg8)); \
148 }
149 
150 #define quark_unpack_args_9(quark, \
151  arg1, \
152  arg2, \
153  arg3, \
154  arg4, \
155  arg5, \
156  arg6, \
157  arg7, \
158  arg8, \
159  arg9) \
160 { \
161  void *lastarg = NULL; \
162  void *args_list = QUARK_Args_List( quark ); \
163  void *arg = QUARK_Args_Pop(args_list, &lastarg); \
164  memcpy(&arg1, arg, sizeof(arg1)); arg = QUARK_Args_Pop(args_list, &lastarg); \
165  memcpy(&arg2, arg, sizeof(arg2)); arg = QUARK_Args_Pop(args_list, &lastarg); \
166  memcpy(&arg3, arg, sizeof(arg3)); arg = QUARK_Args_Pop(args_list, &lastarg); \
167  memcpy(&arg4, arg, sizeof(arg4)); arg = QUARK_Args_Pop(args_list, &lastarg); \
168  memcpy(&arg5, arg, sizeof(arg5)); arg = QUARK_Args_Pop(args_list, &lastarg); \
169  memcpy(&arg6, arg, sizeof(arg6)); arg = QUARK_Args_Pop(args_list, &lastarg); \
170  memcpy(&arg7, arg, sizeof(arg7)); arg = QUARK_Args_Pop(args_list, &lastarg); \
171  memcpy(&arg8, arg, sizeof(arg8)); arg = QUARK_Args_Pop(args_list, &lastarg); \
172  memcpy(&arg9, arg, sizeof(arg9)); \
173 }
174 
175 #define quark_unpack_args_10(quark, \
176  arg1, \
177  arg2, \
178  arg3, \
179  arg4, \
180  arg5, \
181  arg6, \
182  arg7, \
183  arg8, \
184  arg9, \
185  arg10) \
186 { \
187  void *lastarg = NULL; \
188  void *args_list = QUARK_Args_List( quark ); \
189  void *arg = QUARK_Args_Pop(args_list, &lastarg); \
190  memcpy(&arg1, arg, sizeof(arg1)); arg = QUARK_Args_Pop(args_list, &lastarg); \
191  memcpy(&arg2, arg, sizeof(arg2)); arg = QUARK_Args_Pop(args_list, &lastarg); \
192  memcpy(&arg3, arg, sizeof(arg3)); arg = QUARK_Args_Pop(args_list, &lastarg); \
193  memcpy(&arg4, arg, sizeof(arg4)); arg = QUARK_Args_Pop(args_list, &lastarg); \
194  memcpy(&arg5, arg, sizeof(arg5)); arg = QUARK_Args_Pop(args_list, &lastarg); \
195  memcpy(&arg6, arg, sizeof(arg6)); arg = QUARK_Args_Pop(args_list, &lastarg); \
196  memcpy(&arg7, arg, sizeof(arg7)); arg = QUARK_Args_Pop(args_list, &lastarg); \
197  memcpy(&arg8, arg, sizeof(arg8)); arg = QUARK_Args_Pop(args_list, &lastarg); \
198  memcpy(&arg9, arg, sizeof(arg9)); arg = QUARK_Args_Pop(args_list, &lastarg); \
199  memcpy(&arg10, arg, sizeof(arg10)); \
200 }
201 
202 #define quark_unpack_args_11(quark, \
203  arg1, \
204  arg2, \
205  arg3, \
206  arg4, \
207  arg5, \
208  arg6, \
209  arg7, \
210  arg8, \
211  arg9, \
212  arg10, \
213  arg11) \
214 { \
215  void *lastarg = NULL; \
216  void *args_list = QUARK_Args_List( quark ); \
217  void *arg = QUARK_Args_Pop(args_list, &lastarg); \
218  memcpy(&arg1, arg, sizeof(arg1)); arg = QUARK_Args_Pop(args_list, &lastarg); \
219  memcpy(&arg2, arg, sizeof(arg2)); arg = QUARK_Args_Pop(args_list, &lastarg); \
220  memcpy(&arg3, arg, sizeof(arg3)); arg = QUARK_Args_Pop(args_list, &lastarg); \
221  memcpy(&arg4, arg, sizeof(arg4)); arg = QUARK_Args_Pop(args_list, &lastarg); \
222  memcpy(&arg5, arg, sizeof(arg5)); arg = QUARK_Args_Pop(args_list, &lastarg); \
223  memcpy(&arg6, arg, sizeof(arg6)); arg = QUARK_Args_Pop(args_list, &lastarg); \
224  memcpy(&arg7, arg, sizeof(arg7)); arg = QUARK_Args_Pop(args_list, &lastarg); \
225  memcpy(&arg8, arg, sizeof(arg8)); arg = QUARK_Args_Pop(args_list, &lastarg); \
226  memcpy(&arg9, arg, sizeof(arg9)); arg = QUARK_Args_Pop(args_list, &lastarg); \
227  memcpy(&arg10, arg, sizeof(arg10)); arg = QUARK_Args_Pop(args_list, &lastarg); \
228  memcpy(&arg11, arg, sizeof(arg11)); \
229 }
230 
231 #define quark_unpack_args_12(quark, \
232  arg1, \
233  arg2, \
234  arg3, \
235  arg4, \
236  arg5, \
237  arg6, \
238  arg7, \
239  arg8, \
240  arg9, \
241  arg10, \
242  arg11, \
243  arg12) \
244 { \
245  void *lastarg = NULL; \
246  void *args_list = QUARK_Args_List( quark ); \
247  void *arg = QUARK_Args_Pop(args_list, &lastarg); \
248  memcpy(&arg1, arg, sizeof(arg1)); arg = QUARK_Args_Pop(args_list, &lastarg); \
249  memcpy(&arg2, arg, sizeof(arg2)); arg = QUARK_Args_Pop(args_list, &lastarg); \
250  memcpy(&arg3, arg, sizeof(arg3)); arg = QUARK_Args_Pop(args_list, &lastarg); \
251  memcpy(&arg4, arg, sizeof(arg4)); arg = QUARK_Args_Pop(args_list, &lastarg); \
252  memcpy(&arg5, arg, sizeof(arg5)); arg = QUARK_Args_Pop(args_list, &lastarg); \
253  memcpy(&arg6, arg, sizeof(arg6)); arg = QUARK_Args_Pop(args_list, &lastarg); \
254  memcpy(&arg7, arg, sizeof(arg7)); arg = QUARK_Args_Pop(args_list, &lastarg); \
255  memcpy(&arg8, arg, sizeof(arg8)); arg = QUARK_Args_Pop(args_list, &lastarg); \
256  memcpy(&arg9, arg, sizeof(arg9)); arg = QUARK_Args_Pop(args_list, &lastarg); \
257  memcpy(&arg10, arg, sizeof(arg10)); arg = QUARK_Args_Pop(args_list, &lastarg); \
258  memcpy(&arg11, arg, sizeof(arg11)); arg = QUARK_Args_Pop(args_list, &lastarg); \
259  memcpy(&arg12, arg, sizeof(arg12)); \
260 }
261 
262 #define quark_unpack_args_13(quark, \
263  arg1, \
264  arg2, \
265  arg3, \
266  arg4, \
267  arg5, \
268  arg6, \
269  arg7, \
270  arg8, \
271  arg9, \
272  arg10, \
273  arg11, \
274  arg12, \
275  arg13) \
276 { \
277  void *lastarg = NULL; \
278  void *args_list = QUARK_Args_List( quark ); \
279  void *arg = QUARK_Args_Pop(args_list, &lastarg); \
280  memcpy(&arg1, arg, sizeof(arg1)); arg = QUARK_Args_Pop(args_list, &lastarg); \
281  memcpy(&arg2, arg, sizeof(arg2)); arg = QUARK_Args_Pop(args_list, &lastarg); \
282  memcpy(&arg3, arg, sizeof(arg3)); arg = QUARK_Args_Pop(args_list, &lastarg); \
283  memcpy(&arg4, arg, sizeof(arg4)); arg = QUARK_Args_Pop(args_list, &lastarg); \
284  memcpy(&arg5, arg, sizeof(arg5)); arg = QUARK_Args_Pop(args_list, &lastarg); \
285  memcpy(&arg6, arg, sizeof(arg6)); arg = QUARK_Args_Pop(args_list, &lastarg); \
286  memcpy(&arg7, arg, sizeof(arg7)); arg = QUARK_Args_Pop(args_list, &lastarg); \
287  memcpy(&arg8, arg, sizeof(arg8)); arg = QUARK_Args_Pop(args_list, &lastarg); \
288  memcpy(&arg9, arg, sizeof(arg9)); arg = QUARK_Args_Pop(args_list, &lastarg); \
289  memcpy(&arg10, arg, sizeof(arg10)); arg = QUARK_Args_Pop(args_list, &lastarg); \
290  memcpy(&arg11, arg, sizeof(arg11)); arg = QUARK_Args_Pop(args_list, &lastarg); \
291  memcpy(&arg12, arg, sizeof(arg12)); arg = QUARK_Args_Pop(args_list, &lastarg); \
292  memcpy(&arg13, arg, sizeof(arg13)); \
293 }
294 
295 #define quark_unpack_args_14(quark, \
296  arg1, \
297  arg2, \
298  arg3, \
299  arg4, \
300  arg5, \
301  arg6, \
302  arg7, \
303  arg8, \
304  arg9, \
305  arg10, \
306  arg11, \
307  arg12, \
308  arg13, \
309  arg14) \
310 { \
311  void *lastarg = NULL; \
312  void *args_list = QUARK_Args_List( quark ); \
313  void *arg = QUARK_Args_Pop(args_list, &lastarg); \
314  memcpy(&arg1, arg, sizeof(arg1)); arg = QUARK_Args_Pop(args_list, &lastarg); \
315  memcpy(&arg2, arg, sizeof(arg2)); arg = QUARK_Args_Pop(args_list, &lastarg); \
316  memcpy(&arg3, arg, sizeof(arg3)); arg = QUARK_Args_Pop(args_list, &lastarg); \
317  memcpy(&arg4, arg, sizeof(arg4)); arg = QUARK_Args_Pop(args_list, &lastarg); \
318  memcpy(&arg5, arg, sizeof(arg5)); arg = QUARK_Args_Pop(args_list, &lastarg); \
319  memcpy(&arg6, arg, sizeof(arg6)); arg = QUARK_Args_Pop(args_list, &lastarg); \
320  memcpy(&arg7, arg, sizeof(arg7)); arg = QUARK_Args_Pop(args_list, &lastarg); \
321  memcpy(&arg8, arg, sizeof(arg8)); arg = QUARK_Args_Pop(args_list, &lastarg); \
322  memcpy(&arg9, arg, sizeof(arg9)); arg = QUARK_Args_Pop(args_list, &lastarg); \
323  memcpy(&arg10, arg, sizeof(arg10)); arg = QUARK_Args_Pop(args_list, &lastarg); \
324  memcpy(&arg11, arg, sizeof(arg11)); arg = QUARK_Args_Pop(args_list, &lastarg); \
325  memcpy(&arg12, arg, sizeof(arg12)); arg = QUARK_Args_Pop(args_list, &lastarg); \
326  memcpy(&arg13, arg, sizeof(arg13)); arg = QUARK_Args_Pop(args_list, &lastarg); \
327  memcpy(&arg14, arg, sizeof(arg14)); \
328 }
329 
330 #define quark_unpack_args_15(quark, \
331  arg1, \
332  arg2, \
333  arg3, \
334  arg4, \
335  arg5, \
336  arg6, \
337  arg7, \
338  arg8, \
339  arg9, \
340  arg10, \
341  arg11, \
342  arg12, \
343  arg13, \
344  arg14, \
345  arg15) \
346 { \
347  void *lastarg = NULL; \
348  void *args_list = QUARK_Args_List( quark ); \
349  void *arg = QUARK_Args_Pop(args_list, &lastarg); \
350  memcpy(&arg1, arg, sizeof(arg1)); arg = QUARK_Args_Pop(args_list, &lastarg); \
351  memcpy(&arg2, arg, sizeof(arg2)); arg = QUARK_Args_Pop(args_list, &lastarg); \
352  memcpy(&arg3, arg, sizeof(arg3)); arg = QUARK_Args_Pop(args_list, &lastarg); \
353  memcpy(&arg4, arg, sizeof(arg4)); arg = QUARK_Args_Pop(args_list, &lastarg); \
354  memcpy(&arg5, arg, sizeof(arg5)); arg = QUARK_Args_Pop(args_list, &lastarg); \
355  memcpy(&arg6, arg, sizeof(arg6)); arg = QUARK_Args_Pop(args_list, &lastarg); \
356  memcpy(&arg7, arg, sizeof(arg7)); arg = QUARK_Args_Pop(args_list, &lastarg); \
357  memcpy(&arg8, arg, sizeof(arg8)); arg = QUARK_Args_Pop(args_list, &lastarg); \
358  memcpy(&arg9, arg, sizeof(arg9)); arg = QUARK_Args_Pop(args_list, &lastarg); \
359  memcpy(&arg10, arg, sizeof(arg10)); arg = QUARK_Args_Pop(args_list, &lastarg); \
360  memcpy(&arg11, arg, sizeof(arg11)); arg = QUARK_Args_Pop(args_list, &lastarg); \
361  memcpy(&arg12, arg, sizeof(arg12)); arg = QUARK_Args_Pop(args_list, &lastarg); \
362  memcpy(&arg13, arg, sizeof(arg13)); arg = QUARK_Args_Pop(args_list, &lastarg); \
363  memcpy(&arg14, arg, sizeof(arg14)); arg = QUARK_Args_Pop(args_list, &lastarg); \
364  memcpy(&arg15, arg, sizeof(arg15)); \
365 }
366 
367 #define quark_unpack_args_16(quark, \
368  arg1, \
369  arg2, \
370  arg3, \
371  arg4, \
372  arg5, \
373  arg6, \
374  arg7, \
375  arg8, \
376  arg9, \
377  arg10, \
378  arg11, \
379  arg12, \
380  arg13, \
381  arg14, \
382  arg15, \
383  arg16) \
384 { \
385  void *lastarg = NULL; \
386  void *args_list = QUARK_Args_List( quark ); \
387  void *arg = QUARK_Args_Pop(args_list, &lastarg); \
388  memcpy(&arg1, arg, sizeof(arg1)); arg = QUARK_Args_Pop(args_list, &lastarg); \
389  memcpy(&arg2, arg, sizeof(arg2)); arg = QUARK_Args_Pop(args_list, &lastarg); \
390  memcpy(&arg3, arg, sizeof(arg3)); arg = QUARK_Args_Pop(args_list, &lastarg); \
391  memcpy(&arg4, arg, sizeof(arg4)); arg = QUARK_Args_Pop(args_list, &lastarg); \
392  memcpy(&arg5, arg, sizeof(arg5)); arg = QUARK_Args_Pop(args_list, &lastarg); \
393  memcpy(&arg6, arg, sizeof(arg6)); arg = QUARK_Args_Pop(args_list, &lastarg); \
394  memcpy(&arg7, arg, sizeof(arg7)); arg = QUARK_Args_Pop(args_list, &lastarg); \
395  memcpy(&arg8, arg, sizeof(arg8)); arg = QUARK_Args_Pop(args_list, &lastarg); \
396  memcpy(&arg9, arg, sizeof(arg9)); arg = QUARK_Args_Pop(args_list, &lastarg); \
397  memcpy(&arg10, arg, sizeof(arg10)); arg = QUARK_Args_Pop(args_list, &lastarg); \
398  memcpy(&arg11, arg, sizeof(arg11)); arg = QUARK_Args_Pop(args_list, &lastarg); \
399  memcpy(&arg12, arg, sizeof(arg12)); arg = QUARK_Args_Pop(args_list, &lastarg); \
400  memcpy(&arg13, arg, sizeof(arg13)); arg = QUARK_Args_Pop(args_list, &lastarg); \
401  memcpy(&arg14, arg, sizeof(arg14)); arg = QUARK_Args_Pop(args_list, &lastarg); \
402  memcpy(&arg15, arg, sizeof(arg15)); arg = QUARK_Args_Pop(args_list, &lastarg); \
403  memcpy(&arg16, arg, sizeof(arg16)); \
404 }
405 
406 #define quark_unpack_args_17(quark, \
407  arg1, \
408  arg2, \
409  arg3, \
410  arg4, \
411  arg5, \
412  arg6, \
413  arg7, \
414  arg8, \
415  arg9, \
416  arg10, \
417  arg11, \
418  arg12, \
419  arg13, \
420  arg14, \
421  arg15, \
422  arg16, \
423  arg17) \
424 { \
425  void *lastarg = NULL; \
426  void *args_list = QUARK_Args_List( quark ); \
427  void *arg = QUARK_Args_Pop(args_list, &lastarg); \
428  memcpy(&arg1, arg, sizeof(arg1)); arg = QUARK_Args_Pop(args_list, &lastarg); \
429  memcpy(&arg2, arg, sizeof(arg2)); arg = QUARK_Args_Pop(args_list, &lastarg); \
430  memcpy(&arg3, arg, sizeof(arg3)); arg = QUARK_Args_Pop(args_list, &lastarg); \
431  memcpy(&arg4, arg, sizeof(arg4)); arg = QUARK_Args_Pop(args_list, &lastarg); \
432  memcpy(&arg5, arg, sizeof(arg5)); arg = QUARK_Args_Pop(args_list, &lastarg); \
433  memcpy(&arg6, arg, sizeof(arg6)); arg = QUARK_Args_Pop(args_list, &lastarg); \
434  memcpy(&arg7, arg, sizeof(arg7)); arg = QUARK_Args_Pop(args_list, &lastarg); \
435  memcpy(&arg8, arg, sizeof(arg8)); arg = QUARK_Args_Pop(args_list, &lastarg); \
436  memcpy(&arg9, arg, sizeof(arg9)); arg = QUARK_Args_Pop(args_list, &lastarg); \
437  memcpy(&arg10, arg, sizeof(arg10)); arg = QUARK_Args_Pop(args_list, &lastarg); \
438  memcpy(&arg11, arg, sizeof(arg11)); arg = QUARK_Args_Pop(args_list, &lastarg); \
439  memcpy(&arg12, arg, sizeof(arg12)); arg = QUARK_Args_Pop(args_list, &lastarg); \
440  memcpy(&arg13, arg, sizeof(arg13)); arg = QUARK_Args_Pop(args_list, &lastarg); \
441  memcpy(&arg14, arg, sizeof(arg14)); arg = QUARK_Args_Pop(args_list, &lastarg); \
442  memcpy(&arg15, arg, sizeof(arg15)); arg = QUARK_Args_Pop(args_list, &lastarg); \
443  memcpy(&arg16, arg, sizeof(arg16)); arg = QUARK_Args_Pop(args_list, &lastarg); \
444  memcpy(&arg17, arg, sizeof(arg17)); \
445 }
446 
447 #define quark_unpack_args_18(quark, \
448  arg1, \
449  arg2, \
450  arg3, \
451  arg4, \
452  arg5, \
453  arg6, \
454  arg7, \
455  arg8, \
456  arg9, \
457  arg10, \
458  arg11, \
459  arg12, \
460  arg13, \
461  arg14, \
462  arg15, \
463  arg16, \
464  arg17, \
465  arg18) \
466 { \
467  void *lastarg = NULL; \
468  void *args_list = QUARK_Args_List( quark ); \
469  void *arg = QUARK_Args_Pop(args_list, &lastarg); \
470  memcpy(&arg1, arg, sizeof(arg1)); arg = QUARK_Args_Pop(args_list, &lastarg); \
471  memcpy(&arg2, arg, sizeof(arg2)); arg = QUARK_Args_Pop(args_list, &lastarg); \
472  memcpy(&arg3, arg, sizeof(arg3)); arg = QUARK_Args_Pop(args_list, &lastarg); \
473  memcpy(&arg4, arg, sizeof(arg4)); arg = QUARK_Args_Pop(args_list, &lastarg); \
474  memcpy(&arg5, arg, sizeof(arg5)); arg = QUARK_Args_Pop(args_list, &lastarg); \
475  memcpy(&arg6, arg, sizeof(arg6)); arg = QUARK_Args_Pop(args_list, &lastarg); \
476  memcpy(&arg7, arg, sizeof(arg7)); arg = QUARK_Args_Pop(args_list, &lastarg); \
477  memcpy(&arg8, arg, sizeof(arg8)); arg = QUARK_Args_Pop(args_list, &lastarg); \
478  memcpy(&arg9, arg, sizeof(arg9)); arg = QUARK_Args_Pop(args_list, &lastarg); \
479  memcpy(&arg10, arg, sizeof(arg10)); arg = QUARK_Args_Pop(args_list, &lastarg); \
480  memcpy(&arg11, arg, sizeof(arg11)); arg = QUARK_Args_Pop(args_list, &lastarg); \
481  memcpy(&arg12, arg, sizeof(arg12)); arg = QUARK_Args_Pop(args_list, &lastarg); \
482  memcpy(&arg13, arg, sizeof(arg13)); arg = QUARK_Args_Pop(args_list, &lastarg); \
483  memcpy(&arg14, arg, sizeof(arg14)); arg = QUARK_Args_Pop(args_list, &lastarg); \
484  memcpy(&arg15, arg, sizeof(arg15)); arg = QUARK_Args_Pop(args_list, &lastarg); \
485  memcpy(&arg16, arg, sizeof(arg16)); arg = QUARK_Args_Pop(args_list, &lastarg); \
486  memcpy(&arg17, arg, sizeof(arg17)); arg = QUARK_Args_Pop(args_list, &lastarg); \
487  memcpy(&arg18, arg, sizeof(arg18)); \
488 }
489 
490 #define quark_unpack_args_19(quark, \
491  arg1, \
492  arg2, \
493  arg3, \
494  arg4, \
495  arg5, \
496  arg6, \
497  arg7, \
498  arg8, \
499  arg9, \
500  arg10, \
501  arg11, \
502  arg12, \
503  arg13, \
504  arg14, \
505  arg15, \
506  arg16, \
507  arg17, \
508  arg18, \
509  arg19) \
510 { \
511  void *lastarg = NULL; \
512  void *args_list = QUARK_Args_List( quark ); \
513  void *arg = QUARK_Args_Pop(args_list, &lastarg); \
514  memcpy(&arg1, arg, sizeof(arg1)); arg = QUARK_Args_Pop(args_list, &lastarg); \
515  memcpy(&arg2, arg, sizeof(arg2)); arg = QUARK_Args_Pop(args_list, &lastarg); \
516  memcpy(&arg3, arg, sizeof(arg3)); arg = QUARK_Args_Pop(args_list, &lastarg); \
517  memcpy(&arg4, arg, sizeof(arg4)); arg = QUARK_Args_Pop(args_list, &lastarg); \
518  memcpy(&arg5, arg, sizeof(arg5)); arg = QUARK_Args_Pop(args_list, &lastarg); \
519  memcpy(&arg6, arg, sizeof(arg6)); arg = QUARK_Args_Pop(args_list, &lastarg); \
520  memcpy(&arg7, arg, sizeof(arg7)); arg = QUARK_Args_Pop(args_list, &lastarg); \
521  memcpy(&arg8, arg, sizeof(arg8)); arg = QUARK_Args_Pop(args_list, &lastarg); \
522  memcpy(&arg9, arg, sizeof(arg9)); arg = QUARK_Args_Pop(args_list, &lastarg); \
523  memcpy(&arg10, arg, sizeof(arg10)); arg = QUARK_Args_Pop(args_list, &lastarg); \
524  memcpy(&arg11, arg, sizeof(arg11)); arg = QUARK_Args_Pop(args_list, &lastarg); \
525  memcpy(&arg12, arg, sizeof(arg12)); arg = QUARK_Args_Pop(args_list, &lastarg); \
526  memcpy(&arg13, arg, sizeof(arg13)); arg = QUARK_Args_Pop(args_list, &lastarg); \
527  memcpy(&arg14, arg, sizeof(arg14)); arg = QUARK_Args_Pop(args_list, &lastarg); \
528  memcpy(&arg15, arg, sizeof(arg15)); arg = QUARK_Args_Pop(args_list, &lastarg); \
529  memcpy(&arg16, arg, sizeof(arg16)); arg = QUARK_Args_Pop(args_list, &lastarg); \
530  memcpy(&arg17, arg, sizeof(arg17)); arg = QUARK_Args_Pop(args_list, &lastarg); \
531  memcpy(&arg18, arg, sizeof(arg18)); arg = QUARK_Args_Pop(args_list, &lastarg); \
532  memcpy(&arg19, arg, sizeof(arg19)); \
533 }
534 
535 #define quark_unpack_args_20(quark, \
536  arg1, \
537  arg2, \
538  arg3, \
539  arg4, \
540  arg5, \
541  arg6, \
542  arg7, \
543  arg8, \
544  arg9, \
545  arg10, \
546  arg11, \
547  arg12, \
548  arg13, \
549  arg14, \
550  arg15, \
551  arg16, \
552  arg17, \
553  arg18, \
554  arg19, \
555  arg20) \
556 { \
557  void *lastarg = NULL; \
558  void *args_list = QUARK_Args_List( quark ); \
559  void *arg = QUARK_Args_Pop(args_list, &lastarg); \
560  memcpy(&arg1, arg, sizeof(arg1)); arg = QUARK_Args_Pop(args_list, &lastarg); \
561  memcpy(&arg2, arg, sizeof(arg2)); arg = QUARK_Args_Pop(args_list, &lastarg); \
562  memcpy(&arg3, arg, sizeof(arg3)); arg = QUARK_Args_Pop(args_list, &lastarg); \
563  memcpy(&arg4, arg, sizeof(arg4)); arg = QUARK_Args_Pop(args_list, &lastarg); \
564  memcpy(&arg5, arg, sizeof(arg5)); arg = QUARK_Args_Pop(args_list, &lastarg); \
565  memcpy(&arg6, arg, sizeof(arg6)); arg = QUARK_Args_Pop(args_list, &lastarg); \
566  memcpy(&arg7, arg, sizeof(arg7)); arg = QUARK_Args_Pop(args_list, &lastarg); \
567  memcpy(&arg8, arg, sizeof(arg8)); arg = QUARK_Args_Pop(args_list, &lastarg); \
568  memcpy(&arg9, arg, sizeof(arg9)); arg = QUARK_Args_Pop(args_list, &lastarg); \
569  memcpy(&arg10, arg, sizeof(arg10)); arg = QUARK_Args_Pop(args_list, &lastarg); \
570  memcpy(&arg11, arg, sizeof(arg11)); arg = QUARK_Args_Pop(args_list, &lastarg); \
571  memcpy(&arg12, arg, sizeof(arg12)); arg = QUARK_Args_Pop(args_list, &lastarg); \
572  memcpy(&arg13, arg, sizeof(arg13)); arg = QUARK_Args_Pop(args_list, &lastarg); \
573  memcpy(&arg14, arg, sizeof(arg14)); arg = QUARK_Args_Pop(args_list, &lastarg); \
574  memcpy(&arg15, arg, sizeof(arg15)); arg = QUARK_Args_Pop(args_list, &lastarg); \
575  memcpy(&arg16, arg, sizeof(arg16)); arg = QUARK_Args_Pop(args_list, &lastarg); \
576  memcpy(&arg17, arg, sizeof(arg17)); arg = QUARK_Args_Pop(args_list, &lastarg); \
577  memcpy(&arg18, arg, sizeof(arg18)); arg = QUARK_Args_Pop(args_list, &lastarg); \
578  memcpy(&arg19, arg, sizeof(arg19)); arg = QUARK_Args_Pop(args_list, &lastarg); \
579  memcpy(&arg20, arg, sizeof(arg20)); \
580 }
581 
582 #define quark_unpack_args_21(quark, \
583  arg1, \
584  arg2, \
585  arg3, \
586  arg4, \
587  arg5, \
588  arg6, \
589  arg7, \
590  arg8, \
591  arg9, \
592  arg10, \
593  arg11, \
594  arg12, \
595  arg13, \
596  arg14, \
597  arg15, \
598  arg16, \
599  arg17, \
600  arg18, \
601  arg19, \
602  arg20, \
603  arg21) \
604 { \
605  void *lastarg = NULL; \
606  void *args_list = QUARK_Args_List( quark ); \
607  void *arg = QUARK_Args_Pop(args_list, &lastarg); \
608  memcpy(&arg1, arg, sizeof(arg1)); arg = QUARK_Args_Pop(args_list, &lastarg); \
609  memcpy(&arg2, arg, sizeof(arg2)); arg = QUARK_Args_Pop(args_list, &lastarg); \
610  memcpy(&arg3, arg, sizeof(arg3)); arg = QUARK_Args_Pop(args_list, &lastarg); \
611  memcpy(&arg4, arg, sizeof(arg4)); arg = QUARK_Args_Pop(args_list, &lastarg); \
612  memcpy(&arg5, arg, sizeof(arg5)); arg = QUARK_Args_Pop(args_list, &lastarg); \
613  memcpy(&arg6, arg, sizeof(arg6)); arg = QUARK_Args_Pop(args_list, &lastarg); \
614  memcpy(&arg7, arg, sizeof(arg7)); arg = QUARK_Args_Pop(args_list, &lastarg); \
615  memcpy(&arg8, arg, sizeof(arg8)); arg = QUARK_Args_Pop(args_list, &lastarg); \
616  memcpy(&arg9, arg, sizeof(arg9)); arg = QUARK_Args_Pop(args_list, &lastarg); \
617  memcpy(&arg10, arg, sizeof(arg10)); arg = QUARK_Args_Pop(args_list, &lastarg); \
618  memcpy(&arg11, arg, sizeof(arg11)); arg = QUARK_Args_Pop(args_list, &lastarg); \
619  memcpy(&arg12, arg, sizeof(arg12)); arg = QUARK_Args_Pop(args_list, &lastarg); \
620  memcpy(&arg13, arg, sizeof(arg13)); arg = QUARK_Args_Pop(args_list, &lastarg); \
621  memcpy(&arg14, arg, sizeof(arg14)); arg = QUARK_Args_Pop(args_list, &lastarg); \
622  memcpy(&arg15, arg, sizeof(arg15)); arg = QUARK_Args_Pop(args_list, &lastarg); \
623  memcpy(&arg16, arg, sizeof(arg16)); arg = QUARK_Args_Pop(args_list, &lastarg); \
624  memcpy(&arg17, arg, sizeof(arg17)); arg = QUARK_Args_Pop(args_list, &lastarg); \
625  memcpy(&arg18, arg, sizeof(arg18)); arg = QUARK_Args_Pop(args_list, &lastarg); \
626  memcpy(&arg19, arg, sizeof(arg19)); arg = QUARK_Args_Pop(args_list, &lastarg); \
627  memcpy(&arg20, arg, sizeof(arg20)); arg = QUARK_Args_Pop(args_list, &lastarg); \
628  memcpy(&arg21, arg, sizeof(arg21)); \
629 }
630 
631 #define quark_unpack_args_22(quark, \
632  arg1, \
633  arg2, \
634  arg3, \
635  arg4, \
636  arg5, \
637  arg6, \
638  arg7, \
639  arg8, \
640  arg9, \
641  arg10, \
642  arg11, \
643  arg12, \
644  arg13, \
645  arg14, \
646  arg15, \
647  arg16, \
648  arg17, \
649  arg18, \
650  arg19, \
651  arg20, \
652  arg21, \
653  arg22) \
654 { \
655  void *lastarg = NULL; \
656  void *args_list = QUARK_Args_List( quark ); \
657  void *arg = QUARK_Args_Pop(args_list, &lastarg); \
658  memcpy(&arg1, arg, sizeof(arg1)); arg = QUARK_Args_Pop(args_list, &lastarg); \
659  memcpy(&arg2, arg, sizeof(arg2)); arg = QUARK_Args_Pop(args_list, &lastarg); \
660  memcpy(&arg3, arg, sizeof(arg3)); arg = QUARK_Args_Pop(args_list, &lastarg); \
661  memcpy(&arg4, arg, sizeof(arg4)); arg = QUARK_Args_Pop(args_list, &lastarg); \
662  memcpy(&arg5, arg, sizeof(arg5)); arg = QUARK_Args_Pop(args_list, &lastarg); \
663  memcpy(&arg6, arg, sizeof(arg6)); arg = QUARK_Args_Pop(args_list, &lastarg); \
664  memcpy(&arg7, arg, sizeof(arg7)); arg = QUARK_Args_Pop(args_list, &lastarg); \
665  memcpy(&arg8, arg, sizeof(arg8)); arg = QUARK_Args_Pop(args_list, &lastarg); \
666  memcpy(&arg9, arg, sizeof(arg9)); arg = QUARK_Args_Pop(args_list, &lastarg); \
667  memcpy(&arg10, arg, sizeof(arg10)); arg = QUARK_Args_Pop(args_list, &lastarg); \
668  memcpy(&arg11, arg, sizeof(arg11)); arg = QUARK_Args_Pop(args_list, &lastarg); \
669  memcpy(&arg12, arg, sizeof(arg12)); arg = QUARK_Args_Pop(args_list, &lastarg); \
670  memcpy(&arg13, arg, sizeof(arg13)); arg = QUARK_Args_Pop(args_list, &lastarg); \
671  memcpy(&arg14, arg, sizeof(arg14)); arg = QUARK_Args_Pop(args_list, &lastarg); \
672  memcpy(&arg15, arg, sizeof(arg15)); arg = QUARK_Args_Pop(args_list, &lastarg); \
673  memcpy(&arg16, arg, sizeof(arg16)); arg = QUARK_Args_Pop(args_list, &lastarg); \
674  memcpy(&arg17, arg, sizeof(arg17)); arg = QUARK_Args_Pop(args_list, &lastarg); \
675  memcpy(&arg18, arg, sizeof(arg18)); arg = QUARK_Args_Pop(args_list, &lastarg); \
676  memcpy(&arg19, arg, sizeof(arg19)); arg = QUARK_Args_Pop(args_list, &lastarg); \
677  memcpy(&arg20, arg, sizeof(arg20)); arg = QUARK_Args_Pop(args_list, &lastarg); \
678  memcpy(&arg21, arg, sizeof(arg21)); arg = QUARK_Args_Pop(args_list, &lastarg); \
679  memcpy(&arg22, arg, sizeof(arg22)); \
680 }
681 
682 #define quark_unpack_args_23(quark, \
683  arg1, \
684  arg2, \
685  arg3, \
686  arg4, \
687  arg5, \
688  arg6, \
689  arg7, \
690  arg8, \
691  arg9, \
692  arg10, \
693  arg11, \
694  arg12, \
695  arg13, \
696  arg14, \
697  arg15, \
698  arg16, \
699  arg17, \
700  arg18, \
701  arg19, \
702  arg20, \
703  arg21, \
704  arg22, \
705  arg23) \
706 { \
707  void *lastarg = NULL; \
708  void *args_list = QUARK_Args_List( quark ); \
709  void *arg = QUARK_Args_Pop(args_list, &lastarg); \
710  memcpy(&arg1, arg, sizeof(arg1)); arg = QUARK_Args_Pop(args_list, &lastarg); \
711  memcpy(&arg2, arg, sizeof(arg2)); arg = QUARK_Args_Pop(args_list, &lastarg); \
712  memcpy(&arg3, arg, sizeof(arg3)); arg = QUARK_Args_Pop(args_list, &lastarg); \
713  memcpy(&arg4, arg, sizeof(arg4)); arg = QUARK_Args_Pop(args_list, &lastarg); \
714  memcpy(&arg5, arg, sizeof(arg5)); arg = QUARK_Args_Pop(args_list, &lastarg); \
715  memcpy(&arg6, arg, sizeof(arg6)); arg = QUARK_Args_Pop(args_list, &lastarg); \
716  memcpy(&arg7, arg, sizeof(arg7)); arg = QUARK_Args_Pop(args_list, &lastarg); \
717  memcpy(&arg8, arg, sizeof(arg8)); arg = QUARK_Args_Pop(args_list, &lastarg); \
718  memcpy(&arg9, arg, sizeof(arg9)); arg = QUARK_Args_Pop(args_list, &lastarg); \
719  memcpy(&arg10, arg, sizeof(arg10)); arg = QUARK_Args_Pop(args_list, &lastarg); \
720  memcpy(&arg11, arg, sizeof(arg11)); arg = QUARK_Args_Pop(args_list, &lastarg); \
721  memcpy(&arg12, arg, sizeof(arg12)); arg = QUARK_Args_Pop(args_list, &lastarg); \
722  memcpy(&arg13, arg, sizeof(arg13)); arg = QUARK_Args_Pop(args_list, &lastarg); \
723  memcpy(&arg14, arg, sizeof(arg14)); arg = QUARK_Args_Pop(args_list, &lastarg); \
724  memcpy(&arg15, arg, sizeof(arg15)); arg = QUARK_Args_Pop(args_list, &lastarg); \
725  memcpy(&arg16, arg, sizeof(arg16)); arg = QUARK_Args_Pop(args_list, &lastarg); \
726  memcpy(&arg17, arg, sizeof(arg17)); arg = QUARK_Args_Pop(args_list, &lastarg); \
727  memcpy(&arg18, arg, sizeof(arg18)); arg = QUARK_Args_Pop(args_list, &lastarg); \
728  memcpy(&arg19, arg, sizeof(arg19)); arg = QUARK_Args_Pop(args_list, &lastarg); \
729  memcpy(&arg20, arg, sizeof(arg20)); arg = QUARK_Args_Pop(args_list, &lastarg); \
730  memcpy(&arg21, arg, sizeof(arg21)); arg = QUARK_Args_Pop(args_list, &lastarg); \
731  memcpy(&arg22, arg, sizeof(arg22)); arg = QUARK_Args_Pop(args_list, &lastarg); \
732  memcpy(&arg23, arg, sizeof(arg23)); \
733 }
734 
735 #define quark_unpack_args_24(quark, \
736  arg1, \
737  arg2, \
738  arg3, \
739  arg4, \
740  arg5, \
741  arg6, \
742  arg7, \
743  arg8, \
744  arg9, \
745  arg10, \
746  arg11, \
747  arg12, \
748  arg13, \
749  arg14, \
750  arg15, \
751  arg16, \
752  arg17, \
753  arg18, \
754  arg19, \
755  arg20, \
756  arg21, \
757  arg22, \
758  arg23, \
759  arg24) \
760 { \
761  void *lastarg = NULL; \
762  void *args_list = QUARK_Args_List( quark ); \
763  void *arg = QUARK_Args_Pop(args_list, &lastarg); \
764  memcpy(&arg1, arg, sizeof(arg1)); arg = QUARK_Args_Pop(args_list, &lastarg); \
765  memcpy(&arg2, arg, sizeof(arg2)); arg = QUARK_Args_Pop(args_list, &lastarg); \
766  memcpy(&arg3, arg, sizeof(arg3)); arg = QUARK_Args_Pop(args_list, &lastarg); \
767  memcpy(&arg4, arg, sizeof(arg4)); arg = QUARK_Args_Pop(args_list, &lastarg); \
768  memcpy(&arg5, arg, sizeof(arg5)); arg = QUARK_Args_Pop(args_list, &lastarg); \
769  memcpy(&arg6, arg, sizeof(arg6)); arg = QUARK_Args_Pop(args_list, &lastarg); \
770  memcpy(&arg7, arg, sizeof(arg7)); arg = QUARK_Args_Pop(args_list, &lastarg); \
771  memcpy(&arg8, arg, sizeof(arg8)); arg = QUARK_Args_Pop(args_list, &lastarg); \
772  memcpy(&arg9, arg, sizeof(arg9)); arg = QUARK_Args_Pop(args_list, &lastarg); \
773  memcpy(&arg10, arg, sizeof(arg10)); arg = QUARK_Args_Pop(args_list, &lastarg); \
774  memcpy(&arg11, arg, sizeof(arg11)); arg = QUARK_Args_Pop(args_list, &lastarg); \
775  memcpy(&arg12, arg, sizeof(arg12)); arg = QUARK_Args_Pop(args_list, &lastarg); \
776  memcpy(&arg13, arg, sizeof(arg13)); arg = QUARK_Args_Pop(args_list, &lastarg); \
777  memcpy(&arg14, arg, sizeof(arg14)); arg = QUARK_Args_Pop(args_list, &lastarg); \
778  memcpy(&arg15, arg, sizeof(arg15)); arg = QUARK_Args_Pop(args_list, &lastarg); \
779  memcpy(&arg16, arg, sizeof(arg16)); arg = QUARK_Args_Pop(args_list, &lastarg); \
780  memcpy(&arg17, arg, sizeof(arg17)); arg = QUARK_Args_Pop(args_list, &lastarg); \
781  memcpy(&arg18, arg, sizeof(arg18)); arg = QUARK_Args_Pop(args_list, &lastarg); \
782  memcpy(&arg19, arg, sizeof(arg19)); arg = QUARK_Args_Pop(args_list, &lastarg); \
783  memcpy(&arg20, arg, sizeof(arg20)); arg = QUARK_Args_Pop(args_list, &lastarg); \
784  memcpy(&arg21, arg, sizeof(arg21)); arg = QUARK_Args_Pop(args_list, &lastarg); \
785  memcpy(&arg22, arg, sizeof(arg22)); arg = QUARK_Args_Pop(args_list, &lastarg); \
786  memcpy(&arg23, arg, sizeof(arg23)); arg = QUARK_Args_Pop(args_list, &lastarg); \
787  memcpy(&arg24, arg, sizeof(arg24)); \
788 }
789 
790 #endif