diff options
Diffstat (limited to 'source/3rd-party/Luax/luax_vm.cpp')
-rw-r--r-- | source/3rd-party/Luax/luax_vm.cpp | 32 |
1 files changed, 14 insertions, 18 deletions
diff --git a/source/3rd-party/Luax/luax_vm.cpp b/source/3rd-party/Luax/luax_vm.cpp index 549e20b..5e9d1f5 100644 --- a/source/3rd-party/Luax/luax_vm.cpp +++ b/source/3rd-party/Luax/luax_vm.cpp @@ -1,32 +1,39 @@ +#include "luax_internal.h" #include "luax_vm.h" namespace Luax { - LuaxVM::ThreadMap threadMap; // ̲ͨ߳Ϊ˷ + LuaxVM::VMap LuaxVM::VMs; // ̲ͨ߳Ϊ˷ - LuaxVM* LuaxVM::TryGetVM(lua_State* L) + LuaxVM* LuaxVM::TryGetVM(global_State* gState) { - auto it = threadMap.find(L); - if (it != threadMap.end()) + auto it = VMs.find(gState); + if (it != VMs.end()) return it->second; else return nullptr; } + LuaxVM* LuaxVM::TryGetVM(lua_State* state) + { + return TryGetVM(G(state)); + } + LuaxVM::LuaxVM() : mStrongRefTable() , mWeakRefTable() { mMainThread = luaL_newstate(); assert(mMainThread); - mThreads.insert(mMainThread); + mGlobalState = G(mMainThread); - threadMap.insert(std::pair<lua_State*, LuaxVM*>(mMainThread, this)); + VMs.insert(std::pair<global_State*, LuaxVM*>(mGlobalState, this)); } LuaxVM::~LuaxVM() { + VMs.erase(mGlobalState); lua_close(mMainThread); } @@ -34,7 +41,7 @@ namespace Luax void LuaxVM::Setup() { LUAX_STATE(mMainThread); - // ȫñ + mStrongRefTable.Init(state, "_LUAX_STRONGREF_TABLE"); mWeakRefTable.Init(state, "_LUAX_WEAKREF_TABLE", "v"); } @@ -43,7 +50,6 @@ namespace Luax { lua_State* thread = lua_newthread(mMainThread); assert(thread); - mThreads.insert(thread); return thread; } @@ -62,14 +68,4 @@ namespace Luax return mWeakRefTable; } - bool LuaxVM::HasThread(lua_State* L) - { - return mThreads.find(L) != mThreads.end(); - } - - int LuaxVM::GetThreadCount() - { - return mThreads.size(); - } - }
\ No newline at end of file |