aboutsummaryrefslogtreecommitdiff
path: root/src/libjin-lua/modules/thread/je_lua_thread.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/libjin-lua/modules/thread/je_lua_thread.cpp')
-rw-r--r--src/libjin-lua/modules/thread/je_lua_thread.cpp240
1 files changed, 0 insertions, 240 deletions
diff --git a/src/libjin-lua/modules/thread/je_lua_thread.cpp b/src/libjin-lua/modules/thread/je_lua_thread.cpp
deleted file mode 100644
index 2af3e53..0000000
--- a/src/libjin-lua/modules/thread/je_lua_thread.cpp
+++ /dev/null
@@ -1,240 +0,0 @@
-#include "common/je_lua_object.h"
-
-#include "libjin/jin.h"
-#include "libjin-lua/je_lua_jin.h"
-#include "common/je_lua_common.h"
-#include "je_lua_thread.h"
-
-namespace JinEngine
-{
- namespace Lua
- {
-
- const char* Jin_Lua_Thread = "Thread";
-
- int luaopen_thread(lua_State* L);
-
- static inline Thread* checkThread(lua_State* L)
- {
- LuaObject* luaObj = (LuaObject*)luax_checktype(L, 1, Jin_Lua_Thread);
- return luaObj->getObject<Thread>();
- }
-
- LUA_IMPLEMENT int threadRunner(void* t)
- {
- Shared* shared = (Shared*)t;
- Thread* thread = shared->getObject<Thread>();
- lua_State* L = lua_open();
- luax_openlibs(L);
- open(L);
- luax_getglobal(L, MODULE_NAME);
- LuaObject* luaObj = luax_newinstance(L, Jin_Lua_Thread, shared);
- luax_setfield(L, -2, "_curThread");
- luax_dostring(L, thread->code.c_str());
- luax_close(L);
- return 0;
- }
-
- LUA_IMPLEMENT int l_thread_gc(lua_State* L)
- {
- LuaObject* luaObj = (LuaObject*)luax_checktype(L, 1, Jin_Lua_Thread);
- luaObj->release();
- return 0;
- }
-
- LUA_IMPLEMENT int l_start(lua_State* L)
- {
- Thread* shared = checkThread(L);
- bool result = shared->start(&shared);
- luax_pushboolean(L, result);
- return 1;
- }
-
- LUA_IMPLEMENT int l_wait(lua_State* L)
- {
- Thread* shared = checkThread(L);
- shared->wait();
- return 0;
- }
-
- LUA_IMPLEMENT int l_send(lua_State* L)
- {
- Thread* shared = checkThread(L);
- int slot = luax_checkinteger(L, 2);
- const int vp = 3;
- if (luax_isnumberstrict(L, vp))
- {
- float real = luax_checknumber(L, vp);
- shared->send(slot, real);
- }
- else if (luax_isbooleanstrict(L, vp))
- {
- bool bol = luax_checkbool(L, vp);
- shared->send(slot, bol);
- }
- else if (luax_isstringstrict(L, vp))
- {
- const char* str = luax_checkstring(L, vp);
- shared->send(slot, str);
- }
- else if (luax_isuserdata(L, vp))
- {
- LuaObject* luaObj = (LuaObject*)luax_touserdata(L, vp);
- shared->send(slot, luaObj);
- }/*
- else if (luax_islightuserdata(L, vp))
- {
- void* p = luax_tolightuserdata(L, vp);
- shared->send(slot, p);
- }*/
- return 0;
- }
-
- LUA_IMPLEMENT int l_receive(lua_State* L)
- {
- Thread* shared = checkThread(L);
- int slot = luax_checkinteger(L, 2);
- bool result = shared->receive(slot);
- luax_pushboolean(L, result);
- return 1;
- }
-
- LUA_IMPLEMENT int l_fetch(lua_State* L)
- {
- Thread* shared = checkThread(L);
- int slot = luax_checkinteger(L, 2);
- Thread::Variant v = shared->fetch(slot);
- switch (v.type)
- {
- case Thread::Variant::INTERGER:
- luax_pushinteger(L, v.integer);
- break;
-
- case Thread::Variant::BOOLEAN:
- luax_pushboolean(L, v.boolean);
- break;
-
- case Thread::Variant::CSTRING:
- luax_pushstring(L, v.cstring);
- break;
-
- case Thread::Variant::REAL:
- luax_pushnumber(L, v.real);
- break;
-
- case Thread::Variant::POINTER:
- LuaObject* p = (LuaObject*)v.pointer;
- // Create lua object from other lua_State.
- LuaObject* luaObj = luax_copyinstance(L, p);
- break;
-
- }
- return 1;
- }
-
- LUA_IMPLEMENT int l_demand(lua_State* L)
- {
- Thread* shared = checkThread(L);
- int slot = luax_checkinteger(L, 2);
- Thread::Variant v = shared->demand(slot);
- switch (v.type)
- {
- case Thread::Variant::INTERGER:
- luax_pushinteger(L, v.integer);
- break;
-
- case Thread::Variant::BOOLEAN:
- luax_pushboolean(L, v.boolean);
- break;
-
- case Thread::Variant::CSTRING:
- luax_pushstring(L, v.cstring);
- break;
-
- case Thread::Variant::REAL:
- luax_pushnumber(L, v.real);
- break;
-
- case Thread::Variant::POINTER:
- LuaObject* p = (LuaObject*)v.pointer;
- // Create lua object from other lua_State.
- LuaObject* luaObj = luax_copyinstance(L, p);
- break;
-
- }
- return 1;
- }
-
- LUA_IMPLEMENT int l_remove(lua_State* L)
- {
- Thread* shared = checkThread(L);
- int slot = luax_checkinteger(L, 2);
- shared->remove(slot);
- return 0;
- }
-
- LUA_IMPLEMENT int l_getName(lua_State* L)
- {
- Thread* shared = checkThread(L);
- const char* name = shared->getName();
- luax_pushstring(L, name);
- return 1;
- }
-
- LUA_IMPLEMENT int l_isRunning(lua_State* L)
- {
- Thread* shared = checkThread(L);
- bool running = shared->isRunning();
- luax_pushboolean(L, running);
- return 1;
- }
-
- LUA_IMPLEMENT int luaopen_Thread(lua_State* L)
- {
- luaL_Reg thread_function[] = {
- { "__gc", l_thread_gc },
- { "start", l_start },
- { "wait", l_wait },
- { "send", l_send },
- { "receive", l_receive },
- { "fetch", l_fetch },
- { "demand", l_demand },
- { "remove", l_remove },
- { "getName", l_getName },
- { "isRunning", l_isRunning },
- { 0, 0 }
- };
- luax_newtype(L, Jin_Lua_Thread, thread_function);
- return 0;
- }
-
- LUA_IMPLEMENT int l_newThread(lua_State* L)
- {
- const char* name = luax_checkstring(L, 1);
- const char* code = luax_checkstring(L, 2);
- Thread* thread = new Thread(name, code, threadRunner);
- LuaObject* luaObj = luax_newinstance(L, Jin_Lua_Thread, new Shared(thread));
- return 1;
- }
-
- LUA_IMPLEMENT int l_getThread(lua_State* L)
- {
- luax_getglobal(L, MODULE_NAME);
- luax_getfield(L, -1, "_curThread");
- return 1;
- }
-
- LUA_EXPORT int luaopen_thread(lua_State* L)
- {
- luaopen_Thread(L);
- luaL_Reg methods[] = {
- { "newThread", l_newThread },
- { "getThread", l_getThread },
- { 0, 0 }
- };
- luax_newlib(L, methods);
- return 1;
- }
-
- } // namespace Lua
-} // namespace JinEngine \ No newline at end of file