59 template <> inline int Return<int32> (HSQUIRRELVM vm, int32 res) { sq_pushinteger(vm, res); return 1; } |
59 template <> inline int Return<int32> (HSQUIRRELVM vm, int32 res) { sq_pushinteger(vm, res); return 1; } |
60 template <> inline int Return<int64> (HSQUIRRELVM vm, int64 res) { sq_pushinteger(vm, ClampToI32(res)); return 1; } |
60 template <> inline int Return<int64> (HSQUIRRELVM vm, int64 res) { sq_pushinteger(vm, ClampToI32(res)); return 1; } |
61 template <> inline int Return<bool> (HSQUIRRELVM vm, bool res) { sq_pushbool (vm, res); return 1; } |
61 template <> inline int Return<bool> (HSQUIRRELVM vm, bool res) { sq_pushbool (vm, res); return 1; } |
62 template <> inline int Return<char *> (HSQUIRRELVM vm, char *res) { if (res == NULL) sq_pushnull(vm); else sq_pushstring (vm, OTTD2FS(res), strlen(res)); free(res); return 1; } |
62 template <> inline int Return<char *> (HSQUIRRELVM vm, char *res) { if (res == NULL) sq_pushnull(vm); else sq_pushstring (vm, OTTD2FS(res), strlen(res)); free(res); return 1; } |
63 template <> inline int Return<const char *>(HSQUIRRELVM vm, const char *res) { if (res == NULL) sq_pushnull(vm); else sq_pushstring (vm, OTTD2FS(res), strlen(res)); return 1; } |
63 template <> inline int Return<const char *>(HSQUIRRELVM vm, const char *res) { if (res == NULL) sq_pushnull(vm); else sq_pushstring (vm, OTTD2FS(res), strlen(res)); return 1; } |
|
64 template <> inline int Return<void *> (HSQUIRRELVM vm, void *res) { sq_pushuserpointer(vm, res); return 1; } |
64 |
65 |
65 /** |
66 /** |
66 * To get a param from squirrel, we call this function. It converts to the right format. |
67 * To get a param from squirrel, we call this function. It converts to the right format. |
67 */ |
68 */ |
68 template <typename T> static T GetParam(ForceType<T>, HSQUIRRELVM vm, int index); |
69 template <typename T> static T GetParam(ForceType<T>, HSQUIRRELVM vm, int index); |
69 |
70 |
70 template <> inline uint8 GetParam(ForceType<uint8> , HSQUIRRELVM vm, int index) { SQInteger tmp; sq_getinteger(vm, index, &tmp); sq_remove(vm, index); return tmp; } |
71 template <> inline uint8 GetParam(ForceType<uint8> , HSQUIRRELVM vm, int index) { SQInteger tmp; sq_getinteger (vm, index, &tmp); sq_remove(vm, index); return tmp; } |
71 template <> inline uint16 GetParam(ForceType<uint16> , HSQUIRRELVM vm, int index) { SQInteger tmp; sq_getinteger(vm, index, &tmp); sq_remove(vm, index); return tmp; } |
72 template <> inline uint16 GetParam(ForceType<uint16> , HSQUIRRELVM vm, int index) { SQInteger tmp; sq_getinteger (vm, index, &tmp); sq_remove(vm, index); return tmp; } |
72 template <> inline uint32 GetParam(ForceType<uint32> , HSQUIRRELVM vm, int index) { SQInteger tmp; sq_getinteger(vm, index, &tmp); sq_remove(vm, index); return tmp; } |
73 template <> inline uint32 GetParam(ForceType<uint32> , HSQUIRRELVM vm, int index) { SQInteger tmp; sq_getinteger (vm, index, &tmp); sq_remove(vm, index); return tmp; } |
73 template <> inline int8 GetParam(ForceType<int8> , HSQUIRRELVM vm, int index) { SQInteger tmp; sq_getinteger(vm, index, &tmp); sq_remove(vm, index); return tmp; } |
74 template <> inline int8 GetParam(ForceType<int8> , HSQUIRRELVM vm, int index) { SQInteger tmp; sq_getinteger (vm, index, &tmp); sq_remove(vm, index); return tmp; } |
74 template <> inline int16 GetParam(ForceType<int16> , HSQUIRRELVM vm, int index) { SQInteger tmp; sq_getinteger(vm, index, &tmp); sq_remove(vm, index); return tmp; } |
75 template <> inline int16 GetParam(ForceType<int16> , HSQUIRRELVM vm, int index) { SQInteger tmp; sq_getinteger (vm, index, &tmp); sq_remove(vm, index); return tmp; } |
75 template <> inline int32 GetParam(ForceType<int32> , HSQUIRRELVM vm, int index) { SQInteger tmp; sq_getinteger(vm, index, &tmp); sq_remove(vm, index); return tmp; } |
76 template <> inline int32 GetParam(ForceType<int32> , HSQUIRRELVM vm, int index) { SQInteger tmp; sq_getinteger (vm, index, &tmp); sq_remove(vm, index); return tmp; } |
76 template <> inline bool GetParam(ForceType<bool> , HSQUIRRELVM vm, int index) { SQBool tmp; sq_getbool (vm, index, &tmp); sq_remove(vm, index); return tmp != 0; } |
77 template <> inline bool GetParam(ForceType<bool> , HSQUIRRELVM vm, int index) { SQBool tmp; sq_getbool (vm, index, &tmp); sq_remove(vm, index); return tmp != 0; } |
77 template <> inline const char *GetParam(ForceType<const char *>, HSQUIRRELVM vm, int index) { const SQChar *tmp; sq_getstring (vm, index, &tmp); sq_remove(vm, index); return FS2OTTD(tmp); } |
78 template <> inline const char *GetParam(ForceType<const char *>, HSQUIRRELVM vm, int index) { const SQChar *tmp; sq_getstring (vm, index, &tmp); sq_remove(vm, index); return FS2OTTD(tmp); } |
|
79 template <> inline void *GetParam(ForceType<void *> , HSQUIRRELVM vm, int index) { SQUserPointer tmp; sq_getuserpointer(vm, index, &tmp); sq_remove(vm, index); return tmp; } |
78 |
80 |
79 /** |
81 /** |
80 * Helper class to recognize the function type (retval type, args) and use the proper specialization |
82 * Helper class to recognize the function type (retval type, args) and use the proper specialization |
81 * for SQ callback. The partial specializations for the second arg (Tis_void_retval) are not possible |
83 * for SQ callback. The partial specializations for the second arg (Tis_void_retval) are not possible |
82 * on the function. Therefore the class is used instead. |
84 * on the function. Therefore the class is used instead. |