From 6016ece202eef94ed76bd20d4f7879ccc71cc2e6 Mon Sep 17 00:00:00 2001 From: chai Date: Tue, 12 Mar 2019 23:08:31 +0800 Subject: *luax --- Source/3rdParty/Luax/luax_state.h | 41 ++++++++++++++++++++++++++------------- 1 file changed, 28 insertions(+), 13 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 52b8f38..6a688b6 100644 --- a/Source/3rdParty/Luax/luax_state.h +++ b/Source/3rdParty/Luax/luax_state.h @@ -4,33 +4,37 @@ #include #include "lua.hpp" +#include "luax_reftable.h" #include "luax_config.h" namespace Luax { + class Context; class LuaxClass; /// /// 对lua_State的代理,除了保存一个lua_State的引用不保存其他内容。一个实例的metatable如下: - /// interface table - /// member table - /// ref table - /// userdata + /// interface table + /// member table + /// ref table + /// userdata /// 从userdata通过getmetatable获取上级metatable。除此之外还有一个class table注册在对应的名称空间里。 /// LUAX_API class LuaxState { public: - LuaxState(lua_State* state); - ~LuaxState(); - operator lua_State*(); operator bool(); lua_State* operator ->(); lua_State& operator *(); - + + /// + /// 获取绑定的lua_State + /// + lua_State* GetHandle(); + //------------------------------------------------------------------------------------------------------------ void OpenLibs(); @@ -82,7 +86,7 @@ namespace Luax bool HasField(int idx, int name, int type); bool HasKeys(int idx); - void Push(); + void PushNil(); void Push(bool value); void Push(cc8* value); void Push(double value); @@ -103,6 +107,13 @@ namespace Luax void Pop(int n = 1); + void Settop(int idx); + + //------------------------------------------------------------------------------------------------------------ + // 对引用的管理,包含register[LUAX_STRONG_REFTABLE]和register[LUAX_WEAK_REFTABLE] + + void Ref(); + //------------------------------------------------------------------------------------------------------------ template T GetValue(int idx, T default_value); @@ -121,17 +132,21 @@ namespace Luax /// /// 注册工厂,适用于普通类,有New方法 /// - template - void RegisterFactory(); + template void RegisterFactory(); /// /// 注册单例,没有New方法 /// - template - void RegisterSingleton(); + template void RegisterSingleton(); private: + friend class Context; + + LuaxState(lua_State* state); + LuaxState(const LuaxState& state); + ~LuaxState(); + /// /// 屏蔽对LuaxState的地址相关操作 /// -- cgit v1.1-26-g67d0