您的位置:首页 > 编程语言 > Lua

Lua53

2015-07-05 23:33 417 查看
简单包装,未测试.如果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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: