--- a/src/squirrel_helper.hpp Sat Jul 14 21:15:49 2007 +0000
+++ b/src/squirrel_helper.hpp Sat Jul 14 22:06:38 2007 +0000
@@ -33,12 +33,14 @@
template <typename Tretval, typename Targ1, typename Targ2> struct HasVoidReturnT<Tretval (*)(Targ1, Targ2)> : IsVoidT<Tretval> {};
template <typename Tretval, typename Targ1, typename Targ2, typename Targ3> struct HasVoidReturnT<Tretval (*)(Targ1, Targ2, Targ3)> : IsVoidT<Tretval> {};
template <typename Tretval, typename Targ1, typename Targ2, typename Targ3, typename Targ4> struct HasVoidReturnT<Tretval (*)(Targ1, Targ2, Targ3, Targ4)> : IsVoidT<Tretval> {};
+ template <typename Tretval, typename Targ1, typename Targ2, typename Targ3, typename Targ4, typename Targ5> struct HasVoidReturnT<Tretval (*)(Targ1, Targ2, Targ3, Targ4, Targ5)> : IsVoidT<Tretval> {};
/* methods */
template <class Tcls, typename Tretval> struct HasVoidReturnT<Tretval (Tcls::*)()> : IsVoidT<Tretval> {};
template <class Tcls, typename Tretval, typename Targ1> struct HasVoidReturnT<Tretval (Tcls::*)(Targ1)> : IsVoidT<Tretval> {};
template <class Tcls, typename Tretval, typename Targ1, typename Targ2> struct HasVoidReturnT<Tretval (Tcls::*)(Targ1, Targ2)> : IsVoidT<Tretval> {};
template <class Tcls, typename Tretval, typename Targ1, typename Targ2, typename Targ3> struct HasVoidReturnT<Tretval (Tcls::*)(Targ1, Targ2, Targ3)> : IsVoidT<Tretval> {};
template <class Tcls, typename Tretval, typename Targ1, typename Targ2, typename Targ3, typename Targ4> struct HasVoidReturnT<Tretval (Tcls::*)(Targ1, Targ2, Targ3, Targ4)> : IsVoidT<Tretval> {};
+ template <class Tcls, typename Tretval, typename Targ1, typename Targ2, typename Targ3, typename Targ4, typename Targ5> struct HasVoidReturnT<Tretval (Tcls::*)(Targ1, Targ2, Targ3, Targ4, Targ5)> : IsVoidT<Tretval> {};
/**
@@ -466,6 +468,111 @@
}
};
+ /**
+ * The real C++ caller for function with return value and 5 params.
+ */
+ template <typename Tretval, typename Targ1, typename Targ2, typename Targ3, typename Targ4, typename Targ5>
+ struct HelperT<Tretval (*)(Targ1, Targ2, Targ3, Targ4, Targ5), false> {
+ static int SQCall(void *instance, Tretval (*func)(Targ1, Targ2, Targ3, Targ4, Targ5), HSQUIRRELVM vm)
+ {
+ Tretval ret = (*func)(
+ GetParam(ForceType<Targ1>(), vm, 2),
+ GetParam(ForceType<Targ2>(), vm, 3),
+ GetParam(ForceType<Targ3>(), vm, 4),
+ GetParam(ForceType<Targ4>(), vm, 5),
+ GetParam(ForceType<Targ5>(), vm, 6)
+ );
+ sq_remove(vm, 2);
+ sq_remove(vm, 3);
+ sq_remove(vm, 4);
+ sq_remove(vm, 5);
+ sq_remove(vm, 6);
+ return Return(vm, ret);
+ }
+ };
+
+ /**
+ * The real C++ caller for function with no return value and 5 params.
+ */
+ template <typename Tretval, typename Targ1, typename Targ2, typename Targ3, typename Targ4, typename Targ5>
+ struct HelperT<Tretval (*)(Targ1, Targ2, Targ3, Targ4, Targ5), true> {
+ static int SQCall(void *instance, Tretval (*func)(Targ1, Targ2, Targ3, Targ4, Targ5), HSQUIRRELVM vm)
+ {
+ (*func)(
+ GetParam(ForceType<Targ1>(), vm, 2),
+ GetParam(ForceType<Targ2>(), vm, 3),
+ GetParam(ForceType<Targ3>(), vm, 4),
+ GetParam(ForceType<Targ4>(), vm, 5),
+ GetParam(ForceType<Targ5>(), vm, 6)
+ );
+ sq_remove(vm, 2);
+ sq_remove(vm, 3);
+ sq_remove(vm, 4);
+ sq_remove(vm, 5);
+ sq_remove(vm, 6);
+ return 0;
+ }
+ };
+
+ /**
+ * The real C++ caller for method with return value and 5 params.
+ */
+ template <class Tcls, typename Tretval, typename Targ1, typename Targ2, typename Targ3, typename Targ4, typename Targ5>
+ struct HelperT<Tretval (Tcls::*)(Targ1, Targ2, Targ3, Targ4, Targ5), false> {
+ static int SQCall(Tcls *instance, Tretval (Tcls::*func)(Targ1, Targ2, Targ3, Targ4, Targ5), HSQUIRRELVM vm)
+ {
+ Tretval ret = (instance->*func)(
+ GetParam(ForceType<Targ1>(), vm, 2),
+ GetParam(ForceType<Targ2>(), vm, 3),
+ GetParam(ForceType<Targ3>(), vm, 4),
+ GetParam(ForceType<Targ4>(), vm, 5),
+ GetParam(ForceType<Targ5>(), vm, 6)
+ );
+ sq_remove(vm, 2);
+ sq_remove(vm, 3);
+ sq_remove(vm, 4);
+ sq_remove(vm, 5);
+ sq_remove(vm, 6);
+ return Return(vm, ret);
+ }
+ };
+
+ /**
+ * The real C++ caller for method with no return value and 5 params.
+ */
+ template <class Tcls, typename Tretval, typename Targ1, typename Targ2, typename Targ3, typename Targ4, typename Targ5>
+ struct HelperT<Tretval (Tcls::*)(Targ1, Targ2, Targ3, Targ4, Targ5), true> {
+ static int SQCall(Tcls *instance, Tretval (Tcls::*func)(Targ1, Targ2, Targ3, Targ4, Targ5), HSQUIRRELVM vm)
+ {
+ (instance->*func)(
+ GetParam(ForceType<Targ1>(), vm, 2),
+ GetParam(ForceType<Targ2>(), vm, 3),
+ GetParam(ForceType<Targ3>(), vm, 4),
+ GetParam(ForceType<Targ4>(), vm, 5),
+ GetParam(ForceType<Targ5>(), vm, 6)
+ );
+ sq_remove(vm, 2);
+ sq_remove(vm, 3);
+ sq_remove(vm, 4);
+ sq_remove(vm, 5);
+ sq_remove(vm, 6);
+ return 0;
+ }
+
+ static Tcls *SQConstruct(Tcls *instance, Tretval (Tcls::*func)(Targ1, Targ2, Targ3, Targ4, Targ5), HSQUIRRELVM vm)
+ {
+ Tcls *inst = new Tcls(
+ GetParam(ForceType<Targ1>(), vm, 2),
+ GetParam(ForceType<Targ2>(), vm, 3),
+ GetParam(ForceType<Targ3>(), vm, 4),
+ GetParam(ForceType<Targ4>(), vm, 5),
+ GetParam(ForceType<Targ5>(), vm, 6)
+ );
+
+ return inst;
+ }
+ };
+
/**
* A general template for all non-static method callbacks from Squirrel.