summaryrefslogtreecommitdiff
path: root/src/LuaTask.cc
diff options
context:
space:
mode:
authorPixel <pixel@nobis-crew.org>2012-04-01 12:41:16 -0700
committerPixel <pixel@nobis-crew.org>2012-04-01 12:41:16 -0700
commita4634497c8ada51755249606d8dc4b4c2761c017 (patch)
tree17a969a5f6d4b2be63f8a4a2654445439fc6db41 /src/LuaTask.cc
parent1fdf750ee66ee9e4e872d2810e9ca3bcfa2d555e (diff)
Creating first pass on LuaTasks.
Diffstat (limited to 'src/LuaTask.cc')
-rw-r--r--src/LuaTask.cc46
1 files changed, 46 insertions, 0 deletions
diff --git a/src/LuaTask.cc b/src/LuaTask.cc
new file mode 100644
index 0000000..754de6f
--- /dev/null
+++ b/src/LuaTask.cc
@@ -0,0 +1,46 @@
+#include "LuaTask.h"
+#include "Main.h"
+#include "TaskMan.h"
+
+void Balau::LuaMainTask::exec(LuaExecCell * cell) {
+ m_queue.push(cell);
+ m_queueEvent.trigger();
+}
+
+void Balau::LuaMainTask::stop() {
+ Atomic::CmpXChgVal(&m_stopping, true, false);
+ m_queueEvent.trigger();
+}
+
+void Balau::LuaMainTask::Do() {
+ while (!m_stopping) {
+ waitFor(&m_queueEvent);
+
+ LuaExecCell * cell;
+ while ((cell = m_queue.pop(false))) {
+ createTask(new LuaTask(L.thread(), cell));
+ }
+
+ yield();
+ }
+}
+
+void Balau::LuaTask::Do() {
+ m_cell->run(L);
+ if (m_cell->m_detached)
+ delete m_cell;
+ else
+ m_cell->m_event.trigger();
+}
+
+void Balau::LuaExecCell::exec(LuaMainTask * mainTask) {
+ if (!m_detached)
+ Task::prepare(&m_event);
+ mainTask->exec(this);
+ if (!m_detached)
+ Task::yield(&m_event);
+}
+
+void Balau::LuaExecString::run(Lua & L) {
+ L.load(m_str);
+}