src/squirrel_helper.hpp
branchnoai
changeset 9658 e7675771bca4
parent 9656 ddb4260f3051
child 9679 788e083db48b
--- 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.