Lua53

来源:互联网 发布:安心贷网络借贷平台 编辑:程序博客网 时间:2024/06/03 16:32

简单包装,未测试.如果inline报错.可以修改项目配置或者加__forceinline

// lua.hpp// Lua header files for C++// <<extern "C">> not supplied automatically because Lua also compiles as C++extern "C" {#include "lua.h"#include "lualib.h"#include "lauxlib.h"}#ifdef __cplusplus/** \brief lua  * *  lua  */ #ifndef nullptr #define nullptr 0 #endif // nullptrclass LUA_API Lua{public:    lua_State *L;    /*    ** state manipulation    */public:    Lua(lua_Alloc f, void *ud):L(nullptr)    {        L = lua_newstate(f,ud);    }    Lua():L(NULL){        L = luaL_newstate();    }    ~Lua()    {        if (L)        {            lua_close(L);            L = nullptr;        }    }    //    inline    lua_State *NewThread(){        return lua_newthread(L);    }    //    inline    lua_CFunction atpanic(lua_CFunction panicf){        return lua_atpanic(L, panicf);    }    //    inline    const lua_Number *verson(){        return lua_version(L);    }    /*    ** basic stack manipulation    */public:    inline    int absindex(int idx){        return lua_absindex(L,idx);    }    inline    int   gettop(){      return lua_gettop(L);    }    inline    void  settop( int idx){        return lua_settop(L, idx);    }    inline    void  pushvalue( int idx){        return lua_pushvalue(L,idx);    }    inline    void  rotate( int idx, int n){        return lua_rotate(L,idx,n);    }    inline    void  copy( int fromidx, int toidx){        return lua_copy(L, fromidx, toidx);    }    inline    int   checkstack( int n){        return lua_checkstack(L,n);    }    inline    void  xmove(lua_State *to, int n){        return lua_xmove(L, to,n);    }    /*    ** access functions (stack -> C)    */    inline    int             isnumber( int idx){        return lua_isnumber(L, idx);    }    inline    int             isstring( int idx){        return lua_isstring(L, idx);    }    inline    int             iscfunction( int idx){        return lua_isfunction(L,idx);    }    inline    int             isinteger( int idx){        return lua_isinteger(L,idx);    }    inline    int isuserdata( int idx){        return lua_isuserdata(L,idx);    }    inline    int             type( int idx){        return lua_type(L,idx);    }    inline    const char     *typename( int tp){        return lua_typename(L,tp);    }    inline    lua_Number      tonumberx( int idx, int *isnum){        return lua_tonumberx(L,idx, isnum);    }    inline    lua_Integer     tointegerx( int idx, int *isnum){        return lua_tointeger(L, idx, isnum);    }    inline    int             toboolean( int idx){        return lua_toboolean(L, idx);    }    inline    const char     *tolstring( int idx, size_t *len){        return lua_tolstring(L,idx, len);    }    inline    size_t          rawlen( int idx){        return lua_rawlen(L,idx);    }    inline    lua_CFunction   tocfunction( int idx){        return lua_tocfunction(L,idx);    }    inline    void           *touserdata( int idx){        return lua_touserdata(L,idx);    }    inline    lua_State      *tothread( int idx){        return lua_tothread(L,idx);    }    inline    const void     *topointer( int idx){        return lua_topointer(L,idx);    }    /*    ** Comparison and arithmetic functions    */    inline    void  arith( int op){        lua_arith(L,op);    }    inline    int   rawequal( int idx1, int idx2){        return lua_rawequal(L, idx1, idx2);    }    inline    int   compare( int idx1, int idx2, int op){        return lua_compare(L, idx1, idx2, op);    }    /*    ** push functions (C -> stack)    */    inline    void        pushnil(){        lua_pushnil(L);    }    inline    void        pushnumber( lua_Number n){        lua_pushnumber(L, n);    }    inline    void        pushinteger( lua_Integer n){        lua_pushinteger(L, n);    }    inline    const char *pushlstring( const char *s, size_t len){        return lua_pushlstring(L,s,len);    }    inline    const char *pushstring( const char *s){        return lua_pushstring(L, s);    }    inline    const char *pushvfstring( const char *fmt,va_list argp){        return lua_pushvfstring(L, ftm, argp);    }    //check     lua_pushfstring    //implete no same    const char *pushfstring( const char *fmt, ...){          const char *ret;          va_list argp;          va_start(argp, fmt);          ret = pushvfstring(L, fmt, argp);          va_end(argp);          return ret;    }    inline    void  pushcclosure( lua_CFunction fn, int n){        lua_pushcclosure(L,fn,n);    }    inline    void  pushboolean( int b){        lua_pushboolean(L,b);    }    inline    void  pushlightuserdata( void *p){        lua_pushlightuserdata(L,p);    }    inline    int   pushthread(){        return lua_pushthread(L);    }    /*    ** get functions (Lua -> stack)    */    inline    int getglobal( const char *name){        return lua_getglobal(L, name);    }    inline    int gettable( int idx){        return lua_gettable(L, idx);    }    inline    int getfield( int idx, const char *k){        return lua_getfield(L,idx,k);    }    inline    int geti( int idx, lua_Integer n){        return lua_geti(L,idx,n);    }    inline    int rawget( int idx){        return lua_rawget(L,idx);    }    inline    int rawgeti( int idx, lua_Integer n){        return lua_rawgeti(L,idx,n);    }    inline    int rawgetp( int idx, const void *p){        return lua_rawgetp(L,idx,p);    }    inline    void  createtable( int narry, int nrec){        return lua_createtable(L,narry,nrec);    }    inline    void *newuserdata( size_t sz){        return lua_newuserdata(L,sz);    }    inline    int   getmetatable( int objindex){        return lua_getmetatable(L,objindex);    }    inline    int  getuservalue( int idx){        return lua_getuservalue(L,idx);    }    /*    ** set functions (stack -> Lua)    */    inline    void  setglobal( const char *name){        lua_setglobal(L,name);    }    inline    void  settable( int idx){        lua_settable(L,idx);    }    inline    void  setfield( int idx, const char *k){        lua_setfield(L,idx,k);    }    inline    void  seti( int idx, lua_Integer n){        lua_seti(L,idx,n);    }    inline    void  rawset( int idx){        lua_rawset(L,idx);    }    inline    void  rawseti( int idx, lua_Integer n){        lua_rawseti(L,idx,n);    }    inline    void  rawsetp( int idx, const void *p){        lua_rawsetp(L,idx,p);    }    inline    int   setmetatable( int objindex){        return lua_setmetatable(L,objindex);    }    inline    void  setuservalue( int idx){        lua_setuservalue(L,idx);    }    /*    ** 'load' and 'call' functions (load and run Lua code)    */    inline    void  callk( int nargs, int nresults,lua_KContext ctx, lua_KFunction k){        lua_callk(L,nargs,nresults, ctx,k);    }    //#define lua_call(L,n,r)       lua_callk(L, (n), (r), 0, NULL)    inline    void call(int nargs,int nresults){        lua_call(L,nargs,nresults,0,NULL)    }    inline    int   pcallk( int nargs, int nresults, int errfunc,lua_KContext ctx,                 lua_KFunction k){        return lua_pcallk(L,nargs, nresults, errfunc, ctx,k);    }    //#define lua_pcall(L,n,r,f)    lua_pcallk(L, (n), (r), (f), 0, NULL)    inline    void pcall( int nargs, int nresults int errfunc){        lua_pcallk(L,nargs,nresults,errfuc,0,NULL);    }    inline    int   load( lua_Reader reader, void *dt,const char *chunkname,               const char *mode ){        return lua_load(L,reader,data,chunkname,mode);    }    inline    int dump( lua_Writer writer, void *data, int strip){        return lua_dump(L,writer,data,strip);    }    /*    ** coroutine functions    */    inline    int  yieldk( int nresults, lua_KContext ctx,lua_KFunction k){        return lua_yieldk(L,nresults, ctx,k);    }    inline    int  resume( lua_State *from, int narg){        return lua_resume(L,from,narg);    }    inline    int  status(){        return lua_status(L);    }    inline    int isyieldable(){        return lua_isyieldable(L);    }    //#define lua_yield(L,n)        lua_yieldk(L, (n), 0, NULL)    inline    int yield(int nresults){        return lua_yieldk(L,nresults,0,NULL);    }    /*    ** garbage-collection function and options    */    inline    int gc( int what, int data){        return lua_gc(L,what,data);    }    /*    ** miscellaneous functions    */    inline    int   error(){        return lua_error(L);    }    inline    int   next( int idx){        return lua_next(L,idx);    }    inline    void  concat( int n){        lua_concat(L,n);    }    inline    void  len( int idx){        lua_len(L,idx);    }    inline    size_t   stringtonumber( const char *s){        return lua_stringtonumber(L,s);    }    inline    lua_Alloc getallocf( void **ud){        return lua_getallocf(L,ud);    }    inline    void      setallocf( lua_Alloc f, void *ud){        lua_setallocf(L,f,ud);    }    /*    ** {==============================================================    ** some useful macros    ** ===============================================================    */    //#define lua_getextraspace(L)  ((void *)((char *)(L) - LUA_EXTRASPACE))    inline    void * getextraspace(){        return ((void *)((char *)(L) - LUA_EXTRASPACE));    }    //#define lua_tonumber(L,i) lua_tonumberx(L,(i),NULL)    inline    lua_Number tonumber(int idx){        return lua_tonumberx(L,idx,NULL);    }    //#define lua_tointeger(L,i)    lua_tointegerx(L,(i),NULL)    inline    lua_Integer tointeger(ind idx){        return lua_tointegerx(L,idx,NULL);    }    //#define lua_pop(L,n)      lua_settop(L, -(n)-1)    inline    void pop(int idx){        lua_settop(L,idx);    }    //#define lua_newtable(L)       lua_createtable(L, 0, 0)    inline    void newtable(){        lua_createtable(L,0,0);    }//#define lua_pushcfunction(L,f)    lua_pushcclosure(L, (f), 0)    inline    void pushcfunction(lua_CFunction f){        lua_pushcclosure(L,f,0);    }//#define lua_register(L,n,f) (lua_pushcfunction(L, (f)), lua_setglobal(L, (n)))    inline    void register(lua_CFunction f, const char *name){        pushcfunction(f);        setglobal(n);    }//    #define lua_isfunction(L,n)   lua_type(L, (n)) == LUA_TFUNCTION)//    #define lua_istable(L,n)  lua_type(L, (n)) == LUA_TTABLE)//    #define lua_islightuserdata(L,n)  vtype(L, (n)) == LUA_TLIGHTUSERDATA)//    #define lua_isnil(L,n)        lua_type(L, (n)) == LUA_TNIL)//    #define lua_isboolean(L,n)    lua_type(L, (n)) == LUA_TBOOLEAN)//    #define lua_isthread(L,n) lua_type(L, (n)) == LUA_TTHREAD)//    #define lua_isnone(L,n)       lua_type(L, (n)) == LUA_TNONE)//    #define lua_isnoneornil(L, n) lua_type(L, (n)) <= 0)    inline    bool isfunction(int n) { return (lua_type(L, n) ==LUA_TFUNCTION);}    inline    bool istable(int n){ return (lua_type(L, n) == LUA_TTABLE);}    inline    bool islightuserdata(int n) { return (lua_type(L, n)== LUA_TLIGHTUSERDATA);}    inline    bool isnil(int n)       { return (lua_type(L, n) == LUA_TNIL);}    inline    bool isboolean(int n)   { return (lua_type(L, n) == LUA_TBOOLEAN);}    inline    bool isthread(int n)    { return (lua_type(L, n) == LUA_TTHREAD);}    inline    bool isnone(int n)      { return (lua_type(L, n) == LUA_TNONE);}    inline    bool isnoneornil(int n) { return (lua_type(L, n) <= 0);}    //#define lua_pushliteral(L, s) lua_pushstring(L, "" s)    inline    const char *pushliteral(const char *s){        return lua_pushstring(L,""s);    }    //#define lua_pushglobaltable(L)  \        lua_rawgeti(L, LUA_REGISTRYINDEX, LUA_RIDX_GLOBALS)    inline    int pushglobaltable(){        return lua_rawgeti(L,LUA_REGISTRYINDEX, LUA_RIDX_GLOBALS);    }    //#define lua_tostring(L,i) lua_tolstring(L, (i), NULL)    inline    int tostring(int idx){        return lua_tolstring(L,idx,NULL);    }    //#define lua_insert(L,idx) lua_rotate(L, (idx), 1)    inline    void insert(int idx){        lua_rotate(L,idx,1);    }    //#define lua_remove(L,idx) lua_rotate(L, (idx), -1), lua_pop(L, 1))    inline    void remove(int idx){        lua_rotate(L,idx,-1);        //lua_pop(L,1);//pop(1)        lua_settop(L,1);    }    //#define lua_replace(L,idx)    lua_copy(L, -1, (idx)), lua_pop(L, 1))    inline    void replace(int idx){        lua_copy(L,-1,idx);        lua_settop(L,1);    }    /* }============================================================== */    /*    ** {==============================================================    ** compatibility macros for unsigned conversions    ** ===============================================================    */#if defined(LUA_COMPAT_APIINTCASTS)//#define lua_pushunsigned(L,n) lua_pushinteger(L, Integer)(n))    inline    void pushnsigned(lua_Integer n){        lua_pushinteger(L,n);    }//#define lua_tounsignedx(L,i,is)   (Unsigned)lua_tointegerx(L,i,is))    inline    Unsigned tounsignedx(int idx, int *pisnum){        return (Unsigned)lua_tointegerx(L,idx, pisnum);    }//#define lua_tounsigned(L,i)   lua_tounsignedx(L,(i),NULL)    inline    Unsigned tounsigned(int idx){        return (Unsigned)lua_tointegerx(L,idx, NULL);    }#endif    /* }============================================================== */    /*    ** {======================================================================    ** Debug API    ** =======================================================================    */     /* activation record */    /* Functions to be called by the debugger in specific events */    inline void Hook( lua_Debug *ar ){        lua_Hook(L,ar);    }    inline    int getstack( int level, lua_Debug *ar){        return lua_getstack(L,level, ar);    }    inline    int getinfo( const char *what, lua_Debug *ar){        return lua_getinfo(L,what, ar);    }    inline    const char *getlocal( const lua_Debug *ar, int n){        return lua_getlocal(L,ar,n);    }    inline    const char *setlocal( const lua_Debug *ar, int n){        return lua_setlocal(L,ar,n);    }    inline    const char *getupvalue( int funcindex, int n){        return lua_getupvalue(L,funcindex,n);    }    inline    const char *setupvalue( int funcindex, int n){        return lua_setupvalue(L,funcindex, n);    }    inline    void *upvalueid( int fidx, int n){        return lua_upvalueid(L,fidx,n);    }    inline    void  upvaluejoin( int fidx1, int n1,int fidx2, int n2){        lua_upvaluejoin(L,fidx1, n1, fidx2, n2);    }    inline    void sethook( lua_Hook func, int mask, int count){        lua_sethook(L,func,mask,count);    }    inline    lua_Hook gethook(){        return lua_gethook(L);    }    inline    int gethookmask(){        return lua_gethookmask(L);    }    inline    int gethookcount(){        return lua_gethookcount(L);    }/********************************************//** * * AuxLib * ***********************************************/inlinevoid L_checkversion_(lua_Number ver, size_t sz){  luaL_checkversion_(L,ver,sz);}void L_checkversion(){    luaL_checkversion_(L, LUA_VERSION_NUM, LUAL_NUMSIZES);}inlineint L_getmetafield( int obj, const char *e){  return luaL_getmetafield(L,obj,e);}inlineint L_callmeta ( int obj, const char *e){  return luaL_callmeta(L,obj,e);}inlineconst char *L_tolstring(int idx, size_t *len){    return luaL_tolstring(L,idx,len);}inlineint L_argerror( int arg, const char *extramsg){    return luaL_argerror(L,arg,extramsg);}inlineconst char *L_checklstring(int arg, size_t *l){    return luaL_checklstring(L,arg,l)}inlineconst char *L_optlstring(int arg, const char *def, size_t *l){    return luaL_optlstring(L,arg,def,l);}inlinelua_Number L_checknumber(int arg){    return luaL_checknumber(L,arg);}inlinelua_Number L_optnumber(int arg, lua_Number def){    return luaL_optnumber(L,arg,def);}inlinelua_Integer L_checkinteger(int arg){    return luaL_checkinteger(L,arg);}inlinelua_Integer L_optinteger(int arg,lua_Integer def){    return luaL_optinteger(L,arg,def);}inlinevoid L_checkstack(int sz, const char *msg){    luaL_checkstack(L,sz,msg);}inlinevoid L_checktype(int arg, int t){    luaL_checktype(L,arg,t);}inlinevoid L_checkany(int arg){    luaL_checkany(L,arg);}inlineint   L_newmetatable(const char *tname){    return luaL_newmetatable(L,tname);}inlinevoid  L_setmetatable(const char *tname){    return luaL_setmetatable(L,tname);}inlinevoid *L_testudata(int ud, const char *tname){    return luaL_testudata(L,ud,tname);}inlinevoid *L_checkudata(int ud, const char *tname){    return luaL_checkudata(L,ud,tname);}inlinevoid L_where(int lvl){    luaL_where(L,lvl);}inlineint L_error(const char *fmt, ...){  va_list argp;  va_start(argp, fmt);  luaL_where(L, 1);  lua_pushvfstring(L, fmt, argp);  va_end(argp);  lua_concat(L, 2);  return lua_error(L);}inlineint L_checkoption(int arg, const char *def,const char *const lst[]){    return luaL_checkoption(L,arg,def,lst);}inlineint L_fileresult(int stat, const char *fname){    return luaL_fileresult(L,stat,fname);}inlineint L_execresult(int stat){    return luaL_execresult(L,stat);}/* pre-defined references */inlineint L_ref(int t){    return luaL_ref(L,t);}inlinevoid L_unref(int t, int ref){    luaL_unref(L,t,ref);}inlineint L_loadfilex(const char *filename,const char *mode){    return luaL_loadfilex(L,filename,mode);}// luaL_loadfile(L,f)  luaL_loadfilex(L,f,NULL) inlineint L_loadfile(const char *filename){    return luaL_loadfilex(L,filename,NULL);}inlineint L_loadbufferx(const char *buff, size_t sz,                        const char *name, const char *mode){    return luaL_loadbufferx(L,buff,sz,name,mode);}inlineint L_loadstring(const char *s){    return luaL_loadstring(L,s);}inlinelua_State *L_newstate) (void){    return luaL_newstate()}inlinelua_Integer L_len(int idx){    return luaL_len(L,idx);}inlineconst char *L_gsub(const char *s, const char *p,              const char *r){    return luaL_gsub(L,s,p,r);}inlinevoid L_setfuncs(const luaL_Reg *l, int nup){    luaL_setfuncs(L,l,nup);}inlineint L_getsubtable(int idx, const char *fname){    return luaL_getsubtable(L,idx,fname);}inlinevoid L_traceback(lua_State *L1,const char *msg, int level){    return luaL_traceback(L,L1,msg,level);}inlinevoid L_requiref(const char *modname,                                 lua_CFunction openf, int glb){    luaL_requiref(L,modname,openf,glb);}/*** ===============================================================** some useful macros** ===============================================================*/inlinevoid L_newlibtabl(const char *name){    lua_createtable(L,0,sizeof(l)/sizeof((l)[0]) - 1);}inlinevoid L_newlib(const char *l){  luaL_checkversion(L);  luaL_newlibtable(L,l);  luaL_setfuncs(L,l,0);}inlinevoid L_argcheck(int cond,                    int numarg,                    const char *extramsg){    ((void)((cond) || luaL_argerror(L, (numarg), (extramsg))))}inlineconst char * L_checkstring(){    return luaL_checklstring(L, (n), NULL);}inlineconst char * L_optstring ( int arg, const char *def){    return luaL_optlstring(L, (arg), (d), NULL);}inlineconst char * L_typename(int idx){    return lua_typename(L, lua_type(L,(i)));}inlineint L_dofile(const char *fn){  return (luaL_loadfile(L, fn) || lua_pcall(L, 0, LUA_MULTRET, 0));}inlineint L_dostring(const char *fn){  return (luaL_loadstring(L, s) || lua_pcall(L, 0, LUA_MULTRET, 0));}inlineint L_getmetatable(const char *fn){    return (lua_getfield(L, LUA_REGISTRYINDEX, (n)));}inlineint L_loadbuffer(const char *buff, size_t size,                                 const char *name)    return luaL_loadbufferx(L,s,sz,n,NULL);}/* compatibility with old module system */#if defined(LUA_COMPAT_MODULE)inlinevoid L_pushmodule(const char *modname,                                   int sizehint){    luaL_pushmodule(L,modname,sizehint);}inlinevoid L_openlib(const char *libname,                                const luaL_Reg *l, int nup){    return luaL_openlib(L,libname,l,nup);}inlinevoid L_register( const char *n,                                const luaL_Reg *l){    (luaL_openlib(L,(n),(l),0));}#endif};#endif //__cplusplus
0 0