in src/thread/task_queue.h [670:722]
static Task gen(RET (T::*func)(FARG1, FARG2, FARG3, FARG4, FARG5, FARG6, FARG7, FARG8, FARG9),
T* obj,
ARG1 arg1,
ARG2 arg2,
ARG3 arg3,
ARG4 arg4,
ARG5 arg5,
ARG6 arg6,
ARG7 arg7,
ARG8 arg8,
ARG9 arg9) {
struct lambda : public ITask_impl {
RET(T::*dest_func)
(FARG1, FARG2, FARG3, FARG4, FARG5, FARG6, FARG7, FARG8, FARG9);
T* obj;
ARG1 arg1;
ARG2 arg2;
ARG3 arg3;
ARG4 arg4;
ARG5 arg5;
ARG6 arg6;
ARG7 arg7;
ARG8 arg8;
ARG9 arg9;
lambda(RET (T::*func)(FARG1, FARG2, FARG3, FARG4, FARG5, FARG6, FARG7, FARG8, FARG9),
T* obj,
const ARG1& arg1,
const ARG2& arg2,
const ARG3& arg3,
const ARG4& arg4,
const ARG5& arg5,
const ARG6& arg6,
const ARG7& arg7,
const ARG8& arg8,
const ARG9& arg9)
: dest_func(func),
obj(obj),
arg1(arg1),
arg2(arg2),
arg3(arg3),
arg4(arg4),
arg5(arg5),
arg6(arg6),
arg7(arg7),
arg8(arg8),
arg9(arg9) {}
virtual void run() { (obj->*dest_func)(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9); }
virtual ITask_impl* fork() {
return new lambda(dest_func, obj, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9);
}
};
return Task(new lambda(func, obj, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9));
}