diff options
author | chai <chaifix@163.com> | 2019-03-29 08:56:55 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2019-03-29 08:56:55 +0800 |
commit | 62085e1b49ce2d8a630373e410812d5c4a9eecc2 (patch) | |
tree | 5b221e36ff35348aaedc041a2a0513f1d0390ecf /source/3rd-party/Luax/luax_vm.cpp | |
parent | f4c338c63f3456a8eccd56c35e233843687d55be (diff) |
*luax
Diffstat (limited to 'source/3rd-party/Luax/luax_vm.cpp')
-rw-r--r-- | source/3rd-party/Luax/luax_vm.cpp | 62 |
1 files changed, 54 insertions, 8 deletions
diff --git a/source/3rd-party/Luax/luax_vm.cpp b/source/3rd-party/Luax/luax_vm.cpp index 4257b4d..549e20b 100644 --- a/source/3rd-party/Luax/luax_vm.cpp +++ b/source/3rd-party/Luax/luax_vm.cpp @@ -3,27 +3,73 @@ namespace Luax { - LuaxVM::LuaxVM(lua_State* L) - : state(L) + LuaxVM::ThreadMap threadMap; // ̲ͨ߳Ϊ˷ + + LuaxVM* LuaxVM::TryGetVM(lua_State* L) { - assert(state); + auto it = threadMap.find(L); + if (it != threadMap.end()) + return it->second; + else + return nullptr; + } + + LuaxVM::LuaxVM() + : mStrongRefTable() + , mWeakRefTable() + { + mMainThread = luaL_newstate(); + assert(mMainThread); + mThreads.insert(mMainThread); + + threadMap.insert(std::pair<lua_State*, LuaxVM*>(mMainThread, this)); } LuaxVM::~LuaxVM() { + lua_close(mMainThread); } // ʼcontext void LuaxVM::Setup() { - SetupRefTables(); + LUAX_STATE(mMainThread); + // ȫñ + mStrongRefTable.Init(state, "_LUAX_STRONGREF_TABLE"); + mWeakRefTable.Init(state, "_LUAX_WEAKREF_TABLE", "v"); + } + + lua_State* LuaxVM::CreateThread() + { + lua_State* thread = lua_newthread(mMainThread); + assert(thread); + mThreads.insert(thread); + return thread; + } + + lua_State* LuaxVM::GetMainThread() + { + return mMainThread; + } + + LuaxRefTable& LuaxVM::GetStrongRefTable() + { + return mStrongRefTable; + } + + LuaxRefTable& LuaxVM::GetWeakRefTable() + { + return mWeakRefTable; + } + + bool LuaxVM::HasThread(lua_State* L) + { + return mThreads.find(L) != mThreads.end(); } - void LuaxVM::SetupRefTables() + int LuaxVM::GetThreadCount() { - // strong ref weak ref - strongRefTable.Init(state, "_LUAX_STRONGREF_TABLE"); - weakRefTable.Init(state, "_LUAX_WEAKREF_TABLE", "v"); + return mThreads.size(); } }
\ No newline at end of file |