From fb39d5a300220671c2f0e2e98df9a4f67c0998c0 Mon Sep 17 00:00:00 2001 From: Sandu Liviu Catalin Date: Sun, 29 Jul 2018 19:28:46 +0300 Subject: [PATCH] Significantly reduce the amount of code required to forward calls from scripts to global native functions by using variadic templates. --- include/sqrat/sqratGlobalMethods.h | 2385 +------------------------- include/sqrat/sqratOverloadMethods.h | 333 +--- 2 files changed, 98 insertions(+), 2620 deletions(-) diff --git a/include/sqrat/sqratGlobalMethods.h b/include/sqrat/sqratGlobalMethods.h index bd5bdabc..211efd26 100644 --- a/include/sqrat/sqratGlobalMethods.h +++ b/include/sqrat/sqratGlobalMethods.h @@ -44,2340 +44,127 @@ namespace Sqrat { // // Squirrel Global Functions // -template -class SqGlobal { -public: - - // Arg Count 0 - template - static SQInteger Func0(HSQUIRRELVM vm) { - +template struct SqGlobal { + // Function proxy + template static SQFUNCTION GetProxy() noexcept { + typedef R(*M)(A...); + return +[](HSQUIRRELVM vm) noexcept -> SQInteger { #if !defined (SCRAT_NO_ERROR_CHECKING) - if (!SQRAT_CONST_CONDITION(overloaded) && sq_gettop(vm) != 2) { - return sq_throwerror(vm, _SC("wrong number of parameters")); - } + if (!SQRAT_CONST_CONDITION(overloaded) && sq_gettop(vm) != startIdx + 2) { + return sq_throwerror(vm, _SC("wrong number of parameters")); + } #endif + M* method; + sq_getuserdata(vm, -1, reinterpret_cast(&method), NULL); - typedef R (*M)(); - M* method; - sq_getuserdata(vm, -1, (SQUserPointer*)&method, NULL); + SQTRY() + ArgPop a(vm, startIdx); + SQCATCH_NOEXCEPT(vm) { + return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); + } + R ret = a.template Eval(*method); + SQCATCH_NOEXCEPT(vm) { + return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); + } + PushVar(vm, ret); + SQCATCH(vm) { + return sq_throwerror(vm, SQWHAT(vm)); + } - SQTRY() - R ret = (*method)(); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - PushVar(vm, ret); - SQCATCH(vm) { - return sq_throwerror(vm, SQWHAT(vm)); - } - return 1; - } - - // Arg Count 1 - template - static SQInteger Func1(HSQUIRRELVM vm) { - -#if !defined (SCRAT_NO_ERROR_CHECKING) - if (!SQRAT_CONST_CONDITION(overloaded) && sq_gettop(vm) != startIdx + 1) { - return sq_throwerror(vm, _SC("wrong number of parameters")); - } -#endif - - typedef R (*M)(A1); - M* method; - sq_getuserdata(vm, -1, (SQUserPointer*)&method, NULL); - - SQTRY() - Var a1(vm, startIdx); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - R ret = (*method)( - a1.value - ); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - PushVar(vm, ret); - SQCATCH(vm) { - return sq_throwerror(vm, SQWHAT(vm)); - } - return 1; - } - - // Arg Count 2 - template - static SQInteger Func2(HSQUIRRELVM vm) { - -#if !defined (SCRAT_NO_ERROR_CHECKING) - if (!SQRAT_CONST_CONDITION(overloaded) && sq_gettop(vm) != startIdx + 2) { - return sq_throwerror(vm, _SC("wrong number of parameters")); - } -#endif - - typedef R (*M)(A1, A2); - M* method; - sq_getuserdata(vm, -1, (SQUserPointer*)&method, NULL); - - SQTRY() - Var a1(vm, startIdx); - Var a2(vm, startIdx + 1); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - R ret = (*method)( - a1.value, - a2.value - ); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - PushVar(vm, ret); - SQCATCH(vm) { - return sq_throwerror(vm, SQWHAT(vm)); - } - return 1; - } - - // Arg Count 3 - template - static SQInteger Func3(HSQUIRRELVM vm) { - -#if !defined (SCRAT_NO_ERROR_CHECKING) - if (!SQRAT_CONST_CONDITION(overloaded) && sq_gettop(vm) != startIdx + 3) { - return sq_throwerror(vm, _SC("wrong number of parameters")); - } -#endif - - typedef R (*M)(A1, A2, A3); - M* method; - sq_getuserdata(vm, -1, (SQUserPointer*)&method, NULL); - - SQTRY() - Var a1(vm, startIdx); - Var a2(vm, startIdx + 1); - Var a3(vm, startIdx + 2); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - R ret = (*method)( - a1.value, - a2.value, - a3.value - ); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - PushVar(vm, ret); - SQCATCH(vm) { - return sq_throwerror(vm, SQWHAT(vm)); - } - return 1; - } - - // Arg Count 4 - template - static SQInteger Func4(HSQUIRRELVM vm) { - -#if !defined (SCRAT_NO_ERROR_CHECKING) - if (!SQRAT_CONST_CONDITION(overloaded) && sq_gettop(vm) != startIdx + 4) { - return sq_throwerror(vm, _SC("wrong number of parameters")); - } -#endif - - typedef R (*M)(A1, A2, A3, A4); - M* method; - sq_getuserdata(vm, -1, (SQUserPointer*)&method, NULL); - - SQTRY() - Var a1(vm, startIdx); - Var a2(vm, startIdx + 1); - Var a3(vm, startIdx + 2); - Var a4(vm, startIdx + 3); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - R ret = (*method)( - a1.value, - a2.value, - a3.value, - a4.value - ); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - PushVar(vm, ret); - SQCATCH(vm) { - return sq_throwerror(vm, SQWHAT(vm)); - } - return 1; - } - - // Arg Count 5 - template - static SQInteger Func5(HSQUIRRELVM vm) { - -#if !defined (SCRAT_NO_ERROR_CHECKING) - if (!SQRAT_CONST_CONDITION(overloaded) && sq_gettop(vm) != startIdx + 5) { - return sq_throwerror(vm, _SC("wrong number of parameters")); - } -#endif - - typedef R (*M)(A1, A2, A3, A4, A5); - M* method; - sq_getuserdata(vm, -1, (SQUserPointer*)&method, NULL); - - SQTRY() - Var a1(vm, startIdx); - Var a2(vm, startIdx + 1); - Var a3(vm, startIdx + 2); - Var a4(vm, startIdx + 3); - Var a5(vm, startIdx + 4); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - R ret = (*method)( - a1.value, - a2.value, - a3.value, - a4.value, - a5.value - ); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - PushVar(vm, ret); - SQCATCH(vm) { - return sq_throwerror(vm, SQWHAT(vm)); - } - return 1; - } - - // Arg Count 6 - template - static SQInteger Func6(HSQUIRRELVM vm) { - -#if !defined (SCRAT_NO_ERROR_CHECKING) - if (!SQRAT_CONST_CONDITION(overloaded) && sq_gettop(vm) != startIdx + 6) { - return sq_throwerror(vm, _SC("wrong number of parameters")); - } -#endif - - typedef R (*M)(A1, A2, A3, A4, A5, A6); - M* method; - sq_getuserdata(vm, -1, (SQUserPointer*)&method, NULL); - - SQTRY() - Var a1(vm, startIdx); - Var a2(vm, startIdx + 1); - Var a3(vm, startIdx + 2); - Var a4(vm, startIdx + 3); - Var a5(vm, startIdx + 4); - Var a6(vm, startIdx + 5); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - R ret = (*method)( - a1.value, - a2.value, - a3.value, - a4.value, - a5.value, - a6.value - ); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - PushVar(vm, ret); - SQCATCH(vm) { - return sq_throwerror(vm, SQWHAT(vm)); - } - return 1; - } - - // Arg Count 7 - template - static SQInteger Func7(HSQUIRRELVM vm) { - -#if !defined (SCRAT_NO_ERROR_CHECKING) - if (!SQRAT_CONST_CONDITION(overloaded) && sq_gettop(vm) != startIdx + 7) { - return sq_throwerror(vm, _SC("wrong number of parameters")); - } -#endif - - typedef R (*M)(A1, A2, A3, A4, A5, A6, A7); - M* method; - sq_getuserdata(vm, -1, (SQUserPointer*)&method, NULL); - - SQTRY() - Var a1(vm, startIdx); - Var a2(vm, startIdx + 1); - Var a3(vm, startIdx + 2); - Var a4(vm, startIdx + 3); - Var a5(vm, startIdx + 4); - Var a6(vm, startIdx + 5); - Var a7(vm, startIdx + 6); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - R ret = (*method)( - a1.value, - a2.value, - a3.value, - a4.value, - a5.value, - a6.value, - a7.value - ); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - PushVar(vm, ret); - SQCATCH(vm) { - return sq_throwerror(vm, SQWHAT(vm)); - } - return 1; - } - - // Arg Count 8 - template - static SQInteger Func8(HSQUIRRELVM vm) { - -#if !defined (SCRAT_NO_ERROR_CHECKING) - if (!SQRAT_CONST_CONDITION(overloaded) && sq_gettop(vm) != startIdx + 8) { - return sq_throwerror(vm, _SC("wrong number of parameters")); - } -#endif - - typedef R (*M)(A1, A2, A3, A4, A5, A6, A7, A8); - M* method; - sq_getuserdata(vm, -1, (SQUserPointer*)&method, NULL); - - SQTRY() - Var a1(vm, startIdx); - Var a2(vm, startIdx + 1); - Var a3(vm, startIdx + 2); - Var a4(vm, startIdx + 3); - Var a5(vm, startIdx + 4); - Var a6(vm, startIdx + 5); - Var a7(vm, startIdx + 6); - Var a8(vm, startIdx + 7); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - R ret = (*method)( - a1.value, - a2.value, - a3.value, - a4.value, - a5.value, - a6.value, - a7.value, - a8.value - ); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - PushVar(vm, ret); - SQCATCH(vm) { - return sq_throwerror(vm, SQWHAT(vm)); - } - return 1; - } - - // Arg Count 9 - template - static SQInteger Func9(HSQUIRRELVM vm) { - -#if !defined (SCRAT_NO_ERROR_CHECKING) - if (!SQRAT_CONST_CONDITION(overloaded) && sq_gettop(vm) != startIdx + 9) { - return sq_throwerror(vm, _SC("wrong number of parameters")); - } -#endif - - typedef R (*M)(A1, A2, A3, A4, A5, A6, A7, A8, A9); - M* method; - sq_getuserdata(vm, -1, (SQUserPointer*)&method, NULL); - - SQTRY() - Var a1(vm, startIdx); - Var a2(vm, startIdx + 1); - Var a3(vm, startIdx + 2); - Var a4(vm, startIdx + 3); - Var a5(vm, startIdx + 4); - Var a6(vm, startIdx + 5); - Var a7(vm, startIdx + 6); - Var a8(vm, startIdx + 7); - Var a9(vm, startIdx + 8); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - R ret = (*method)( - a1.value, - a2.value, - a3.value, - a4.value, - a5.value, - a6.value, - a7.value, - a8.value, - a9.value - ); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - PushVar(vm, ret); - SQCATCH(vm) { - return sq_throwerror(vm, SQWHAT(vm)); - } - return 1; - } - - // Arg Count 10 - template - static SQInteger Func10(HSQUIRRELVM vm) { - -#if !defined (SCRAT_NO_ERROR_CHECKING) - if (!SQRAT_CONST_CONDITION(overloaded) && sq_gettop(vm) != startIdx + 10) { - return sq_throwerror(vm, _SC("wrong number of parameters")); - } -#endif - - typedef R (*M)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10); - M* method; - sq_getuserdata(vm, -1, (SQUserPointer*)&method, NULL); - - SQTRY() - Var a1(vm, startIdx); - Var a2(vm, startIdx + 1); - Var a3(vm, startIdx + 2); - Var a4(vm, startIdx + 3); - Var a5(vm, startIdx + 4); - Var a6(vm, startIdx + 5); - Var a7(vm, startIdx + 6); - Var a8(vm, startIdx + 7); - Var a9(vm, startIdx + 8); - Var a10(vm, startIdx + 9); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - R ret = (*method)( - a1.value, - a2.value, - a3.value, - a4.value, - a5.value, - a6.value, - a7.value, - a8.value, - a9.value, - a10.value - ); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - PushVar(vm, ret); - SQCATCH(vm) { - return sq_throwerror(vm, SQWHAT(vm)); - } - return 1; - } - - // Arg Count 11 - template - static SQInteger Func11(HSQUIRRELVM vm) { - -#if !defined (SCRAT_NO_ERROR_CHECKING) - if (!SQRAT_CONST_CONDITION(overloaded) && sq_gettop(vm) != startIdx + 11) { - return sq_throwerror(vm, _SC("wrong number of parameters")); - } -#endif - - typedef R (*M)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11); - M* method; - sq_getuserdata(vm, -1, (SQUserPointer*)&method, NULL); - - SQTRY() - Var a1(vm, startIdx); - Var a2(vm, startIdx + 1); - Var a3(vm, startIdx + 2); - Var a4(vm, startIdx + 3); - Var a5(vm, startIdx + 4); - Var a6(vm, startIdx + 5); - Var a7(vm, startIdx + 6); - Var a8(vm, startIdx + 7); - Var a9(vm, startIdx + 8); - Var a10(vm, startIdx + 9); - Var a11(vm, startIdx + 10); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - R ret = (*method)( - a1.value, - a2.value, - a3.value, - a4.value, - a5.value, - a6.value, - a7.value, - a8.value, - a9.value, - a10.value, - a11.value - ); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - PushVar(vm, ret); - SQCATCH(vm) { - return sq_throwerror(vm, SQWHAT(vm)); - } - return 1; - } - - // Arg Count 12 - template - static SQInteger Func12(HSQUIRRELVM vm) { - -#if !defined (SCRAT_NO_ERROR_CHECKING) - if (!SQRAT_CONST_CONDITION(overloaded) && sq_gettop(vm) != startIdx + 12) { - return sq_throwerror(vm, _SC("wrong number of parameters")); - } -#endif - - typedef R (*M)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12); - M* method; - sq_getuserdata(vm, -1, (SQUserPointer*)&method, NULL); - - SQTRY() - Var a1(vm, startIdx); - Var a2(vm, startIdx + 1); - Var a3(vm, startIdx + 2); - Var a4(vm, startIdx + 3); - Var a5(vm, startIdx + 4); - Var a6(vm, startIdx + 5); - Var a7(vm, startIdx + 6); - Var a8(vm, startIdx + 7); - Var a9(vm, startIdx + 8); - Var a10(vm, startIdx + 9); - Var a11(vm, startIdx + 10); - Var a12(vm, startIdx + 11); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - R ret = (*method)( - a1.value, - a2.value, - a3.value, - a4.value, - a5.value, - a6.value, - a7.value, - a8.value, - a9.value, - a10.value, - a11.value, - a12.value - ); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - PushVar(vm, ret); - SQCATCH(vm) { - return sq_throwerror(vm, SQWHAT(vm)); - } - return 1; - } - - // Arg Count 13 - template - static SQInteger Func13(HSQUIRRELVM vm) { - -#if !defined (SCRAT_NO_ERROR_CHECKING) - if (!SQRAT_CONST_CONDITION(overloaded) && sq_gettop(vm) != startIdx + 13) { - return sq_throwerror(vm, _SC("wrong number of parameters")); - } -#endif - - typedef R (*M)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13); - M* method; - sq_getuserdata(vm, -1, (SQUserPointer*)&method, NULL); - - SQTRY() - Var a1(vm, startIdx); - Var a2(vm, startIdx + 1); - Var a3(vm, startIdx + 2); - Var a4(vm, startIdx + 3); - Var a5(vm, startIdx + 4); - Var a6(vm, startIdx + 5); - Var a7(vm, startIdx + 6); - Var a8(vm, startIdx + 7); - Var a9(vm, startIdx + 8); - Var a10(vm, startIdx + 9); - Var a11(vm, startIdx + 10); - Var a12(vm, startIdx + 11); - Var a13(vm, startIdx + 12); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - R ret = (*method)( - a1.value, - a2.value, - a3.value, - a4.value, - a5.value, - a6.value, - a7.value, - a8.value, - a9.value, - a10.value, - a11.value, - a12.value, - a13.value - ); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - PushVar(vm, ret); - SQCATCH(vm) { - return sq_throwerror(vm, SQWHAT(vm)); - } - return 1; - } - - // Arg Count 14 - template - static SQInteger Func14(HSQUIRRELVM vm) { - -#if !defined (SCRAT_NO_ERROR_CHECKING) - if (!SQRAT_CONST_CONDITION(overloaded) && sq_gettop(vm) != startIdx + 14) { - return sq_throwerror(vm, _SC("wrong number of parameters")); - } -#endif - - typedef R (*M)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14); - M* method; - sq_getuserdata(vm, -1, (SQUserPointer*)&method, NULL); - - SQTRY() - Var a1(vm, startIdx); - Var a2(vm, startIdx + 1); - Var a3(vm, startIdx + 2); - Var a4(vm, startIdx + 3); - Var a5(vm, startIdx + 4); - Var a6(vm, startIdx + 5); - Var a7(vm, startIdx + 6); - Var a8(vm, startIdx + 7); - Var a9(vm, startIdx + 8); - Var a10(vm, startIdx + 9); - Var a11(vm, startIdx + 10); - Var a12(vm, startIdx + 11); - Var a13(vm, startIdx + 12); - Var a14(vm, startIdx + 13); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - R ret = (*method)( - a1.value, - a2.value, - a3.value, - a4.value, - a5.value, - a6.value, - a7.value, - a8.value, - a9.value, - a10.value, - a11.value, - a12.value, - a13.value, - a14.value - ); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - PushVar(vm, ret); - SQCATCH(vm) { - return sq_throwerror(vm, SQWHAT(vm)); - } - return 1; + return 1; + }; } }; - // // reference return specialization // -template -class SqGlobal { -public: - - // Arg Count 0 - template - static SQInteger Func0(HSQUIRRELVM vm) { - +template struct SqGlobal { + // Function proxy + template static SQFUNCTION GetProxy() noexcept { + typedef R&(*M)(A...); + return +[](HSQUIRRELVM vm) noexcept -> SQInteger { #if !defined (SCRAT_NO_ERROR_CHECKING) - if (!SQRAT_CONST_CONDITION(overloaded) && sq_gettop(vm) != 2) { - return sq_throwerror(vm, _SC("wrong number of parameters")); - } + if (!SQRAT_CONST_CONDITION(overloaded) && sq_gettop(vm) != startIdx + 2) { + return sq_throwerror(vm, _SC("wrong number of parameters")); + } #endif + M* method; + sq_getuserdata(vm, -1, reinterpret_cast(&method), NULL); - typedef R& (*M)(); - M* method; - sq_getuserdata(vm, -1, (SQUserPointer*)&method, NULL); + SQTRY() + ArgPop a(vm, startIdx); + SQCATCH_NOEXCEPT(vm) { + return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); + } + R& ret = a.template Eval(*method); + SQCATCH_NOEXCEPT(vm) { + return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); + } + PushVarR(vm, ret); + SQCATCH(vm) { + return sq_throwerror(vm, SQWHAT(vm)); + } - SQTRY() - R& ret = (*method)(); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - PushVarR(vm, ret); - SQCATCH(vm) { - return sq_throwerror(vm, SQWHAT(vm)); - } - return 1; - } - - // Arg Count 1 - template - static SQInteger Func1(HSQUIRRELVM vm) { - -#if !defined (SCRAT_NO_ERROR_CHECKING) - if (!SQRAT_CONST_CONDITION(overloaded) && sq_gettop(vm) != startIdx + 1) { - return sq_throwerror(vm, _SC("wrong number of parameters")); - } -#endif - - typedef R& (*M)(A1); - M* method; - sq_getuserdata(vm, -1, (SQUserPointer*)&method, NULL); - - SQTRY() - Var a1(vm, startIdx); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - R& ret = (*method)( - a1.value - ); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - PushVarR(vm, ret); - SQCATCH(vm) { - return sq_throwerror(vm, SQWHAT(vm)); - } - return 1; - } - - // Arg Count 2 - template - static SQInteger Func2(HSQUIRRELVM vm) { - -#if !defined (SCRAT_NO_ERROR_CHECKING) - if (!SQRAT_CONST_CONDITION(overloaded) && sq_gettop(vm) != startIdx + 2) { - return sq_throwerror(vm, _SC("wrong number of parameters")); - } -#endif - - typedef R& (*M)(A1, A2); - M* method; - sq_getuserdata(vm, -1, (SQUserPointer*)&method, NULL); - - SQTRY() - Var a1(vm, startIdx); - Var a2(vm, startIdx + 1); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - R& ret = (*method)( - a1.value, - a2.value - ); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - PushVarR(vm, ret); - SQCATCH(vm) { - return sq_throwerror(vm, SQWHAT(vm)); - } - return 1; - } - - // Arg Count 3 - template - static SQInteger Func3(HSQUIRRELVM vm) { - -#if !defined (SCRAT_NO_ERROR_CHECKING) - if (!SQRAT_CONST_CONDITION(overloaded) && sq_gettop(vm) != startIdx + 3) { - return sq_throwerror(vm, _SC("wrong number of parameters")); - } -#endif - - typedef R& (*M)(A1, A2, A3); - M* method; - sq_getuserdata(vm, -1, (SQUserPointer*)&method, NULL); - - SQTRY() - Var a1(vm, startIdx); - Var a2(vm, startIdx + 1); - Var a3(vm, startIdx + 2); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - R& ret = (*method)( - a1.value, - a2.value, - a3.value - ); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - PushVarR(vm, ret); - SQCATCH(vm) { - return sq_throwerror(vm, SQWHAT(vm)); - } - return 1; - } - - // Arg Count 4 - template - static SQInteger Func4(HSQUIRRELVM vm) { - -#if !defined (SCRAT_NO_ERROR_CHECKING) - if (!SQRAT_CONST_CONDITION(overloaded) && sq_gettop(vm) != startIdx + 4) { - return sq_throwerror(vm, _SC("wrong number of parameters")); - } -#endif - - typedef R& (*M)(A1, A2, A3, A4); - M* method; - sq_getuserdata(vm, -1, (SQUserPointer*)&method, NULL); - - SQTRY() - Var a1(vm, startIdx); - Var a2(vm, startIdx + 1); - Var a3(vm, startIdx + 2); - Var a4(vm, startIdx + 3); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - R& ret = (*method)( - a1.value, - a2.value, - a3.value, - a4.value - ); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - PushVarR(vm, ret); - SQCATCH(vm) { - return sq_throwerror(vm, SQWHAT(vm)); - } - return 1; - } - - // Arg Count 5 - template - static SQInteger Func5(HSQUIRRELVM vm) { - -#if !defined (SCRAT_NO_ERROR_CHECKING) - if (!SQRAT_CONST_CONDITION(overloaded) && sq_gettop(vm) != startIdx + 5) { - return sq_throwerror(vm, _SC("wrong number of parameters")); - } -#endif - - typedef R& (*M)(A1, A2, A3, A4, A5); - M* method; - sq_getuserdata(vm, -1, (SQUserPointer*)&method, NULL); - - SQTRY() - Var a1(vm, startIdx); - Var a2(vm, startIdx + 1); - Var a3(vm, startIdx + 2); - Var a4(vm, startIdx + 3); - Var a5(vm, startIdx + 4); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - R& ret = (*method)( - a1.value, - a2.value, - a3.value, - a4.value, - a5.value - ); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - PushVarR(vm, ret); - SQCATCH(vm) { - return sq_throwerror(vm, SQWHAT(vm)); - } - return 1; - } - - // Arg Count 6 - template - static SQInteger Func6(HSQUIRRELVM vm) { - -#if !defined (SCRAT_NO_ERROR_CHECKING) - if (!SQRAT_CONST_CONDITION(overloaded) && sq_gettop(vm) != startIdx + 6) { - return sq_throwerror(vm, _SC("wrong number of parameters")); - } -#endif - - typedef R& (*M)(A1, A2, A3, A4, A5, A6); - M* method; - sq_getuserdata(vm, -1, (SQUserPointer*)&method, NULL); - - SQTRY() - Var a1(vm, startIdx); - Var a2(vm, startIdx + 1); - Var a3(vm, startIdx + 2); - Var a4(vm, startIdx + 3); - Var a5(vm, startIdx + 4); - Var a6(vm, startIdx + 5); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - R& ret = (*method)( - a1.value, - a2.value, - a3.value, - a4.value, - a5.value, - a6.value - ); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - PushVarR(vm, ret); - SQCATCH(vm) { - return sq_throwerror(vm, SQWHAT(vm)); - } - return 1; - } - - // Arg Count 7 - template - static SQInteger Func7(HSQUIRRELVM vm) { - -#if !defined (SCRAT_NO_ERROR_CHECKING) - if (!SQRAT_CONST_CONDITION(overloaded) && sq_gettop(vm) != startIdx + 7) { - return sq_throwerror(vm, _SC("wrong number of parameters")); - } -#endif - - typedef R& (*M)(A1, A2, A3, A4, A5, A6, A7); - M* method; - sq_getuserdata(vm, -1, (SQUserPointer*)&method, NULL); - - SQTRY() - Var a1(vm, startIdx); - Var a2(vm, startIdx + 1); - Var a3(vm, startIdx + 2); - Var a4(vm, startIdx + 3); - Var a5(vm, startIdx + 4); - Var a6(vm, startIdx + 5); - Var a7(vm, startIdx + 6); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - R& ret = (*method)( - a1.value, - a2.value, - a3.value, - a4.value, - a5.value, - a6.value, - a7.value - ); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - PushVarR(vm, ret); - SQCATCH(vm) { - return sq_throwerror(vm, SQWHAT(vm)); - } - return 1; - } - - // Arg Count 8 - template - static SQInteger Func8(HSQUIRRELVM vm) { - -#if !defined (SCRAT_NO_ERROR_CHECKING) - if (!SQRAT_CONST_CONDITION(overloaded) && sq_gettop(vm) != startIdx + 8) { - return sq_throwerror(vm, _SC("wrong number of parameters")); - } -#endif - - typedef R& (*M)(A1, A2, A3, A4, A5, A6, A7, A8); - M* method; - sq_getuserdata(vm, -1, (SQUserPointer*)&method, NULL); - - SQTRY() - Var a1(vm, startIdx); - Var a2(vm, startIdx + 1); - Var a3(vm, startIdx + 2); - Var a4(vm, startIdx + 3); - Var a5(vm, startIdx + 4); - Var a6(vm, startIdx + 5); - Var a7(vm, startIdx + 6); - Var a8(vm, startIdx + 7); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - R& ret = (*method)( - a1.value, - a2.value, - a3.value, - a4.value, - a5.value, - a6.value, - a7.value, - a8.value - ); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - PushVarR(vm, ret); - SQCATCH(vm) { - return sq_throwerror(vm, SQWHAT(vm)); - } - return 1; - } - - // Arg Count 9 - template - static SQInteger Func9(HSQUIRRELVM vm) { - -#if !defined (SCRAT_NO_ERROR_CHECKING) - if (!SQRAT_CONST_CONDITION(overloaded) && sq_gettop(vm) != startIdx + 9) { - return sq_throwerror(vm, _SC("wrong number of parameters")); - } -#endif - - typedef R& (*M)(A1, A2, A3, A4, A5, A6, A7, A8, A9); - M* method; - sq_getuserdata(vm, -1, (SQUserPointer*)&method, NULL); - - SQTRY() - Var a1(vm, startIdx); - Var a2(vm, startIdx + 1); - Var a3(vm, startIdx + 2); - Var a4(vm, startIdx + 3); - Var a5(vm, startIdx + 4); - Var a6(vm, startIdx + 5); - Var a7(vm, startIdx + 6); - Var a8(vm, startIdx + 7); - Var a9(vm, startIdx + 8); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - R& ret = (*method)( - a1.value, - a2.value, - a3.value, - a4.value, - a5.value, - a6.value, - a7.value, - a8.value, - a9.value - ); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - PushVarR(vm, ret); - SQCATCH(vm) { - return sq_throwerror(vm, SQWHAT(vm)); - } - return 1; - } - - // Arg Count 10 - template - static SQInteger Func10(HSQUIRRELVM vm) { - -#if !defined (SCRAT_NO_ERROR_CHECKING) - if (!SQRAT_CONST_CONDITION(overloaded) && sq_gettop(vm) != startIdx + 10) { - return sq_throwerror(vm, _SC("wrong number of parameters")); - } -#endif - - typedef R& (*M)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10); - M* method; - sq_getuserdata(vm, -1, (SQUserPointer*)&method, NULL); - - SQTRY() - Var a1(vm, startIdx); - Var a2(vm, startIdx + 1); - Var a3(vm, startIdx + 2); - Var a4(vm, startIdx + 3); - Var a5(vm, startIdx + 4); - Var a6(vm, startIdx + 5); - Var a7(vm, startIdx + 6); - Var a8(vm, startIdx + 7); - Var a9(vm, startIdx + 8); - Var a10(vm, startIdx + 9); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - R& ret = (*method)( - a1.value, - a2.value, - a3.value, - a4.value, - a5.value, - a6.value, - a7.value, - a8.value, - a9.value, - a10.value - ); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - PushVarR(vm, ret); - SQCATCH(vm) { - return sq_throwerror(vm, SQWHAT(vm)); - } - return 1; - } - - // Arg Count 11 - template - static SQInteger Func11(HSQUIRRELVM vm) { - -#if !defined (SCRAT_NO_ERROR_CHECKING) - if (!SQRAT_CONST_CONDITION(overloaded) && sq_gettop(vm) != startIdx + 11) { - return sq_throwerror(vm, _SC("wrong number of parameters")); - } -#endif - - typedef R& (*M)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11); - M* method; - sq_getuserdata(vm, -1, (SQUserPointer*)&method, NULL); - - SQTRY() - Var a1(vm, startIdx); - Var a2(vm, startIdx + 1); - Var a3(vm, startIdx + 2); - Var a4(vm, startIdx + 3); - Var a5(vm, startIdx + 4); - Var a6(vm, startIdx + 5); - Var a7(vm, startIdx + 6); - Var a8(vm, startIdx + 7); - Var a9(vm, startIdx + 8); - Var a10(vm, startIdx + 9); - Var a11(vm, startIdx + 10); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - R& ret = (*method)( - a1.value, - a2.value, - a3.value, - a4.value, - a5.value, - a6.value, - a7.value, - a8.value, - a9.value, - a10.value, - a11.value - ); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - PushVarR(vm, ret); - SQCATCH(vm) { - return sq_throwerror(vm, SQWHAT(vm)); - } - return 1; - } - - // Arg Count 12 - template - static SQInteger Func12(HSQUIRRELVM vm) { - -#if !defined (SCRAT_NO_ERROR_CHECKING) - if (!SQRAT_CONST_CONDITION(overloaded) && sq_gettop(vm) != startIdx + 12) { - return sq_throwerror(vm, _SC("wrong number of parameters")); - } -#endif - - typedef R& (*M)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12); - M* method; - sq_getuserdata(vm, -1, (SQUserPointer*)&method, NULL); - - SQTRY() - Var a1(vm, startIdx); - Var a2(vm, startIdx + 1); - Var a3(vm, startIdx + 2); - Var a4(vm, startIdx + 3); - Var a5(vm, startIdx + 4); - Var a6(vm, startIdx + 5); - Var a7(vm, startIdx + 6); - Var a8(vm, startIdx + 7); - Var a9(vm, startIdx + 8); - Var a10(vm, startIdx + 9); - Var a11(vm, startIdx + 10); - Var a12(vm, startIdx + 11); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - R& ret = (*method)( - a1.value, - a2.value, - a3.value, - a4.value, - a5.value, - a6.value, - a7.value, - a8.value, - a9.value, - a10.value, - a11.value, - a12.value - ); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - PushVarR(vm, ret); - SQCATCH(vm) { - return sq_throwerror(vm, SQWHAT(vm)); - } - return 1; - } - - // Arg Count 13 - template - static SQInteger Func13(HSQUIRRELVM vm) { - -#if !defined (SCRAT_NO_ERROR_CHECKING) - if (!SQRAT_CONST_CONDITION(overloaded) && sq_gettop(vm) != startIdx + 13) { - return sq_throwerror(vm, _SC("wrong number of parameters")); - } -#endif - - typedef R& (*M)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13); - M* method; - sq_getuserdata(vm, -1, (SQUserPointer*)&method, NULL); - - SQTRY() - Var a1(vm, startIdx); - Var a2(vm, startIdx + 1); - Var a3(vm, startIdx + 2); - Var a4(vm, startIdx + 3); - Var a5(vm, startIdx + 4); - Var a6(vm, startIdx + 5); - Var a7(vm, startIdx + 6); - Var a8(vm, startIdx + 7); - Var a9(vm, startIdx + 8); - Var a10(vm, startIdx + 9); - Var a11(vm, startIdx + 10); - Var a12(vm, startIdx + 11); - Var a13(vm, startIdx + 12); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - R& ret = (*method)( - a1.value, - a2.value, - a3.value, - a4.value, - a5.value, - a6.value, - a7.value, - a8.value, - a9.value, - a10.value, - a11.value, - a12.value, - a13.value - ); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - PushVarR(vm, ret); - SQCATCH(vm) { - return sq_throwerror(vm, SQWHAT(vm)); - } - return 1; - } - - // Arg Count 14 - template - static SQInteger Func14(HSQUIRRELVM vm) { - -#if !defined (SCRAT_NO_ERROR_CHECKING) - if (!SQRAT_CONST_CONDITION(overloaded) && sq_gettop(vm) != startIdx + 14) { - return sq_throwerror(vm, _SC("wrong number of parameters")); - } -#endif - - typedef R& (*M)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14); - M* method; - sq_getuserdata(vm, -1, (SQUserPointer*)&method, NULL); - - SQTRY() - Var a1(vm, startIdx); - Var a2(vm, startIdx + 1); - Var a3(vm, startIdx + 2); - Var a4(vm, startIdx + 3); - Var a5(vm, startIdx + 4); - Var a6(vm, startIdx + 5); - Var a7(vm, startIdx + 6); - Var a8(vm, startIdx + 7); - Var a9(vm, startIdx + 8); - Var a10(vm, startIdx + 9); - Var a11(vm, startIdx + 10); - Var a12(vm, startIdx + 11); - Var a13(vm, startIdx + 12); - Var a14(vm, startIdx + 13); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - R& ret = (*method)( - a1.value, - a2.value, - a3.value, - a4.value, - a5.value, - a6.value, - a7.value, - a8.value, - a9.value, - a10.value, - a11.value, - a12.value, - a13.value, - a14.value - ); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - PushVarR(vm, ret); - SQCATCH(vm) { - return sq_throwerror(vm, SQWHAT(vm)); - } - return 1; + return 1; + }; } }; - // // void return specialization // -template <> -class SqGlobal { -public: - - // Arg Count 0 - template - static SQInteger Func0(HSQUIRRELVM vm) { - +template <> struct SqGlobal { + // Function proxy + template static SQFUNCTION GetProxy() noexcept { + typedef void(*M)(A...); + return +[](HSQUIRRELVM vm) noexcept -> SQInteger { #if !defined (SCRAT_NO_ERROR_CHECKING) - if (!SQRAT_CONST_CONDITION(overloaded) && sq_gettop(vm) != 2) { - return sq_throwerror(vm, _SC("wrong number of parameters")); - } + if (!SQRAT_CONST_CONDITION(overloaded) && sq_gettop(vm) != startIdx + 2) { + return sq_throwerror(vm, _SC("wrong number of parameters")); + } #endif + M* method; + sq_getuserdata(vm, -1, reinterpret_cast(&method), NULL); - typedef void (*M)(); - M* method; - sq_getuserdata(vm, -1, (SQUserPointer*)&method, NULL); + SQTRY() + ArgPop a(vm, startIdx); + SQCATCH_NOEXCEPT(vm) { + return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); + } + a.template Exec(*method); + SQCATCH_NOEXCEPT(vm) { + return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); + } + SQCATCH(vm) { + return sq_throwerror(vm, SQWHAT(vm)); + } - SQTRY() - (*method)(); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - SQCATCH(vm) { - return sq_throwerror(vm, SQWHAT(vm)); - } - return 0; - } - - // Arg Count 1 - template - static SQInteger Func1(HSQUIRRELVM vm) { - -#if !defined (SCRAT_NO_ERROR_CHECKING) - if (!SQRAT_CONST_CONDITION(overloaded) && sq_gettop(vm) != startIdx + 1) { - return sq_throwerror(vm, _SC("wrong number of parameters")); - } -#endif - - typedef void (*M)(A1); - M* method; - sq_getuserdata(vm, -1, (SQUserPointer*)&method, NULL); - - SQTRY() - Var a1(vm, startIdx); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - (*method)( - a1.value - ); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - SQCATCH(vm) { - return sq_throwerror(vm, SQWHAT(vm)); - } - return 0; - } - - // Arg Count 2 - template - static SQInteger Func2(HSQUIRRELVM vm) { - -#if !defined (SCRAT_NO_ERROR_CHECKING) - if (!SQRAT_CONST_CONDITION(overloaded) && sq_gettop(vm) != startIdx + 2) { - return sq_throwerror(vm, _SC("wrong number of parameters")); - } -#endif - - typedef void (*M)(A1, A2); - M* method; - sq_getuserdata(vm, -1, (SQUserPointer*)&method, NULL); - - SQTRY() - Var a1(vm, startIdx); - Var a2(vm, startIdx + 1); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - (*method)( - a1.value, - a2.value - ); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - SQCATCH(vm) { - return sq_throwerror(vm, SQWHAT(vm)); - } - return 0; - } - - // Arg Count 3 - template - static SQInteger Func3(HSQUIRRELVM vm) { - -#if !defined (SCRAT_NO_ERROR_CHECKING) - if (!SQRAT_CONST_CONDITION(overloaded) && sq_gettop(vm) != startIdx + 3) { - return sq_throwerror(vm, _SC("wrong number of parameters")); - } -#endif - - typedef void (*M)(A1, A2, A3); - M* method; - sq_getuserdata(vm, -1, (SQUserPointer*)&method, NULL); - - SQTRY() - Var a1(vm, startIdx); - Var a2(vm, startIdx + 1); - Var a3(vm, startIdx + 2); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - (*method)( - a1.value, - a2.value, - a3.value - ); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - SQCATCH(vm) { - return sq_throwerror(vm, SQWHAT(vm)); - } - return 0; - } - - // Arg Count 4 - template - static SQInteger Func4(HSQUIRRELVM vm) { - -#if !defined (SCRAT_NO_ERROR_CHECKING) - if (!SQRAT_CONST_CONDITION(overloaded) && sq_gettop(vm) != startIdx + 4) { - return sq_throwerror(vm, _SC("wrong number of parameters")); - } -#endif - - typedef void (*M)(A1, A2, A3, A4); - M* method; - sq_getuserdata(vm, -1, (SQUserPointer*)&method, NULL); - - SQTRY() - Var a1(vm, startIdx); - Var a2(vm, startIdx + 1); - Var a3(vm, startIdx + 2); - Var a4(vm, startIdx + 3); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - (*method)( - a1.value, - a2.value, - a3.value, - a4.value - ); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - SQCATCH(vm) { - return sq_throwerror(vm, SQWHAT(vm)); - } - return 0; - } - - // Arg Count 5 - template - static SQInteger Func5(HSQUIRRELVM vm) { - -#if !defined (SCRAT_NO_ERROR_CHECKING) - if (!SQRAT_CONST_CONDITION(overloaded) && sq_gettop(vm) != startIdx + 5) { - return sq_throwerror(vm, _SC("wrong number of parameters")); - } -#endif - - typedef void (*M)(A1, A2, A3, A4, A5); - M* method; - sq_getuserdata(vm, -1, (SQUserPointer*)&method, NULL); - - SQTRY() - Var a1(vm, startIdx); - Var a2(vm, startIdx + 1); - Var a3(vm, startIdx + 2); - Var a4(vm, startIdx + 3); - Var a5(vm, startIdx + 4); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - (*method)( - a1.value, - a2.value, - a3.value, - a4.value, - a5.value - ); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - SQCATCH(vm) { - return sq_throwerror(vm, SQWHAT(vm)); - } - return 0; - } - - // Arg Count 6 - template - static SQInteger Func6(HSQUIRRELVM vm) { - -#if !defined (SCRAT_NO_ERROR_CHECKING) - if (!SQRAT_CONST_CONDITION(overloaded) && sq_gettop(vm) != startIdx + 6) { - return sq_throwerror(vm, _SC("wrong number of parameters")); - } -#endif - - typedef void (*M)(A1, A2, A3, A4, A5, A6); - M* method; - sq_getuserdata(vm, -1, (SQUserPointer*)&method, NULL); - - SQTRY() - Var a1(vm, startIdx); - Var a2(vm, startIdx + 1); - Var a3(vm, startIdx + 2); - Var a4(vm, startIdx + 3); - Var a5(vm, startIdx + 4); - Var a6(vm, startIdx + 5); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - (*method)( - a1.value, - a2.value, - a3.value, - a4.value, - a5.value, - a6.value - ); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - SQCATCH(vm) { - return sq_throwerror(vm, SQWHAT(vm)); - } - return 0; - } - - // Arg Count 7 - template - static SQInteger Func7(HSQUIRRELVM vm) { - -#if !defined (SCRAT_NO_ERROR_CHECKING) - if (!SQRAT_CONST_CONDITION(overloaded) && sq_gettop(vm) != startIdx + 7) { - return sq_throwerror(vm, _SC("wrong number of parameters")); - } -#endif - - typedef void (*M)(A1, A2, A3, A4, A5, A6, A7); - M* method; - sq_getuserdata(vm, -1, (SQUserPointer*)&method, NULL); - - SQTRY() - Var a1(vm, startIdx); - Var a2(vm, startIdx + 1); - Var a3(vm, startIdx + 2); - Var a4(vm, startIdx + 3); - Var a5(vm, startIdx + 4); - Var a6(vm, startIdx + 5); - Var a7(vm, startIdx + 6); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - (*method)( - a1.value, - a2.value, - a3.value, - a4.value, - a5.value, - a6.value, - a7.value - ); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - SQCATCH(vm) { - return sq_throwerror(vm, SQWHAT(vm)); - } - return 0; - } - - // Arg Count 8 - template - static SQInteger Func8(HSQUIRRELVM vm) { - -#if !defined (SCRAT_NO_ERROR_CHECKING) - if (!SQRAT_CONST_CONDITION(overloaded) && sq_gettop(vm) != startIdx + 8) { - return sq_throwerror(vm, _SC("wrong number of parameters")); - } -#endif - - typedef void (*M)(A1, A2, A3, A4, A5, A6, A7, A8); - M* method; - sq_getuserdata(vm, -1, (SQUserPointer*)&method, NULL); - - SQTRY() - Var a1(vm, startIdx); - Var a2(vm, startIdx + 1); - Var a3(vm, startIdx + 2); - Var a4(vm, startIdx + 3); - Var a5(vm, startIdx + 4); - Var a6(vm, startIdx + 5); - Var a7(vm, startIdx + 6); - Var a8(vm, startIdx + 7); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - (*method)( - a1.value, - a2.value, - a3.value, - a4.value, - a5.value, - a6.value, - a7.value, - a8.value - ); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - SQCATCH(vm) { - return sq_throwerror(vm, SQWHAT(vm)); - } - return 0; - } - - // Arg Count 9 - template - static SQInteger Func9(HSQUIRRELVM vm) { - -#if !defined (SCRAT_NO_ERROR_CHECKING) - if (!SQRAT_CONST_CONDITION(overloaded) && sq_gettop(vm) != startIdx + 9) { - return sq_throwerror(vm, _SC("wrong number of parameters")); - } -#endif - - typedef void (*M)(A1, A2, A3, A4, A5, A6, A7, A8, A9); - M* method; - sq_getuserdata(vm, -1, (SQUserPointer*)&method, NULL); - - SQTRY() - Var a1(vm, startIdx); - Var a2(vm, startIdx + 1); - Var a3(vm, startIdx + 2); - Var a4(vm, startIdx + 3); - Var a5(vm, startIdx + 4); - Var a6(vm, startIdx + 5); - Var a7(vm, startIdx + 6); - Var a8(vm, startIdx + 7); - Var a9(vm, startIdx + 8); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - (*method)( - a1.value, - a2.value, - a3.value, - a4.value, - a5.value, - a6.value, - a7.value, - a8.value, - a9.value - ); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - SQCATCH(vm) { - return sq_throwerror(vm, SQWHAT(vm)); - } - return 0; - } - - // Arg Count 10 - template - static SQInteger Func10(HSQUIRRELVM vm) { - -#if !defined (SCRAT_NO_ERROR_CHECKING) - if (!SQRAT_CONST_CONDITION(overloaded) && sq_gettop(vm) != startIdx + 10) { - return sq_throwerror(vm, _SC("wrong number of parameters")); - } -#endif - - typedef void (*M)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10); - M* method; - sq_getuserdata(vm, -1, (SQUserPointer*)&method, NULL); - - SQTRY() - Var a1(vm, startIdx); - Var a2(vm, startIdx + 1); - Var a3(vm, startIdx + 2); - Var a4(vm, startIdx + 3); - Var a5(vm, startIdx + 4); - Var a6(vm, startIdx + 5); - Var a7(vm, startIdx + 6); - Var a8(vm, startIdx + 7); - Var a9(vm, startIdx + 8); - Var a10(vm, startIdx + 9); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - (*method)( - a1.value, - a2.value, - a3.value, - a4.value, - a5.value, - a6.value, - a7.value, - a8.value, - a9.value, - a10.value - ); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - SQCATCH(vm) { - return sq_throwerror(vm, SQWHAT(vm)); - } - return 0; - } - - // Arg Count 11 - template - static SQInteger Func11(HSQUIRRELVM vm) { - -#if !defined (SCRAT_NO_ERROR_CHECKING) - if (!SQRAT_CONST_CONDITION(overloaded) && sq_gettop(vm) != startIdx + 11) { - return sq_throwerror(vm, _SC("wrong number of parameters")); - } -#endif - - typedef void (*M)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11); - M* method; - sq_getuserdata(vm, -1, (SQUserPointer*)&method, NULL); - - SQTRY() - Var a1(vm, startIdx); - Var a2(vm, startIdx + 1); - Var a3(vm, startIdx + 2); - Var a4(vm, startIdx + 3); - Var a5(vm, startIdx + 4); - Var a6(vm, startIdx + 5); - Var a7(vm, startIdx + 6); - Var a8(vm, startIdx + 7); - Var a9(vm, startIdx + 8); - Var a10(vm, startIdx + 9); - Var a11(vm, startIdx + 10); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - (*method)( - a1.value, - a2.value, - a3.value, - a4.value, - a5.value, - a6.value, - a7.value, - a8.value, - a9.value, - a10.value, - a11.value - ); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - SQCATCH(vm) { - return sq_throwerror(vm, SQWHAT(vm)); - } - return 0; - } - - // Arg Count 12 - template - static SQInteger Func12(HSQUIRRELVM vm) { - -#if !defined (SCRAT_NO_ERROR_CHECKING) - if (!SQRAT_CONST_CONDITION(overloaded) && sq_gettop(vm) != startIdx + 12) { - return sq_throwerror(vm, _SC("wrong number of parameters")); - } -#endif - - typedef void (*M)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12); - M* method; - sq_getuserdata(vm, -1, (SQUserPointer*)&method, NULL); - - SQTRY() - Var a1(vm, startIdx); - Var a2(vm, startIdx + 1); - Var a3(vm, startIdx + 2); - Var a4(vm, startIdx + 3); - Var a5(vm, startIdx + 4); - Var a6(vm, startIdx + 5); - Var a7(vm, startIdx + 6); - Var a8(vm, startIdx + 7); - Var a9(vm, startIdx + 8); - Var a10(vm, startIdx + 9); - Var a11(vm, startIdx + 10); - Var a12(vm, startIdx + 11); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - (*method)( - a1.value, - a2.value, - a3.value, - a4.value, - a5.value, - a6.value, - a7.value, - a8.value, - a9.value, - a10.value, - a11.value, - a12.value - ); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - SQCATCH(vm) { - return sq_throwerror(vm, SQWHAT(vm)); - } - return 0; - } - - // Arg Count 13 - template - static SQInteger Func13(HSQUIRRELVM vm) { - -#if !defined (SCRAT_NO_ERROR_CHECKING) - if (!SQRAT_CONST_CONDITION(overloaded) && sq_gettop(vm) != startIdx + 13) { - return sq_throwerror(vm, _SC("wrong number of parameters")); - } -#endif - - typedef void (*M)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13); - M* method; - sq_getuserdata(vm, -1, (SQUserPointer*)&method, NULL); - - SQTRY() - Var a1(vm, startIdx); - Var a2(vm, startIdx + 1); - Var a3(vm, startIdx + 2); - Var a4(vm, startIdx + 3); - Var a5(vm, startIdx + 4); - Var a6(vm, startIdx + 5); - Var a7(vm, startIdx + 6); - Var a8(vm, startIdx + 7); - Var a9(vm, startIdx + 8); - Var a10(vm, startIdx + 9); - Var a11(vm, startIdx + 10); - Var a12(vm, startIdx + 11); - Var a13(vm, startIdx + 12); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - (*method)( - a1.value, - a2.value, - a3.value, - a4.value, - a5.value, - a6.value, - a7.value, - a8.value, - a9.value, - a10.value, - a11.value, - a12.value, - a13.value - ); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - SQCATCH(vm) { - return sq_throwerror(vm, SQWHAT(vm)); - } - return 0; - } - - // Arg Count 14 - template - static SQInteger Func14(HSQUIRRELVM vm) { - -#if !defined (SCRAT_NO_ERROR_CHECKING) - if (!SQRAT_CONST_CONDITION(overloaded) && sq_gettop(vm) != startIdx + 14) { - return sq_throwerror(vm, _SC("wrong number of parameters")); - } -#endif - - typedef void (*M)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14); - M* method; - sq_getuserdata(vm, -1, (SQUserPointer*)&method, NULL); - - SQTRY() - Var a1(vm, startIdx); - Var a2(vm, startIdx + 1); - Var a3(vm, startIdx + 2); - Var a4(vm, startIdx + 3); - Var a5(vm, startIdx + 4); - Var a6(vm, startIdx + 5); - Var a7(vm, startIdx + 6); - Var a8(vm, startIdx + 7); - Var a9(vm, startIdx + 8); - Var a10(vm, startIdx + 9); - Var a11(vm, startIdx + 10); - Var a12(vm, startIdx + 11); - Var a13(vm, startIdx + 12); - Var a14(vm, startIdx + 13); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - (*method)( - a1.value, - a2.value, - a3.value, - a4.value, - a5.value, - a6.value, - a7.value, - a8.value, - a9.value, - a10.value, - a11.value, - a12.value, - a13.value, - a14.value - ); - SQCATCH_NOEXCEPT(vm) { - return sq_throwerror(vm, SQWHAT_NOEXCEPT(vm)); - } - SQCATCH(vm) { - return sq_throwerror(vm, SQWHAT(vm)); - } - return 0; + return 0; + }; } }; - -// -// Global Function Resolvers -// - -// Arg Count 0 -template -SQFUNCTION SqGlobalFunc(R (* /*method*/)()) { - return &SqGlobal::template Func0; +// Global Function Resolver +template SQFUNCTION SqGlobalFunc(R (* /*method*/)(A...)) noexcept { + return SqGlobal::template GetProxy<2, false, A...>(); } -// Arg Count 0 -template -SQFUNCTION SqGlobalFunc(R& (* /*method*/)()) { - return &SqGlobal::template Func0; +// Global Function Resolver +template SQFUNCTION SqGlobalFunc(R& (* /*method*/)(A...)) noexcept { + return SqGlobal::template GetProxy<2, false, A...>(); } -// Arg Count 1 -template -SQFUNCTION SqGlobalFunc(R (* /*method*/)(A1)) { - return &SqGlobal::template Func1; +// Member Global Function Resolver +template SQFUNCTION SqMemberGlobalFunc(R (* /*method*/)(T, A...)) noexcept { + return SqGlobal::template GetProxy<1, false, T, A...>(); } -// Arg Count 1 -template -SQFUNCTION SqGlobalFunc(R& (* /*method*/)(A1)) { - return &SqGlobal::template Func1; -} - -// Arg Count 2 -template -SQFUNCTION SqGlobalFunc(R (* /*method*/)(A1, A2)) { - return &SqGlobal::template Func2; -} - -// Arg Count 2 -template -SQFUNCTION SqGlobalFunc(R& (* /*method*/)(A1, A2)) { - return &SqGlobal::template Func2; -} - -// Arg Count 3 -template -SQFUNCTION SqGlobalFunc(R (* /*method*/)(A1, A2, A3)) { - return &SqGlobal::template Func3; -} - -// Arg Count 3 -template -SQFUNCTION SqGlobalFunc(R& (* /*method*/)(A1, A2, A3)) { - return &SqGlobal::template Func3; -} - -// Arg Count 4 -template -SQFUNCTION SqGlobalFunc(R (* /*method*/)(A1, A2, A3, A4)) { - return &SqGlobal::template Func4; -} - -// Arg Count 4 -template -SQFUNCTION SqGlobalFunc(R& (* /*method*/)(A1, A2, A3, A4)) { - return &SqGlobal::template Func4; -} - -// Arg Count 5 -template -SQFUNCTION SqGlobalFunc(R (* /*method*/)(A1, A2, A3, A4, A5)) { - return &SqGlobal::template Func5; -} - -// Arg Count 5 -template -SQFUNCTION SqGlobalFunc(R& (* /*method*/)(A1, A2, A3, A4, A5)) { - return &SqGlobal::template Func5; -} - -// Arg Count 6 -template -SQFUNCTION SqGlobalFunc(R (* /*method*/)(A1, A2, A3, A4, A5, A6)) { - return &SqGlobal::template Func6; -} - -// Arg Count 6 -template -SQFUNCTION SqGlobalFunc(R& (* /*method*/)(A1, A2, A3, A4, A5, A6)) { - return &SqGlobal::template Func6; -} - -// Arg Count 7 -template -SQFUNCTION SqGlobalFunc(R (* /*method*/)(A1, A2, A3, A4, A5, A6, A7)) { - return &SqGlobal::template Func7; -} - -// Arg Count 7 -template -SQFUNCTION SqGlobalFunc(R& (* /*method*/)(A1, A2, A3, A4, A5, A6, A7)) { - return &SqGlobal::template Func7; -} - -// Arg Count 8 -template -SQFUNCTION SqGlobalFunc(R (* /*method*/)(A1, A2, A3, A4, A5, A6, A7, A8)) { - return &SqGlobal::template Func8; -} - -// Arg Count 8 -template -SQFUNCTION SqGlobalFunc(R& (* /*method*/)(A1, A2, A3, A4, A5, A6, A7, A8)) { - return &SqGlobal::template Func8; -} - -// Arg Count 9 -template -SQFUNCTION SqGlobalFunc(R (* /*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9)) { - return &SqGlobal::template Func9; -} - -// Arg Count 9 -template -SQFUNCTION SqGlobalFunc(R& (* /*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9)) { - return &SqGlobal::template Func9; -} - -// Arg Count 10 -template -SQFUNCTION SqGlobalFunc(R (* /*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10)) { - return &SqGlobal::template Func10; -} - -// Arg Count 10 -template -SQFUNCTION SqGlobalFunc(R& (* /*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10)) { - return &SqGlobal::template Func10; -} - -// Arg Count 11 -template -SQFUNCTION SqGlobalFunc(R (* /*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11)) { - return &SqGlobal::template Func11; -} - -// Arg Count 11 -template -SQFUNCTION SqGlobalFunc(R& (* /*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11)) { - return &SqGlobal::template Func11; -} - -// Arg Count 12 -template -SQFUNCTION SqGlobalFunc(R (* /*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12)) { - return &SqGlobal::template Func12; -} - -// Arg Count 12 -template -SQFUNCTION SqGlobalFunc(R& (* /*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12)) { - return &SqGlobal::template Func12; -} - -// Arg Count 13 -template -SQFUNCTION SqGlobalFunc(R (* /*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13)) { - return &SqGlobal::template Func13; -} - -// Arg Count 13 -template -SQFUNCTION SqGlobalFunc(R& (* /*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13)) { - return &SqGlobal::template Func13; -} - -// Arg Count 14 -template -SQFUNCTION SqGlobalFunc(R (* /*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14)) { - return &SqGlobal::template Func14; -} - -// Arg Count 14 -template -SQFUNCTION SqGlobalFunc(R& (* /*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14)) { - return &SqGlobal::template Func14; -} - - -// -// Member Global Function Resolvers -// - -// Arg Count 1 -template -SQFUNCTION SqMemberGlobalFunc(R (* /*method*/)(A1)) { - return &SqGlobal::template Func1; -} - -// Arg Count 1 -template -SQFUNCTION SqMemberGlobalFunc(R& (* /*method*/)(A1)) { - return &SqGlobal::template Func1; -} - -// Arg Count 2 -template -SQFUNCTION SqMemberGlobalFunc(R (* /*method*/)(A1, A2)) { - return &SqGlobal::template Func2; -} - -// Arg Count 2 -template -SQFUNCTION SqMemberGlobalFunc(R& (* /*method*/)(A1, A2)) { - return &SqGlobal::template Func2; -} - -// Arg Count 3 -template -SQFUNCTION SqMemberGlobalFunc(R (* /*method*/)(A1, A2, A3)) { - return &SqGlobal::template Func3; -} - -// Arg Count 3 -template -SQFUNCTION SqMemberGlobalFunc(R& (* /*method*/)(A1, A2, A3)) { - return &SqGlobal::template Func3; -} - -// Arg Count 4 -template -SQFUNCTION SqMemberGlobalFunc(R (* /*method*/)(A1, A2, A3, A4)) { - return &SqGlobal::template Func4; -} - -// Arg Count 4 -template -SQFUNCTION SqMemberGlobalFunc(R& (* /*method*/)(A1, A2, A3, A4)) { - return &SqGlobal::template Func4; -} - -// Arg Count 5 -template -SQFUNCTION SqMemberGlobalFunc(R (* /*method*/)(A1, A2, A3, A4, A5)) { - return &SqGlobal::template Func5; -} - -// Arg Count 5 -template -SQFUNCTION SqMemberGlobalFunc(R& (* /*method*/)(A1, A2, A3, A4, A5)) { - return &SqGlobal::template Func5; -} - -// Arg Count 6 -template -SQFUNCTION SqMemberGlobalFunc(R (* /*method*/)(A1, A2, A3, A4, A5, A6)) { - return &SqGlobal::template Func6; -} - -// Arg Count 6 -template -SQFUNCTION SqMemberGlobalFunc(R& (* /*method*/)(A1, A2, A3, A4, A5, A6)) { - return &SqGlobal::template Func6; -} - -// Arg Count 7 -template -SQFUNCTION SqMemberGlobalFunc(R (* /*method*/)(A1, A2, A3, A4, A5, A6, A7)) { - return &SqGlobal::template Func7; -} - -// Arg Count 7 -template -SQFUNCTION SqMemberGlobalFunc(R& (* /*method*/)(A1, A2, A3, A4, A5, A6, A7)) { - return &SqGlobal::template Func7; -} - -// Arg Count 8 -template -SQFUNCTION SqMemberGlobalFunc(R (* /*method*/)(A1, A2, A3, A4, A5, A6, A7, A8)) { - return &SqGlobal::template Func8; -} - -// Arg Count 8 -template -SQFUNCTION SqMemberGlobalFunc(R& (* /*method*/)(A1, A2, A3, A4, A5, A6, A7, A8)) { - return &SqGlobal::template Func8; -} - -// Arg Count 9 -template -SQFUNCTION SqMemberGlobalFunc(R (* /*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9)) { - return &SqGlobal::template Func9; -} - -// Arg Count 9 -template -SQFUNCTION SqMemberGlobalFunc(R& (* /*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9)) { - return &SqGlobal::template Func9; -} - -// Arg Count 10 -template -SQFUNCTION SqMemberGlobalFunc(R (* /*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10)) { - return &SqGlobal::template Func10; -} - -// Arg Count 10 -template -SQFUNCTION SqMemberGlobalFunc(R& (* /*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10)) { - return &SqGlobal::template Func10; -} - -// Arg Count 11 -template -SQFUNCTION SqMemberGlobalFunc(R (* /*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11)) { - return &SqGlobal::template Func11; -} - -// Arg Count 11 -template -SQFUNCTION SqMemberGlobalFunc(R& (* /*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11)) { - return &SqGlobal::template Func11; -} - -// Arg Count 12 -template -SQFUNCTION SqMemberGlobalFunc(R (* /*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12)) { - return &SqGlobal::template Func12; -} - -// Arg Count 12 -template -SQFUNCTION SqMemberGlobalFunc(R& (* /*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12)) { - return &SqGlobal::template Func12; -} - -// Arg Count 13 -template -SQFUNCTION SqMemberGlobalFunc(R (* /*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13)) { - return &SqGlobal::template Func13; -} - -// Arg Count 13 -template -SQFUNCTION SqMemberGlobalFunc(R& (* /*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13)) { - return &SqGlobal::template Func13; -} - -// Arg Count 14 -template -SQFUNCTION SqMemberGlobalFunc(R (* /*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14)) { - return &SqGlobal::template Func14; -} - -// Arg Count 14 -template -SQFUNCTION SqMemberGlobalFunc(R& (* /*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14)) { - return &SqGlobal::template Func14; +// Member Global Function Resolver +template SQFUNCTION SqMemberGlobalFunc(R& (* /*method*/)(T, A...)) noexcept { + return SqGlobal::template GetProxy<1, false, T, A...>(); } // diff --git a/include/sqrat/sqratOverloadMethods.h b/include/sqrat/sqratOverloadMethods.h index af770863..182facb7 100644 --- a/include/sqrat/sqratOverloadMethods.h +++ b/include/sqrat/sqratOverloadMethods.h @@ -151,335 +151,26 @@ public: } }; - -// -// Global Overloaded Function Resolvers -// - -// Arg Count 0 -template -SQFUNCTION SqGlobalOverloadedFunc(R (* /*method*/)()) { - return &SqGlobal::template Func0; +// Global Overloaded Function Resolver +template SQFUNCTION SqGlobalOverloadedFunc(R (* /*method*/)(A...)) noexcept { + return SqGlobal::template GetProxy<2, true, A...>(); } -template -SQFUNCTION SqGlobalOverloadedFunc(R& (* /*method*/)()) { - return &SqGlobal::template Func0; +// Global Overloaded Function Resolver +template SQFUNCTION SqGlobalOverloadedFunc(R& (* /*method*/)(A...)) noexcept { + return SqGlobal::template GetProxy<2, true, A...>(); } -// Arg Count 1 -template -SQFUNCTION SqGlobalOverloadedFunc(R (* /*method*/)(A1)) { - return &SqGlobal::template Func1; +// Member Global Overloaded Function Resolver +template SQFUNCTION SqMemberGlobalOverloadedFunc(R (* /*method*/)(T, A...)) noexcept { + return SqGlobal::template GetProxy<1, true, T, A...>(); } -template -SQFUNCTION SqGlobalOverloadedFunc(R& (* /*method*/)(A1)) { - return &SqGlobal::template Func1; +// Member Global Overloaded Function Resolver +template SQFUNCTION SqMemberGlobalOverloadedFunc(R& (* /*method*/)(T, A...)) noexcept { + return SqGlobal::template GetProxy<1, true, T, A...>(); } -// Arg Count 2 -template -SQFUNCTION SqGlobalOverloadedFunc(R (* /*method*/)(A1, A2)) { - return &SqGlobal::template Func2; -} - -template -SQFUNCTION SqGlobalOverloadedFunc(R& (* /*method*/)(A1, A2)) { - return &SqGlobal::template Func2; -} - -// Arg Count 3 -template -SQFUNCTION SqGlobalOverloadedFunc(R (* /*method*/)(A1, A2, A3)) { - return &SqGlobal::template Func3; -} - -template -SQFUNCTION SqGlobalOverloadedFunc(R& (* /*method*/)(A1, A2, A3)) { - return &SqGlobal::template Func3; -} - -// Arg Count 4 -template -SQFUNCTION SqGlobalOverloadedFunc(R (* /*method*/)(A1, A2, A3, A4)) { - return &SqGlobal::template Func4; -} - -template -SQFUNCTION SqGlobalOverloadedFunc(R& (* /*method*/)(A1, A2, A3, A4)) { - return &SqGlobal::template Func4; -} - -// Arg Count 5 -template -SQFUNCTION SqGlobalOverloadedFunc(R (* /*method*/)(A1, A2, A3, A4, A5)) { - return &SqGlobal::template Func5; -} - -template -SQFUNCTION SqGlobalOverloadedFunc(R& (* /*method*/)(A1, A2, A3, A4, A5)) { - return &SqGlobal::template Func5; -} - -// Arg Count 6 -template -SQFUNCTION SqGlobalOverloadedFunc(R (* /*method*/)(A1, A2, A3, A4, A5, A6)) { - return &SqGlobal::template Func6; -} - -template -SQFUNCTION SqGlobalOverloadedFunc(R& (* /*method*/)(A1, A2, A3, A4, A5, A6)) { - return &SqGlobal::template Func6; -} - -// Arg Count 7 -template -SQFUNCTION SqGlobalOverloadedFunc(R (* /*method*/)(A1, A2, A3, A4, A5, A6, A7)) { - return &SqGlobal::template Func7; -} - -template -SQFUNCTION SqGlobalOverloadedFunc(R& (* /*method*/)(A1, A2, A3, A4, A5, A6, A7)) { - return &SqGlobal::template Func7; -} - -// Arg Count 8 -template -SQFUNCTION SqGlobalOverloadedFunc(R (* /*method*/)(A1, A2, A3, A4, A5, A6, A7, A8)) { - return &SqGlobal::template Func8; -} - -template -SQFUNCTION SqGlobalOverloadedFunc(R& (* /*method*/)(A1, A2, A3, A4, A5, A6, A7, A8)) { - return &SqGlobal::template Func8; -} - -// Arg Count 9 -template -SQFUNCTION SqGlobalOverloadedFunc(R (* /*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9)) { - return &SqGlobal::template Func9; -} - -template -SQFUNCTION SqGlobalOverloadedFunc(R& (* /*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9)) { - return &SqGlobal::template Func9; -} - -// Arg Count 10 -template -SQFUNCTION SqGlobalOverloadedFunc(R (* /*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10)) { - return &SqGlobal::template Func10; -} - -template -SQFUNCTION SqGlobalOverloadedFunc(R& (* /*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10)) { - return &SqGlobal::template Func10; -} - -// Arg Count 11 -template -SQFUNCTION SqGlobalOverloadedFunc(R (* /*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11)) { - return &SqGlobal::template Func11; -} - -template -SQFUNCTION SqGlobalOverloadedFunc(R& (* /*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11)) { - return &SqGlobal::template Func11; -} - -// Arg Count 12 -template -SQFUNCTION SqGlobalOverloadedFunc(R (* /*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12)) { - return &SqGlobal::template Func12; -} - -template -SQFUNCTION SqGlobalOverloadedFunc(R& (* /*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12)) { - return &SqGlobal::template Func12; -} - -// Arg Count 13 -template -SQFUNCTION SqGlobalOverloadedFunc(R (* /*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13)) { - return &SqGlobal::template Func13; -} - -template -SQFUNCTION SqGlobalOverloadedFunc(R& (* /*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13)) { - return &SqGlobal::template Func13; -} - -// Arg Count 14 -template -SQFUNCTION SqGlobalOverloadedFunc(R (* /*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14)) { - return &SqGlobal::template Func14; -} -template -SQFUNCTION SqGlobalOverloadedFunc(R& (* /*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14)) { - return &SqGlobal::template Func14; -} - - -// -// Member Global Overloaded Function Resolvers -// - -// Arg Count 1 -template -SQFUNCTION SqMemberGlobalOverloadedFunc(R (* /*method*/)(A1)) { - return &SqGlobal::template Func1; -} - -template -SQFUNCTION SqMemberGlobalOverloadedFunc(R& (* /*method*/)(A1)) { - return &SqGlobal::template Func1; -} - -// Arg Count 2 -template -SQFUNCTION SqMemberGlobalOverloadedFunc(R (* /*method*/)(A1, A2)) { - return &SqGlobal::template Func2; -} - -template -SQFUNCTION SqMemberGlobalOverloadedFunc(R& (* /*method*/)(A1, A2)) { - return &SqGlobal::template Func2; -} - -// Arg Count 3 -template -SQFUNCTION SqMemberGlobalOverloadedFunc(R (* /*method*/)(A1, A2, A3)) { - return &SqGlobal::template Func3; -} - -template -SQFUNCTION SqMemberGlobalOverloadedFunc(R& (* /*method*/)(A1, A2, A3)) { - return &SqGlobal::template Func3; -} - -// Arg Count 4 -template -SQFUNCTION SqMemberGlobalOverloadedFunc(R (* /*method*/)(A1, A2, A3, A4)) { - return &SqGlobal::template Func4; -} - -template -SQFUNCTION SqMemberGlobalOverloadedFunc(R& (* /*method*/)(A1, A2, A3, A4)) { - return &SqGlobal::template Func4; -} - -// Arg Count 5 -template -SQFUNCTION SqMemberGlobalOverloadedFunc(R (* /*method*/)(A1, A2, A3, A4, A5)) { - return &SqGlobal::template Func5; -} - -template -SQFUNCTION SqMemberGlobalOverloadedFunc(R& (* /*method*/)(A1, A2, A3, A4, A5)) { - return &SqGlobal::template Func5; -} - -// Arg Count 6 -template -SQFUNCTION SqMemberGlobalOverloadedFunc(R (* /*method*/)(A1, A2, A3, A4, A5, A6)) { - return &SqGlobal::template Func6; -} - -template -SQFUNCTION SqMemberGlobalOverloadedFunc(R& (* /*method*/)(A1, A2, A3, A4, A5, A6)) { - return &SqGlobal::template Func6; -} - -// Arg Count 7 -template -SQFUNCTION SqMemberGlobalOverloadedFunc(R (* /*method*/)(A1, A2, A3, A4, A5, A6, A7)) { - return &SqGlobal::template Func7; -} - -template -SQFUNCTION SqMemberGlobalOverloadedFunc(R& (* /*method*/)(A1, A2, A3, A4, A5, A6, A7)) { - return &SqGlobal::template Func7; -} - -// Arg Count 8 -template -SQFUNCTION SqMemberGlobalOverloadedFunc(R (* /*method*/)(A1, A2, A3, A4, A5, A6, A7, A8)) { - return &SqGlobal::template Func8; -} - -template -SQFUNCTION SqMemberGlobalOverloadedFunc(R& (* /*method*/)(A1, A2, A3, A4, A5, A6, A7, A8)) { - return &SqGlobal::template Func8; -} - -// Arg Count 9 -template -SQFUNCTION SqMemberGlobalOverloadedFunc(R (* /*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9)) { - return &SqGlobal::template Func9; -} - -template -SQFUNCTION SqMemberGlobalOverloadedFunc(R& (* /*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9)) { - return &SqGlobal::template Func9; -} - -// Arg Count 10 -template -SQFUNCTION SqMemberGlobalOverloadedFunc(R (* /*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10)) { - return &SqGlobal::template Func10; -} - -template -SQFUNCTION SqMemberGlobalOverloadedFunc(R& (* /*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10)) { - return &SqGlobal::template Func10; -} - -// Arg Count 11 -template -SQFUNCTION SqMemberGlobalOverloadedFunc(R (* /*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11)) { - return &SqGlobal::template Func11; -} - -template -SQFUNCTION SqMemberGlobalOverloadedFunc(R& (* /*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11)) { - return &SqGlobal::template Func11; -} - -// Arg Count 12 -template -SQFUNCTION SqMemberGlobalOverloadedFunc(R (* /*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12)) { - return &SqGlobal::template Func12; -} - -template -SQFUNCTION SqMemberGlobalOverloadedFunc(R& (* /*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12)) { - return &SqGlobal::template Func12; -} - -// Arg Count 13 -template -SQFUNCTION SqMemberGlobalOverloadedFunc(R (* /*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13)) { - return &SqGlobal::template Func13; -} - -template -SQFUNCTION SqMemberGlobalOverloadedFunc(R& (* /*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13)) { - return &SqGlobal::template Func13; -} - -// Arg Count 14 -template -SQFUNCTION SqMemberGlobalOverloadedFunc(R (* /*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14)) { - return &SqGlobal::template Func14; -} - -template -SQFUNCTION SqMemberGlobalOverloadedFunc(R& (* /*method*/)(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11, A12, A13, A14)) { - return &SqGlobal::template Func14; -} - - // // Member Overloaded Function Resolvers //