Go to the documentation of this file.
14 #ifndef __FLEXT_DEFS_METHTHR_H
15 #define __FLEXT_DEFS_METHTHR_H
25 #define FLEXT_THREAD(M_FUN) \
27 static bool FLEXT_CALL_PRE(M_FUN)(flext_base *c) { \
28 thr_params *p = new thr_params; \
29 return c->StartThread(FLEXT_THR_PRE(M_FUN),p,#M_FUN); \
31 static void FLEXT_THR_PRE(M_FUN)(thr_params *p) { \
32 thisType *th = FLEXT_CAST<thisType *>(p->cl); \
33 bool ok = th->PushThread(); \
42 #define FLEXT_THREAD_A(M_FUN) \
43 static bool FLEXT_CALL_PRE(M_FUN)(flext_base *c,t_symbol *s,int argc,t_atom *argv) { \
44 thr_params *p = new thr_params; p->set_any(s,argc,argv); \
45 return c->StartThread(FLEXT_THR_PRE(M_FUN),p,#M_FUN); \
47 static void FLEXT_THR_PRE(M_FUN)(thr_params *p) { \
48 thisType *th = FLEXT_CAST<thisType *>(p->cl); \
49 bool ok = th->PushThread(); \
50 AtomAnything *args = p->var[0]._any; \
53 th->M_FUN(args->Header(),args->Count(),args->Atoms()); \
60 #define FLEXT_THREAD_V(M_FUN) \
61 static bool FLEXT_CALL_PRE(M_FUN)(flext_base *c,int argc,t_atom *argv) { \
62 thr_params *p = new thr_params; p->set_list(argc,argv); \
63 return c->StartThread(FLEXT_THR_PRE(M_FUN),p,#M_FUN); \
65 static void FLEXT_THR_PRE(M_FUN)(thr_params *p) { \
66 thisType *th = FLEXT_CAST<thisType *>(p->cl); \
67 bool ok = th->PushThread(); \
68 AtomList *args = p->var[0]._list; \
71 th->M_FUN(args->Count(),args->Atoms()); \
80 #define FLEXT_THREAD_X(M_FUN) \
81 static bool FLEXT_CALL_PRE(M_FUN)(flext_base *c,void *data) { \
82 thr_params *p = new thr_params; p->var[0]._ext = data; \
83 return c->StartThread(FLEXT_THR_PRE(M_FUN),p,#M_FUN); \
85 static void FLEXT_THR_PRE(M_FUN)(thr_params *p) { \
86 thisType *th = FLEXT_CAST<thisType *>(p->cl); \
87 bool ok = th->PushThread(); \
88 void *data = p->var[0]._ext; \
98 #define FLEXT_THREAD_B(M_FUN) \
99 static bool FLEXT_CALL_PRE(M_FUN)(flext_base *c,int &arg1) { \
100 thr_params *p = new thr_params; p->var[0]._bool = arg1 != 0; \
101 return c->StartThread(FLEXT_THR_PRE(M_FUN),p,#M_FUN); \
103 static void FLEXT_THR_PRE(M_FUN)(thr_params *p) { \
104 thisType *th = FLEXT_CAST<thisType *>(p->cl); \
105 bool ok = th->PushThread(); \
106 bool b = p->var[0]._bool; \
115 #define FLEXT_THREAD_1(M_FUN,TP1) \
116 static bool FLEXT_CALL_PRE(M_FUN)(flext_base *c,TP1 &arg1) { \
117 thr_params *p = new thr_params(1); \
118 p->var[0]._ ## TP1 = arg1; \
119 return c->StartThread(FLEXT_THR_PRE(M_FUN),p,#M_FUN); \
121 static void FLEXT_THR_PRE(M_FUN)(thr_params *p) { \
122 thisType *th = FLEXT_CAST<thisType *>(p->cl); \
123 bool ok = th->PushThread(); \
124 const TP1 v1 = p->var[0]._ ## TP1; \
133 #define FLEXT_THREAD_2(M_FUN,TP1,TP2) \
134 static bool FLEXT_CALL_PRE(M_FUN)(flext_base *c,TP1 &arg1,TP2 &arg2) { \
135 thr_params *p = new thr_params(2); \
136 p->var[0]._ ## TP1 = arg1; \
137 p->var[1]._ ## TP2 = arg2; \
138 return c->StartThread(FLEXT_THR_PRE(M_FUN),p,#M_FUN); \
140 static void FLEXT_THR_PRE(M_FUN)(thr_params *p) { \
141 thisType *th = FLEXT_CAST<thisType *>(p->cl); \
142 bool ok = th->PushThread(); \
143 const TP1 v1 = p->var[0]._ ## TP1; \
144 const TP1 v2 = p->var[1]._ ## TP2; \
153 #define FLEXT_THREAD_3(M_FUN,TP1,TP2,TP3) \
154 static bool FLEXT_CALL_PRE(M_FUN)(flext_base *c,TP1 &arg1,TP2 &arg2,TP3 &arg3) { \
155 thr_params *p = new thr_params(3); \
156 p->var[0]._ ## TP1 = arg1; \
157 p->var[1]._ ## TP2 = arg2; \
158 p->var[2]._ ## TP3 = arg3; \
159 return c->StartThread(FLEXT_THR_PRE(M_FUN),p,#M_FUN); \
161 static void FLEXT_THR_PRE(M_FUN)(thr_params *p) { \
162 thisType *th = FLEXT_CAST<thisType *>(p->cl); \
163 bool ok = th->PushThread(); \
164 const TP1 v1 = p->var[0]._ ## TP1; \
165 const TP2 v2 = p->var[1]._ ## TP2; \
166 const TP3 v3 = p->var[2]._ ## TP3; \
169 th->M_FUN(v1,v2,v3); \
175 #define FLEXT_THREAD_4(M_FUN,TP1,TP2,TP3,TP4) \
176 static bool FLEXT_CALL_PRE(M_FUN)(flext_base *c,TP1 &arg1,TP2 &arg2,TP3 &arg3,TP4 &arg4) { \
177 thr_params *p = new thr_params(4); \
178 p->var[0]._ ## TP1 = arg1; \
179 p->var[1]._ ## TP2 = arg2; \
180 p->var[2]._ ## TP3 = arg3; \
181 p->var[3]._ ## TP4 = arg4; \
182 return c->StartThread(FLEXT_THR_PRE(M_FUN),p,#M_FUN); \
184 static void FLEXT_THR_PRE(M_FUN)(thr_params *p) { \
185 thisType *th = FLEXT_CAST<thisType *>(p->cl); \
186 bool ok = th->PushThread(); \
187 const TP1 v1 = p->var[0]._ ## TP1; \
188 const TP2 v2 = p->var[1]._ ## TP2; \
189 const TP3 v3 = p->var[2]._ ## TP3; \
190 const TP4 v4 = p->var[3]._ ## TP4; \
193 th->M_FUN(v1,v2,v3,v4); \
199 #define FLEXT_THREAD_5(M_FUN,TP1,TP2,TP3,TP4,TP5) \
200 static bool FLEXT_CALL_PRE(M_FUN)(flext_base *c,TP1 &arg1,TP2 &arg2,TP3 &arg3,TP4 &arg4,TP5 &arg5) { \
201 thr_params *p = new thr_params(5); \
202 p->var[0]._ ## TP1 = arg1; \
203 p->var[1]._ ## TP2 = arg2; \
204 p->var[2]._ ## TP3 = arg3; \
205 p->var[3]._ ## TP4 = arg4; \
206 p->var[4]._ ## TP5 = arg5; \
207 return c->StartThread(FLEXT_THR_PRE(M_FUN),p,#M_FUN); \
209 static void FLEXT_THR_PRE(M_FUN)(thr_params *p) { \
210 thisType *th = FLEXT_CAST<thisType *>(p->cl); \
211 bool ok = th->PushThread(); \
212 const TP1 v1 = p->var[0]._ ## TP1; \
213 const TP2 v2 = p->var[1]._ ## TP2; \
214 const TP3 v3 = p->var[2]._ ## TP3; \
215 const TP4 v4 = p->var[3]._ ## TP4; \
216 const TP5 v5 = p->var[4]._ ## TP5; \
219 th->M_FUN(v1,v2,v3,v4,v5); \
228 #define FLEXT_THREAD_F(M_FUN) \
230 FLEXT_THREAD_1(M_FUN,float)
233 #define FLEXT_THREAD_FF(M_FUN) \
235 FLEXT_THREAD_2(M_FUN,float,float)
238 #define FLEXT_THREAD_FFF(M_FUN) \
240 FLEXT_THREAD_3(M_FUN,float,float,float)
243 #define FLEXT_THREAD_I(M_FUN) \
245 FLEXT_THREAD_1(M_FUN,int)
248 #define FLEXT_THREAD_II(M_FUN) \
250 FLEXT_THREAD_2(M_FUN,int,int)
253 #define FLEXT_THREAD_III(M_FUN) \
255 FLEXT_THREAD_3(M_FUN,int,int,int)
258 #define FLEXT_THREAD_S(M_FUN) \
260 FLEXT_THREAD_1(M_FUN,t_symptr)
263 #define FLEXT_THREAD_G FLEXT_THREAD_V
268 #endif // FLEXT_THREADS