9#ifndef LLDB_HOST_MAINLOOPBASE_H
10#define LLDB_HOST_MAINLOOPBASE_H
14#include "llvm/ADT/DenseMap.h"
15#include "llvm/Support/ErrorHandling.h"
46 using TimePoint = std::chrono::time_point<std::chrono::steady_clock,
47 std::chrono::nanoseconds>;
68 return AddCallback(callback, std::chrono::steady_clock::time_point());
74 return AddCallback(callback, std::chrono::steady_clock::now() + delay);
79 bool AddCallback(
const Callback &callback, TimePoint point);
83 virtual Status Run() { llvm_unreachable(
"Not implemented"); }
static llvm::raw_ostream & error(Stream &strm)
lldb::file_t WaitableHandle
MainLoopBase & m_mainloop
friend class MainLoopBase
IOObject::WaitableHandle m_handle
ReadHandle(const ReadHandle &)=delete
ReadHandle(MainLoopBase &mainloop, IOObject::WaitableHandle handle)
const ReadHandle & operator=(const ReadHandle &)=delete
std::unique_ptr< ReadHandle > ReadHandleUP
virtual void UnregisterReadObject(IOObject::WaitableHandle handle)=0
const MainLoopBase & operator=(const MainLoopBase &)=delete
uint64_t m_callback_sequence
std::chrono::time_point< std::chrono::steady_clock, std::chrono::nanoseconds > TimePoint
std::priority_queue< CallbackEntry > m_callbacks
std::optional< TimePoint > GetNextWakeupTime()
virtual ReadHandleUP RegisterReadObject(const lldb::IOObjectSP &object_sp, const Callback &callback, Status &error)=0
ReadHandleUP CreateReadHandle(const lldb::IOObjectSP &object_sp)
bool AddPendingCallback(const Callback &callback)
virtual ~MainLoopBase()=default
MainLoopBase(const MainLoopBase &)=delete
std::function< void(MainLoopBase &)> Callback
std::mutex m_callback_mutex
virtual bool Interrupt()=0
Interrupt the loop that is currently waiting for events.
virtual void RequestTermination()
bool AddCallback(const Callback &callback, std::chrono::nanoseconds delay)
A class that represents a running process on the host machine.
std::shared_ptr< lldb_private::IOObject > IOObjectSP
CallbackEntry(TimePoint tp, Callback cb, uint64_t seq)
bool operator<(const CallbackEntry &other) const
Sort using the >(!) operator to create a min-priority queue.