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);
}