Files
MapLibreParticleLab/platform/default/async_task.cpp
2015-12-01 11:49:02 +02:00

54 lines
823 B
C++

#include <mbgl/util/async_task.hpp>
#include <mbgl/util/run_loop.hpp>
#include <mbgl/util/uv.hpp>
#include <atomic>
#include <functional>
namespace mbgl {
namespace util {
class AsyncTask::Impl {
public:
Impl(std::function<void()>&& fn)
: async(reinterpret_cast<uv_loop_t*>(RunLoop::getLoopHandle()), [this] { runTask(); })
, task(std::move(fn)) {
}
void maySend() {
async.send();
}
void runTask() {
task();
}
void unref() {
async.unref();
}
private:
uv::async async;
std::function<void()> task;
};
AsyncTask::AsyncTask(std::function<void()>&& fn)
: impl(std::make_unique<Impl>(std::move(fn))) {
}
AsyncTask::~AsyncTask() {
}
void AsyncTask::send() {
impl->maySend();
}
void AsyncTask::unref() {
impl->unref();
}
}
}