From 1ab2501db0f9e14f138292880e37120e7a6184de Mon Sep 17 00:00:00 2001 From: chai Date: Sat, 16 Mar 2019 13:03:50 +0800 Subject: *luax --- Source/3rdParty/Luax/luax_state.h | 39 +++++++++++++++++++++++++++++++-------- 1 file changed, 31 insertions(+), 8 deletions(-) (limited to 'Source/3rdParty/Luax/luax_state.h') diff --git a/Source/3rdParty/Luax/luax_state.h b/Source/3rdParty/Luax/luax_state.h index 166ac26..a936ea6 100644 --- a/Source/3rdParty/Luax/luax_state.h +++ b/Source/3rdParty/Luax/luax_state.h @@ -9,7 +9,7 @@ namespace Luax { - class Context; + class LuaxContext; class LuaxEnum; class LuaxStrongRef; class LuaxWeakRef; @@ -43,11 +43,14 @@ namespace Luax //------------------------------------------------------------------------------------------------------------ // 名称空间管理,名称空间就是一个表,_G是最上面的表 + void PushGlobalNamespace(); void PushNamespace(cc8* name); void PopNamespace(); - + bool IsNamespace(int idx); + //------------------------------------------------------------------------------------------------------------ + void SetTop(int top); int GetTop(); bool CheckParams(int idx, cc8* format); int AbsIndex(int idx); @@ -55,11 +58,6 @@ namespace Luax //------------------------------------------------------------------------------------------------------------ - /// - /// 注册C函数,注意后面加一行{0, 0} - /// - void RegisterMethods(const luaL_Reg *l); - void GetField(int idx, cc8* name); void GetField(int idx, int key); std::string GetField(int idx, cc8* key, cc8* value); @@ -126,6 +124,7 @@ namespace Luax void DoFile(const std::string& file); //------------------------------------------------------------------------------------------------------------ + // 注册方法 /// /// 注册工厂,适用于普通类,有New方法 @@ -142,9 +141,33 @@ namespace Luax /// void RegisterEnum(cc8* name, LuaxEnum* enums); + /// + /// 注册C函数,注意后面加一行{0, 0} + /// + void RegisterMethods(const luaL_Reg *l); + + /// + /// 注册单个C函数 + /// + void RegisterMethod(cc8* fname, lua_CFunction func); + + /// + /// 把preloader加到package.preload里,当require"libname"时lua的loader_preload根据libname找到preloader直接加载。 + /// 用来实现需要require的时候才加载,并且加载过一次后package.loaded记录下来,下次不会再加载。通过require会调用这个 + /// preloader。 + /// + void RegisterPreloader(cc8* libname, lua_CFunction preloader); + + /// + /// 根据luaL_Reg建立lib table,并在_G和package.loaded建立对libname的索引,指向lib table。 + /// + void RegisterLib(cc8* libname, const luaL_Reg* l); + + //------------------------------------------------------------------------------------------------------------ + private: - friend class Context; + friend class LuaxContext; LuaxState(lua_State* state); LuaxState(const LuaxState& state); -- cgit v1.1-26-g67d0