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_class.hpp | 34 ++++++++++++++++++++-------------- 1 file changed, 20 insertions(+), 14 deletions(-) (limited to 'Source/3rdParty/Luax/luax_class.hpp') diff --git a/Source/3rdParty/Luax/luax_class.hpp b/Source/3rdParty/Luax/luax_class.hpp index 0d3dc5b..a76d501 100644 --- a/Source/3rdParty/Luax/luax_class.hpp +++ b/Source/3rdParty/Luax/luax_class.hpp @@ -53,7 +53,9 @@ namespace Luax /// /// 将userdata push到栈顶,如果没有初始化mUserdata,初始化设置好元表并把初始化好的userdata留在栈顶。并添加一个引用。 /// - bool PushLuaUserdata(LuaxState& state); + bool PushLuaxUserdata(LuaxState& state); + bool PushLuaxMemberTable(LuaxState& state); + bool PushLuaxRefTable(LuaxState& state); private: @@ -62,15 +64,15 @@ namespace Luax static void RegisterLuaxClass(LuaxState& state); static void RegisterLuaxFactoryClass(LuaxState& state); static void RegisterLuaxSingletonClass(LuaxState& state); - static void RegisterLuaxInterface(LuaxState& state); - static void SetInterfaceTableRef(LuaxState& state, int idx); - static void SetClassTableRef(LuaxState& state, int idx); + static void RegisterLuaxInterface(LuaxState& state); - static void PushInterfaceTable(LuaxState& state); - static void PushClassTable(LuaxState& state); - static void PushRefTable(LuaxState& state); + static void SetLuaxInterfaceTableRef(LuaxState& state, int idx); + static void SetLuaxClassTableRef(LuaxState& state, int idx); + static void PushLuaxInterfaceTable(LuaxState& state); + static void PushLuaxClassTable(LuaxState& state); + /// /// 屏蔽取地址运算符,如果需要地址,只能通过在堆上创建实例得到。在栈上和静态区的变量不能取地址。保证引用计数的准确。如 /// 果需要穿引用,使用引用传递而不是传递地址。 @@ -87,12 +89,16 @@ namespace Luax /// /// 所有LuaxClass类型的实例共享的内容 /// - static LuaxStrongRef mInterfaceTable; // interface table - static LuaxStrongRef mClassTable; // class table - static LuaxStrongRef mRefTable; // 单例 - + static LuaxStrongRef mClassTable; // class table,工厂和单例都有 + static LuaxStrongRef mInterfaceTable; // 如果类是工厂,interface table用来保存类实例化的对象的共有方法 + static LuaxStrongRef mSingletonRefTable; // 如果类是单例,这个用来保存singleton的成员,以保证不会被回收类似普通类的 + // ref table。单例的成员是全生命周期的,所以直接在_LUAX_STRONGREF_TABLE + /// - /// 通过userdata可以拿到ref table\member table\interface table + /// 通过userdata可以拿到: + /// 1: ref table + /// 2: member table + /// 3: interface table /// LuaxWeakRef mUserdata; @@ -113,13 +119,13 @@ namespace Luax LUAX_DECL_METHOD( l_GetClassName ); LUAX_DECL_METHOD( l_GetInterfaceTable ); - LUAX_DECL_METHOD( l_ToString ); + LUAX_DECL_METHOD( l___tostring ); //------------------------------------------------------------------------------------------------------------ // 工厂类相关 LUAX_DECL_METHOD( l_ExtendFactory ); - LUAX_DECL_METHOD( l_GC ); + LUAX_DECL_METHOD( l___gc ); //------------------------------------------------------------------------------------------------------------ // 单例类相关 -- cgit v1.1-26-g67d0