summaryrefslogtreecommitdiff
path: root/platform/node/src/node_thread_pool.hpp
blob: d412e53d3daf4022438fff5da67fb30cc8bff16b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#pragma once

#include <mbgl/actor/scheduler.hpp>

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-parameter"
#pragma GCC diagnostic ignored "-Wshadow"
#include <nan.h>
#pragma GCC diagnostic pop

namespace node_mbgl {

namespace util { template <typename T> class AsyncQueue; }

class NodeThreadPool : public mbgl::Scheduler {
public:
    NodeThreadPool();
    ~NodeThreadPool();

    void schedule(std::weak_ptr<mbgl::Mailbox>) override;

private:
    util::AsyncQueue<std::weak_ptr<mbgl::Mailbox>>* queue;

    class Worker : public Nan::AsyncWorker {
    public:
        Worker(std::weak_ptr<mbgl::Mailbox>);

        void Execute();
        void WorkComplete();

    private:
        std::weak_ptr<mbgl::Mailbox> mailbox;
    };
};

} // namespace node_mbgl