3OJMIMC6SKRBTPL2KMTTRG6KANSBNXK3CIMLFCONFKVLLPNCRPWAC SDGK6QEAHVCMRJVWSHZUECXXC5ZSJ2PQYTZWN3KX5UQFGAWI4Q3AC JCUAPVDH47W6LG4LU6S4QP6FZJJ2NVXJ6LKFSBMVY3AWMC2PALIAC OIWB7TPX3LFYDGSVPUUVUGWTY7JB4PE6EBELDFZX7B3HIOWH25GQC IVVTHLTTLOP5TSULXJWUSSXHOKYWVU3OWKYVK45A7RIB6V34MYQAC AUXHSGS4EFOPZ6TVZYWNVOUDO7NYKUKE3HBKGQQWTALSVFOE3HAAC 7Y5HSDFKA5TPLS2TWTRFMQVX6UXUDHXU5MUMXQSDFAIY4THQ3BIQC Q2NUCKXB4P7DHRXY764F5AMEJO436GV74AVVVOAVGNWKLMSVMDNQC RXYHE3C7R3EGCRZEJT2ZO4ALLRDR3HF66VHZZNF7TT3DFWZ6BJCQC IGUSSYANPKGMX5YDQC7AI5ZWZLEQPIXA4KG3RZHNPMERL554HQWQC SDLKLUNFGVKDS55DDJZCBAVIB7NL3RRYPTACAY65SCUQKV6APFSAC W52PCSHX72WAMWKG6L4BPUBVMO6E72KYYBNKAA7554KNOTY6V7WQC NOUFW6ACJ7KPVHSPF4WLRAVOWI7PZ6OAVYDRMI3WYNPXVMGAB3QAC SM6YRPYZS6LMDQA6X3VAOK2PGMUFKPD7JMWJISOQSMX2CBR4ISPAC NKONHW4JNY6HP2M63MNPM3H64ZWSUNUT5FX2STW4KTS4AMXJXXVQC OYTCBRC7LE44EUVRZVYTOOVKQWJ6P6YE3FXTOGUTNKEMLNWPHKSQC #define LUAWRAP(name, wrapexpr) \static int name(lua_State *ls) \{ \wrapexpr; \return (0); \}#define PLUARET(type, val) \lua_push##type(ls, val); \return (1);#define LUARET1(name, type, val) \static int name(lua_State *ls) \{ \lua_push##type(ls, val); \return (1); \}#define LUARET2(name, type, val1, val2) \static int name(lua_State *ls) \{ \lua_push##type(ls, val1); \lua_push##type(ls, val2); \return (2); \}#define ASSERT_DLUA \do { \if (CLua::get_vm(ls).managed_vm) \luaL_error(ls, "Operation forbidden in end-user script"); \} while (false)
* User-data templates.* TODO: Consolidate these.*/template <class T>inline static T *util_get_userdata(lua_State *ls, int ndx){return (lua_islightuserdata(ls, ndx))?static_cast<T *>( lua_touserdata(ls, ndx) ): NULL;}template <class T>inline static T *clua_get_userdata(lua_State *ls, const char *mt, int ndx = 1){return static_cast<T*>( luaL_checkudata( ls, ndx, mt ) );}template <class T>static int lua_object_gc(lua_State *ls){T **pptr = static_cast<T**>( lua_touserdata(ls, 1) );if (pptr)delete *pptr;return (0);}template <class T> T *clua_new_userdata(lua_State *ls, const char *mt){void *udata = lua_newuserdata( ls, sizeof(T) );luaL_getmetatable(ls, mt);lua_setmetatable(ls, -2);return static_cast<T*>( udata );}template <typename T>inline void dlua_push_userdata(lua_State *ls, T udata, const char *meta){T *de = clua_new_userdata<T>(ls, meta);*de = udata;}template <class T>static void dlua_push_object_type(lua_State *ls, const char *meta, const T &data){T **ptr = clua_new_userdata<T*>(ls, meta);*ptr = new T(data);}/*
#define LUAWRAP(name, wrapexpr) \static int name(lua_State *ls) \{ \wrapexpr; \return (0); \}#define PLUARET(type, val) \lua_push##type(ls, val); \return (1);#define LUARET1(name, type, val) \static int name(lua_State *ls) \{ \lua_push##type(ls, val); \return (1); \}#define LUARET2(name, type, val1, val2) \static int name(lua_State *ls) \{ \lua_push##type(ls, val1); \lua_push##type(ls, val2); \return (2); \}#define ASSERT_DLUA \do { \if (CLua::get_vm(ls).managed_vm) \luaL_error(ls, "Operation forbidden in end-user script"); \} while (false)template <class T>inline static T *util_get_userdata(lua_State *ls, int ndx){return (lua_islightuserdata(ls, ndx))?static_cast<T *>( lua_touserdata(ls, ndx) ): NULL;}template <class T>inline static T *clua_get_userdata(lua_State *ls, const char *mt, int ndx = 1){return static_cast<T*>( luaL_checkudata( ls, ndx, mt ) );}template <class T>static int lua_object_gc(lua_State *ls){T **pptr = static_cast<T**>( lua_touserdata(ls, 1) );if (pptr)delete *pptr;return (0);}