diff options
author | chai <chaifix@163.com> | 2020-11-15 11:56:49 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2020-11-15 11:56:49 +0800 |
commit | 7270cd95294d53180641b05784258df1e29f90d2 (patch) | |
tree | 171554d5caed0adea988c785d3714d08595ba1f3 /Runtime/Scripting/LuaBindClass.hpp | |
parent | d2e4b2839bc7ce874370ff4c52dcfdadf666ff52 (diff) |
*lua BindToLua
Diffstat (limited to 'Runtime/Scripting/LuaBindClass.hpp')
-rw-r--r-- | Runtime/Scripting/LuaBindClass.hpp | 78 |
1 files changed, 39 insertions, 39 deletions
diff --git a/Runtime/Scripting/LuaBindClass.hpp b/Runtime/Scripting/LuaBindClass.hpp index c7cfca5..90c421d 100644 --- a/Runtime/Scripting/LuaBindClass.hpp +++ b/Runtime/Scripting/LuaBindClass.hpp @@ -18,33 +18,33 @@ namespace LuaBind { - class LuaBindVM; + class VM; /// /// 虚基类,为了实现多态。需要访问下面这些接口的外部基类需要虚继承此类,之后再派生链中就会 - /// 调用对应实体的方法。注意继承此类时不能实现下面的方法,实现在LuaBindNativeClass中,实现会 + /// 调用对应实体的方法。注意继承此类时不能实现下面的方法,实现在NativeClass中,实现会 /// 导致二义性。 /// /// 依据Effective C++条款40,如果在必须使用virtual base基类情况下,应该尽可能避免向其中放 /// 置数据成员,规避数据成员初始化造成的一些隐性问题。依据这一点,vpb基类更加接近C#和Java中 /// 的Interface。所以,在这里把类用I开头标识这是一个接口。 /// - class LuaBindObject + class Object { public: - LuaBindObject() {}; - virtual ~LuaBindObject() {}; + Object() {}; + virtual ~Object() {}; /// /// 成员引用管理,在实例的ref table里。设置、取、清除。 /// - virtual bool PushLuaBindMemberRef(LuaBindState& state, int refID) = 0; - virtual bool PushLuaBindUserdata(LuaBindState& state) = 0; - virtual bool PushLuaBindMemberTable(LuaBindState& state) = 0; - virtual bool PushLuaBindRefTable(LuaBindState& state) = 0; + virtual bool PushMemberRef(State& state, int refID) = 0; + virtual bool PushUserdata(State& state) = 0; + virtual bool PushMemberTable(State& state) = 0; + virtual bool PushRefTable(State& state) = 0; /// - /// 被LuaBindNativeClass实现。保持和释放native资源。 + /// 被NativeClass实现。保持和释放native资源。 /// virtual void Retain() = 0; virtual void Release() = 0; @@ -52,7 +52,7 @@ namespace LuaBind }; // TODO: 将公共部分提取出来,不要重复生成代码 - //class LuaBindNativeClassBase + //class NativeClassBase //{ //} @@ -60,8 +60,8 @@ namespace LuaBind /// 需要暴露给lua的native class需要继承此类。通过lua管理的实例要确保引用计数的正确性,在多个线程中需要确 /// 定不会误释放。 /// - template<class TYPE, class BASE = LuaBindObject> - class LuaBindNativeClass : public BASE + template<class TYPE, class BASE = Object> + class NativeClass : public BASE { public: @@ -70,24 +70,24 @@ namespace LuaBind /// 相比较member ref,这个用在实体会被多次被不同其他实体引用的情况,并频繁销毁这些实体, /// 避免lua频繁的调用gc检测。 /// - template<class DATATYPE> void LuaBindRetain(LuaBindState& state, DATATYPE* userdata); + template<class DATATYPE> void Retain(State& state, DATATYPE* userdata); /// /// 对userdata减少一个引用在ref table里,以尝试回收userdata。 /// - template<class DATATYPE> void LuaBindRelease(LuaBindState& state, DATATYPE* userdata); + template<class DATATYPE> void Release(State& state, DATATYPE* userdata); /// /// 将userdata push到栈顶,如果没有初始化mUserdata,初始化设置好元表并把初始化好的 /// userdata留在栈顶。并添加一个引用。这是一个将native对象所有权移交给lua控制的方法。 /// - bool PushLuaBindMemberRef(LuaBindState& state, int refID) override; - bool PushLuaBindUserdata(LuaBindState& state) override; - bool PushLuaBindMemberTable(LuaBindState& state) override; - bool PushLuaBindRefTable(LuaBindState& state) override; + bool PushMemberRef(State& state, int refID) override; + bool PushUserdata(State& state) override; + bool PushMemberTable(State& state) override; + bool PushRefTable(State& state) override; /// - /// Watch dog 添加一个native引用。luaVM引用不会提供外部接口。继承此类的派生类不能直接使用 + /// WatchDog添加一个native引用。luaVM引用不会提供外部接口。继承此类的派生类不能直接使用 /// delete方法,应该使用Release释放。一般情况下这个操作由虚拟机__gc进行,但是允许用户 /// 程序在native中隔绝虚拟机情况下释放,这种情况下要使用Release。 /// @@ -103,31 +103,31 @@ namespace LuaBind protected: - LuaBindNativeClass(); - virtual ~LuaBindNativeClass(); + NativeClass(); + virtual ~NativeClass(); /// /// 成员引用管理,在实例的ref table里。设置、取、清除 /// - void SetLuaBindMemberRef(LuaBindState& state, LuaBindMemberRef& memRef, int idx); - bool PushLuaBindMemberRef(LuaBindState& state, LuaBindMemberRef& memRef); - void ClearLuaBindMemberRef(LuaBindState& state, LuaBindMemberRef& memRef); + void SetMemberRef(State& state, MemberRef& memRef, int idx); + bool PushMemberRef(State& state, MemberRef& memRef); + void ClearMemberRef(State& state, MemberRef& memRef); private: - friend class LuaBindState; + friend class State; - static void RegisterLuaBindClassShared(LuaBindState& state); - static void RegisterLuaBindFactoryClass(LuaBindState& state); - static void RegisterLuaBindSingletonClass(LuaBindState& state); + static void RegisterClassShared(State& state); + static void RegisterFactoryClass(State& state); + static void RegisterSingletonClass(State& state); - static void SetLuaBindClassTableRef(LuaBindState& state, int idx); - static void PushLuaBindClassTable(LuaBindState& state); + static void SetClassTableRef(State& state, int idx); + static void PushClassTable(State& state); /// /// 创建userdata,绑定实例到state。 /// - void BindToLua(LuaBindState& state); + void BindToLua(State& state); //------------------------------------------------------------------------------// @@ -151,15 +151,15 @@ namespace LuaBind /// /// class table,工厂和单例都有。 /// - static LuaBindStrongRef mClassTable; + static StrongRef mClassTable; /// /// 如果类是单例,这个用来保存singleton的引用关系,以保证不会被回收类似普通类的ref table。 /// 单例的成员是全生命周期的,所以直接在_LUA_BIND_STRONGREF_TABLE。单例对userdata进行 - /// LuaBindRetain\LuaBindRelease和member ref操作时和工厂实例不同,是存在下面这个ref table里 + /// Retain\Release和member ref操作时和工厂实例不同,是存在下面这个ref table里 /// 的,这个table在_LUA_BIND_STRONGREF_TABLE里。 /// - static LuaBindStrongRef mSingletonRefTable; + static StrongRef mSingletonRefTable; /// /// 通过userdata可以拿到: @@ -167,14 +167,14 @@ namespace LuaBind /// 2: member table /// 3: class table /// - LuaBindWeakRef mUserdata; + WeakRef mUserdata; /// 通过后才能删除 - LuaBindWatchDog mWatchDog; + WatchDog mWatchDog; #if LUA_BIND_PROFILER // 托管此对象的虚拟机 - std::unordered_set<LuaBindVM*> mRefVMs; + std::unordered_set<VM*> mRefVMs; // 保险,此类的派生类不能在外部使用delete直接删除,而应该使用Release bool mSafer; #endif @@ -185,7 +185,7 @@ namespace LuaBind /// /// 纯lua类 /// - class LuaBindPlainClass + class PlainClass { public: |