src/squirrel_helper.hpp
branchnoai
changeset 9651 6e2860c67455
parent 9635 9ee82e091af7
child 9656 ddb4260f3051
equal deleted inserted replaced
9650:7e5e1a7ecbff 9651:6e2860c67455
    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.