[core] Remove mbgl/util/uv.hpp
Now only a few things depend on libuv and they can use it directly.
This commit is contained in:
@@ -1,35 +1,62 @@
|
||||
#include <mbgl/util/async_task.hpp>
|
||||
|
||||
#include <mbgl/util/run_loop.hpp>
|
||||
#include <mbgl/util/uv.hpp>
|
||||
|
||||
#include <atomic>
|
||||
#include <functional>
|
||||
|
||||
#include <uv.h>
|
||||
|
||||
#if UV_VERSION_MAJOR == 0 && UV_VERSION_MINOR <= 10
|
||||
#define UV_ASYNC_PARAMS(handle) uv_async_t *handle, int
|
||||
#else
|
||||
#define UV_ASYNC_PARAMS(handle) uv_async_t *handle
|
||||
#endif
|
||||
|
||||
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)) {
|
||||
: async(new uv_async_t),
|
||||
task(std::move(fn)) {
|
||||
|
||||
uv_loop_t* loop = reinterpret_cast<uv_loop_t*>(RunLoop::getLoopHandle());
|
||||
if (uv_async_init(loop, async, asyncCallback) != 0) {
|
||||
throw std::runtime_error("Failed to initialize async.");
|
||||
}
|
||||
|
||||
handle()->data = this;
|
||||
}
|
||||
|
||||
~Impl() {
|
||||
uv_close(handle(), [](uv_handle_t* h) {
|
||||
delete reinterpret_cast<uv_async_t*>(h);
|
||||
});
|
||||
}
|
||||
|
||||
void maySend() {
|
||||
async.send();
|
||||
}
|
||||
|
||||
void runTask() {
|
||||
task();
|
||||
// uv_async_send will do the call coalescing for us.
|
||||
if (uv_async_send(async) != 0) {
|
||||
throw std::runtime_error("Failed to async send.");
|
||||
}
|
||||
}
|
||||
|
||||
void unref() {
|
||||
async.unref();
|
||||
uv_unref(handle());
|
||||
}
|
||||
|
||||
private:
|
||||
uv::async async;
|
||||
static void asyncCallback(UV_ASYNC_PARAMS(handle)) {
|
||||
reinterpret_cast<Impl*>(handle->data)->task();
|
||||
}
|
||||
|
||||
uv_handle_t* handle() {
|
||||
return reinterpret_cast<uv_handle_t*>(async);
|
||||
}
|
||||
|
||||
uv_async_t* async;
|
||||
|
||||
std::function<void()> task;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user