#pragma once #include "jni.hpp" #include #include #include #include #include #include #include struct ALooper; namespace mbgl { namespace util { class Alarm; class RunLoop::Impl { public: class Runnable { public: virtual ~Runnable() = default; virtual void runTask() = 0; virtual TimePoint dueTime() const = 0; std::list::iterator iter; }; Impl(RunLoop*, RunLoop::Type); ~Impl(); void wake(); void addRunnable(Runnable*); void removeRunnable(Runnable*); void initRunnable(Runnable*); Milliseconds processRunnables(); ALooper* loop = nullptr; RunLoop* runLoop = nullptr; std::atomic running; private: friend RunLoop; int fds[2]; JNIEnv *env = nullptr; bool detach = false; std::unique_ptr> alarm; std::recursive_mutex mtx; std::list runnables; std::list::iterator nextRunnable; }; } // namespace util } // namespace mbgl