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