Lua53

简单包装,未测试.如果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 // nullptr

class 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
 *
 ***********************************************/

inline
void L_checkversion_(lua_Number ver, size_t sz){
  luaL_checkversion_(L,ver,sz);
}
void L_checkversion(){
    luaL_checkversion_(L, LUA_VERSION_NUM, LUAL_NUMSIZES);
}
inline
int L_getmetafield( int obj, const char *e){
  return luaL_getmetafield(L,obj,e);
}
inline
int L_callmeta ( int obj, const char *e){
  return luaL_callmeta(L,obj,e);
}
inline
const char *L_tolstring(int idx, size_t *len){
    return luaL_tolstring(L,idx,len);
}
inline
int L_argerror( int arg, const char *extramsg){
    return luaL_argerror(L,arg,extramsg);
}
inline
const char *L_checklstring(int arg, size_t *l){
    return luaL_checklstring(L,arg,l)
}
inline
const char *L_optlstring(int arg, const char *def, size_t *l){
    return luaL_optlstring(L,arg,def,l);
}
inline
lua_Number L_checknumber(int arg){
    return luaL_checknumber(L,arg);
}
inline
lua_Number L_optnumber(int arg, lua_Number def){
    return luaL_optnumber(L,arg,def);
}

inline
lua_Integer L_checkinteger(int arg){
    return luaL_checkinteger(L,arg);
}
inline
lua_Integer L_optinteger(int arg,lua_Integer def){
    return luaL_optinteger(L,arg,def);
}

inline
void L_checkstack(int sz, const char *msg){
    luaL_checkstack(L,sz,msg);
}
inline
void L_checktype(int arg, int t){
    luaL_checktype(L,arg,t);
}
inline
void L_checkany(int arg){
    luaL_checkany(L,arg);
}

inline
int   L_newmetatable(const char *tname){
    return luaL_newmetatable(L,tname);
}
inline
void  L_setmetatable(const char *tname){
    return luaL_setmetatable(L,tname);
}
inline
void *L_testudata(int ud, const char *tname){
    return luaL_testudata(L,ud,tname);
}
inline
void *L_checkudata(int ud, const char *tname){
    return luaL_checkudata(L,ud,tname);
}

inline
void L_where(int lvl){
    luaL_where(L,lvl);
}
inline
int 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);
}

inline
int L_checkoption(int arg, const char *def,const char *const lst[]){
    return luaL_checkoption(L,arg,def,lst);
}

inline
int L_fileresult(int stat, const char *fname){
    return luaL_fileresult(L,stat,fname);
}
inline
int L_execresult(int stat){
    return luaL_execresult(L,stat);
}

/* pre-defined references */

inline
int L_ref(int t){
    return luaL_ref(L,t);
}
inline
void L_unref(int t, int ref){
    luaL_unref(L,t,ref);
}

inline
int L_loadfilex(const char *filename,const char *mode){
    return luaL_loadfilex(L,filename,mode);
}

// luaL_loadfile(L,f)  luaL_loadfilex(L,f,NULL)
 inline
int L_loadfile(const char *filename){
    return luaL_loadfilex(L,filename,NULL);
}

inline
int L_loadbufferx(const char *buff, size_t sz,
                        const char *name, const char *mode){
    return luaL_loadbufferx(L,buff,sz,name,mode);
}
inline
int L_loadstring(const char *s){
    return luaL_loadstring(L,s);
}

inline
lua_State *L_newstate) (void){
    return luaL_newstate()
}

inline
lua_Integer L_len(int idx){
    return luaL_len(L,idx);
}

inline
const char *L_gsub(const char *s, const char *p,
              const char *r){
    return luaL_gsub(L,s,p,r);
}

inline
void L_setfuncs(const luaL_Reg *l, int nup){
    luaL_setfuncs(L,l,nup);
}

inline
int L_getsubtable(int idx, const char *fname){
    return luaL_getsubtable(L,idx,fname);
}

inline
void L_traceback(lua_State *L1,const char *msg, int level){
    return luaL_traceback(L,L1,msg,level);
}

inline
void L_requiref(const char *modname,
                                 lua_CFunction openf, int glb){
    luaL_requiref(L,modname,openf,glb);
}

/*
** ===============================================================
** some useful macros
** ===============================================================
*/


inline
void L_newlibtabl(const char *name){
    lua_createtable(L,0,sizeof(l)/sizeof((l)[0]) - 1);
}

inline
void L_newlib(const char *l){
  luaL_checkversion(L);
  luaL_newlibtable(L,l);
  luaL_setfuncs(L,l,0);
}

inline
void L_argcheck(int cond,
                    int numarg,
                    const char *extramsg){
    ((void)((cond) || luaL_argerror(L, (numarg), (extramsg))))
}
inline
const char * L_checkstring(){
    return luaL_checklstring(L, (n), NULL);
}
inline
const char * L_optstring ( int arg, const char *def){
    return luaL_optlstring(L, (arg), (d), NULL);
}

inline
const char * L_typename(int idx){
    return lua_typename(L, lua_type(L,(i)));
}

inline
int L_dofile(const char *fn){
  return (luaL_loadfile(L, fn) || lua_pcall(L, 0, LUA_MULTRET, 0));
}

inline
int L_dostring(const char *fn){
  return (luaL_loadstring(L, s) || lua_pcall(L, 0, LUA_MULTRET, 0));
}

inline
int L_getmetatable(const char *fn){
    return (lua_getfield(L, LUA_REGISTRYINDEX, (n)));
}

inline
int 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)

inline
void L_pushmodule(const char *modname,
                                   int sizehint){
    luaL_pushmodule(L,modname,sizehint);
}
inline
void L_openlib(const char *libname,
                                const luaL_Reg *l, int nup){
    return luaL_openlib(L,libname,l,nup);
}

inline
void L_register( const char *n,
                                const luaL_Reg *l){
    (luaL_openlib(L,(n),(l),0));
}

#endif

};
#endif //__cplusplus
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值