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
相关文章推荐
- Lintcode - Expression Evaluation
- tolua++实现分析
- Lua脚本语法说明(转)
- Lua的特点
- Lua学习
- HDU 1202 The cacluation of GPA
- 图像检索评估准则——Evaluation Criteria of Image Retrieval : Retrieval Accuracy
- 【本·伍德Lua专栏】补充的基础06:简单的错误处理
- notepad++ 查找引用(Find Reference)(适用于c c++及各类脚本比如lua、python等)
- tolua 有些功能可以用(经过测试)
- Lua的线程和状态
- luasocket系列之winsocket基础补充—winsock库1
- Ngx_Lua使用分享
- ngx映射到lua模块函数变量一览
- Lua移植到arm上 并实现在arm上 可以让lua脚本调c语言,C语言调用lua脚本
- Weka开发[3]-Evaluation类
- Lua与C的交互
- Lua基本语法
- lua程序设计下载
- lua库