summaryrefslogtreecommitdiff
path: root/source/3rd-party/Luax/luax_vm.cpp
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2019-03-29 08:56:55 +0800
committerchai <chaifix@163.com>2019-03-29 08:56:55 +0800
commit62085e1b49ce2d8a630373e410812d5c4a9eecc2 (patch)
tree5b221e36ff35348aaedc041a2a0513f1d0390ecf /source/3rd-party/Luax/luax_vm.cpp
parentf4c338c63f3456a8eccd56c35e233843687d55be (diff)
*luax
Diffstat (limited to 'source/3rd-party/Luax/luax_vm.cpp')
-rw-r--r--source/3rd-party/Luax/luax_vm.cpp62
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