static Task gen()

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));
  }