diff --git a/uppsrc/Core/Callback1.h b/uppsrc/Core/Callback1.h index 98303b856..29eb9359c 100644 --- a/uppsrc/Core/Callback1.h +++ b/uppsrc/Core/Callback1.h @@ -4,17 +4,17 @@ template struct CallbackMethodActionArgPte : public CallbackAction { Ptr object; M method; - T arg; + T arg; void Execute() { if(object) (object->*method)(arg); } CallbackMethodActionArgPte(O *object, M method, T arg) - : object(object), method(method), arg(arg) {} + : object(object), method(method), arg(pick(arg)) {} }; template Callback pteback1(O *object, void (M::*method)(Q), T arg) { - return Callback(new CallbackMethodActionArgPte(object, method, arg)); + return Callback(new CallbackMethodActionArgPte(object, method, pick(arg))); } template @@ -26,13 +26,13 @@ struct CallbackMethodActionArg : public CallbackAction { void Execute() { (object->*method)(arg); } CallbackMethodActionArg(O *object, M method, T arg) - : object(object), method(method), arg(arg) {} + : object(object), method(method), arg(pick(arg)) {} }; template Callback callback1(O *object, void (M::*method)(Q), T arg) { return Callback(new CallbackMethodActionArg - (object, method, arg)); + (object, method, pick(arg))); } template @@ -47,20 +47,20 @@ struct CallbackActionCallArg : public CallbackAction { T arg; void Execute() { fn(arg); } - CallbackActionCallArg(F fn, T arg) : fn(fn), arg(arg) {} + CallbackActionCallArg(F fn, T arg) : fn(fn), arg(pick(arg)) {} }; template Callback callback1(void (*fn)(Q), T arg) { - return Callback(new CallbackActionCallArg(fn, arg)); + return Callback(new CallbackActionCallArg(fn, pick(arg))); } //reduct template Callback callback1(Callback1 cb, T arg) { - return Callback(new CallbackActionCallArg, T>(cb, arg)); + return Callback(new CallbackActionCallArg, T>(cb, pick(arg))); } //1 arg to Callback1 @@ -69,85 +69,101 @@ template struct Callback1MethodActionArgPte : public Callback1Action { Ptr object; M method; - T arg; + T arg; void Execute(P1 p1) { if(object) (object->*method)(p1, arg); } Callback1MethodActionArgPte(O *object, M method, T arg) - : object(object), method(method), arg(arg) {} + : object(object), method(method), arg(pick(arg)) {} }; template Callback1 pteback1(O *object, void (M::*method)(P1, Q), T arg) { - return Callback1(new Callback1MethodActionArgPte (object, method, arg)); + return Callback1(new Callback1MethodActionArgPte (object, method, pick(arg))); } template struct Callback1MethodActionArg : public Callback1Action { O *object; M method; - T arg; + T arg; void Execute(P1 p1) { (object->*method)(p1, arg); } Callback1MethodActionArg(O *object, M method, T arg) - : object(object), method(method), arg(arg) {} + : object(object), method(method), arg(pick(arg)) {} }; template Callback1 callback1(O *object, void (M::*method)(P1, Q), T arg) { return Callback1(new Callback1MethodActionArg - (object, method, arg)); + (object, method, pick(arg))); } template Callback1 callback1(const O *object, void (M::*method)(P1, Q) const, T arg) { return Callback1(new Callback1MethodActionArg - (object, method, arg)); + (object, method, pick(arg))); } template struct Callback1ActionCallArg : public Callback1Action { F fn; T arg; - void Execute(P1 p1) { fn(p1, arg); } + void Execute(P1 p1) { fn(p1, pick(arg)); } - Callback1ActionCallArg(F fn, T arg) : fn(fn), arg(arg) {} + Callback1ActionCallArg(F fn, T arg) : fn(fn), arg(pick(arg)) {} }; template Callback1 callback1(void (*fn)(P1, Q), T arg) { - return Callback1(new Callback1ActionCallArg(fn, arg)); + return Callback1(new Callback1ActionCallArg(fn, pick(arg))); } //reduct template Callback1 callback1(Callback2 cb, T arg) { - return Callback1(new Callback1ActionCallArg, P1, T>(cb, arg)); + return Callback1(new Callback1ActionCallArg, P1, T>(cb, pick(arg))); } //1 arg to Callback2 +template +struct Callback2MethodActionArgPte : public Callback2Action { + Ptr object; + M method; + T arg; + void Execute(P1 p1, P2 p2) { if(object) (object->*method)(p1, p2, arg); } + + Callback2MethodActionArgPte(O *object, M method, T arg) + : object(object), method(method), arg(pick(arg)) {} +}; + +template +Callback2 pteback1(O *object, void (M::*method)(P1, P2, Q), T arg) { + return Callback2(new Callback2MethodActionArgPte (object, method, pick(arg))); +} + template struct Callback2MethodActionArg : public Callback2Action { - O *object; - M method; - T arg; + O *object; + M method; + T arg; void Execute(P1 p1, P2 p2) { (object->*method)(p1, p2, arg); } Callback2MethodActionArg(O *object, M method, T arg) - : object(object), method(method), arg(arg) {} + : object(object), method(method), arg(pick(arg)) {} }; template Callback2 callback1(O *object, void (M::*method)(P1, P2, Q), T arg) { return Callback2(new Callback2MethodActionArg - (object, method, arg)); + (object, method, pick(arg))); } template Callback2 callback1(const O *object, void (M::*method)(P1, P2, Q) const, T arg) { return Callback2(new Callback2MethodActionArg - (object, method, arg)); + (object, method, pick(arg))); } template @@ -156,23 +172,40 @@ struct Callback2ActionCallArg : Callback2Action { T arg; void Execute(P1 p1, P2 p2) { fn(p1, p2, arg); } - Callback2ActionCallArg(F fn, T arg) : fn(fn), arg(arg) {} + Callback2ActionCallArg(F fn, T arg) : fn(fn), arg(pick(arg)) {} }; template Callback2 callback1(void (*fn)(P1, P2, Q), T arg) { - return Callback2(new Callback2ActionCallArg(fn, arg)); + return Callback2(new Callback2ActionCallArg(fn, pick(arg))); } //reduct template Callback2 callback1(Callback3 cb, T arg) { - return Callback2(new Callback2ActionCallArg, P1, P2, T>(cb, arg)); + return Callback2(new Callback2ActionCallArg, P1, P2, T>(cb, pick(arg))); } //1 arg to Callback3 +template +struct Callback3MethodActionArgPte : public Callback3Action { + Ptr object; + M method; + T arg; + void Execute(P1 p1, P2 p2, P3 p3) { if(object) (object->*method)(p1, p2, p3, arg); } + + Callback3MethodActionArgPte(O *object, M method, T arg) + : object(object), method(method), arg(pick(arg)) {} +}; + +template +Callback3 pteback1(O *object, void (M::*method)(P1, P2, P3, Q), T arg) { + return Callback3(new Callback3MethodActionArgPte + (object, method, pick(arg))); +} + template struct Callback3MethodActionArg : public Callback3Action { O *object; @@ -181,19 +214,19 @@ struct Callback3MethodActionArg : public Callback3Action { void Execute(P1 p1, P2 p2, P3 p3) { (object->*method)(p1, p2, p3, arg); } Callback3MethodActionArg(O *object, M method, T arg) - : object(object), method(method), arg(arg) {} + : object(object), method(method), arg(pick(arg)) {} }; template Callback3 callback1(O *object, void (M::*method)(P1, P2, P3, Q), T arg) { return Callback3(new Callback3MethodActionArg - (object, method, arg)); + (object, method, pick(arg))); } template Callback3 callback1(const O *object, void (M::*method)(P1, P2, P3, Q) const, T arg) { return Callback3(new Callback3MethodActionArg - (object, method, arg)); + (object, method, pick(arg))); } template @@ -202,23 +235,40 @@ struct Callback3ActionCallArg : Callback3Action { T arg; void Execute(P1 p1, P2 p2, P3 p3) { fn(p1, p2, p3, arg); } - Callback3ActionCallArg(F fn, T arg) : fn(fn), arg(arg) {} + Callback3ActionCallArg(F fn, T arg) : fn(fn), arg(pick(arg)) {} }; template Callback3 callback1(void (*fn)(P1, P2, P3, Q), T arg) { - return Callback3(new Callback3ActionCallArg(fn, arg)); + return Callback3(new Callback3ActionCallArg(fn, pick(arg))); } //reduct template Callback3 callback1(Callback4 cb, T arg) { - return Callback3(new Callback3ActionCallArg, P1, P2, P3, T>(cb, arg)); + return Callback3(new Callback3ActionCallArg, P1, P2, P3, T>(cb, pick(arg))); } //1 arg to Callback4 +template +struct Callback4MethodActionArgPte : public Callback4Action { + Ptr object; + M method; + T arg; + void Execute(P1 p1, P2 p2, P3 p3, P4 p4) { if(object) (object->*method)(p1, p2, p3, p4, arg); } + + Callback4MethodActionArgPte(O *object, M method, T arg) + : object(object), method(method), arg(pick(arg)) {} +}; + +template +Callback4 pteback1(O *object, void (M::*method)(P1, P2, P3, P4, Q), T arg) { + return Callback4(new Callback4MethodActionArgPte + (object, method, pick(arg))); +} + template struct Callback4MethodActionArg : public Callback4Action { O *object; @@ -227,19 +277,19 @@ struct Callback4MethodActionArg : public Callback4Action { void Execute(P1 p1, P2 p2, P3 p3, P4 p4) { (object->*method)(p1, p2, p3, p4, arg); } Callback4MethodActionArg(O *object, M method, T arg) - : object(object), method(method), arg(arg) {} + : object(object), method(method), arg(pick(arg)) {} }; template Callback4 callback1(O *object, void (M::*method)(P1, P2, P3, P4, Q), T arg) { return Callback4(new Callback4MethodActionArg - (object, method, arg)); + (object, method, pick(arg))); } template Callback4 callback1(const O *object, void (M::*method)(P1, P2, P3, P4, Q) const, T arg) { return Callback4(new Callback4MethodActionArg - (object, method, arg)); + (object, method, pick(arg))); } template @@ -248,13 +298,13 @@ struct Callback4ActionCallArg : Callback4Action { T arg; void Execute(P1 p1, P2 p2, P3 p3, P4 p4) { fn(p1, p2, p3, p4, arg); } - Callback4ActionCallArg(F fn, T arg) : fn(fn), arg(arg) {} + Callback4ActionCallArg(F fn, T arg) : fn(fn), arg(pick(arg)) {} }; template Callback4 callback1(void (*fn)(P1, P2, P3, P4, Q), T arg) { - return Callback4(new Callback4ActionCallArg(fn, arg)); + return Callback4(new Callback4ActionCallArg(fn, pick(arg))); } // -------------------------------------------------------