#pragma once #include #include #include namespace mbgl { class Scheduler; class Message; class Mailbox : public std::enable_shared_from_this { public: Mailbox(Scheduler&); void push(std::unique_ptr); void close(); void receive(); static void maybeReceive(std::weak_ptr); private: Scheduler& scheduler; std::recursive_mutex receivingMutex; std::mutex pushingMutex; bool closed { false }; std::mutex queueMutex; std::queue> queue; }; } // namespace mbgl