]> git.lizzy.rs Git - dragonfireclient.git/blobdiff - src/script/cpp_api/s_async.cpp
Expose getPointedThing to Lua
[dragonfireclient.git] / src / script / cpp_api / s_async.cpp
index 1fb84fab66e7c83fe19dd8f1a1e7b760ad9c7e21..5cca5fc03778f2b27bc050cb43d8cd51375946d8 100644 (file)
@@ -33,39 +33,32 @@ extern "C" {
 #include "porting.h"
 #include "common/c_internal.h"
 
-/******************************************************************************/
-AsyncEngine::AsyncEngine() :
-       initDone(false),
-       jobIdCounter(0)
-{
-}
-
 /******************************************************************************/
 AsyncEngine::~AsyncEngine()
 {
 
        // Request all threads to stop
        for (std::vector<AsyncWorkerThread *>::iterator it = workerThreads.begin();
-                       it != workerThreads.end(); it++) {
+                       it != workerThreads.end(); ++it) {
                (*it)->stop();
        }
 
 
        // Wake up all threads
        for (std::vector<AsyncWorkerThread *>::iterator it = workerThreads.begin();
-                       it != workerThreads.end(); it++) {
+                       it != workerThreads.end(); ++it) {
                jobQueueCounter.post();
        }
 
        // Wait for threads to finish
        for (std::vector<AsyncWorkerThread *>::iterator it = workerThreads.begin();
-                       it != workerThreads.end(); it++) {
+                       it != workerThreads.end(); ++it) {
                (*it)->wait();
        }
 
        // Force kill all threads
        for (std::vector<AsyncWorkerThread *>::iterator it = workerThreads.begin();
-                       it != workerThreads.end(); it++) {
+                       it != workerThreads.end(); ++it) {
                delete *it;
        }
 
@@ -76,14 +69,9 @@ AsyncEngine::~AsyncEngine()
 }
 
 /******************************************************************************/
-bool AsyncEngine::registerFunction(const char* name, lua_CFunction func)
+void AsyncEngine::registerStateInitializer(StateInitializer func)
 {
-       if (initDone) {
-               return false;
-       }
-
-       functionList[name] = func;
-       return true;
+       stateInitializers.push_back(func);
 }
 
 /******************************************************************************/
@@ -100,7 +88,8 @@ void AsyncEngine::initialize(unsigned int numEngines)
 }
 
 /******************************************************************************/
-unsigned int AsyncEngine::queueAsyncJob(std::string func, std::string params)
+unsigned int AsyncEngine::queueAsyncJob(const std::string &func,
+               const std::string &params)
 {
        jobQueueMutex.lock();
        LuaJobInfo toAdd;
@@ -124,7 +113,6 @@ LuaJobInfo AsyncEngine::getJob()
        jobQueueMutex.lock();
 
        LuaJobInfo retval;
-       retval.valid = false;
 
        if (!jobQueue.empty()) {
                retval = jobQueue.front();
@@ -137,7 +125,7 @@ LuaJobInfo AsyncEngine::getJob()
 }
 
 /******************************************************************************/
-void AsyncEngine::putJobResult(LuaJobInfo result)
+void AsyncEngine::putJobResult(const LuaJobInfo &result)
 {
        resultQueueMutex.lock();
        resultQueue.push_back(result);
@@ -204,11 +192,9 @@ void AsyncEngine::pushFinishedJobs(lua_State* L) {
 /******************************************************************************/
 void AsyncEngine::prepareEnvironment(lua_State* L, int top)
 {
-       for (UNORDERED_MAP<std::string, lua_CFunction>::iterator it = functionList.begin();
-                       it != functionList.end(); it++) {
-               lua_pushstring(L, it->first.c_str());
-               lua_pushcfunction(L, it->second);
-               lua_settable(L, top);
+       for (std::vector<StateInitializer>::iterator it = stateInitializers.begin();
+                       it != stateInitializers.end(); it++) {
+               (*it)(L, top);
        }
 }
 
@@ -264,7 +250,7 @@ void* AsyncWorkerThread::run()
                // Wait for job
                LuaJobInfo toProcess = jobDispatcher->getJob();
 
-               if (toProcess.valid == false || stopRequested()) {
+               if (!toProcess.valid || stopRequested()) {
                        continue;
                }