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