54 std::optional<EventHandler> getHandler(
EventTypes type,
void *target)
const;
55 uint32_t saveEvent(
Event &&event);
56 Event removeEvent(uint32_t eventID);
57 bool hasTimerExpired(
Event &event);
58 double getNextTimerTimeout()
const;
59 void addEventToBuffer(
Event &&event);
79 Timer &operator-=(
double);
81 operator double()
const;
83 bool isOneShot()
const;
85 void *getTarget()
const;
96 using Timers = std::set<EventQueueTimer *>;
98 using EventTable = std::map<uint32_t, Event>;
99 using EventIDList = std::vector<uint32_t>;
100 using TypeHandlerTable = std::map<EventTypes, EventHandler>;
101 using HandlerTable = std::map<void *, TypeHandlerTable>;
103 int m_systemTarget = 0;
104 mutable std::mutex m_mutex;
107 std::unique_ptr<IEventQueueBuffer> m_buffer;
111 EventIDList m_oldEventIDs;
116 TimerQueue m_timerQueue;
117 TimerEvent m_timerEvent;
120 HandlerTable m_handlers;
122 Mutex *m_readyMutex =
nullptr;
124 std::queue<Event> m_pending;
static fd_set FAR fd_set FAR fd_set FAR const struct timeval FAR * timeout
Definition ArchNetworkWinsock.cpp:40
static int type
Definition ArchNetworkWinsock.cpp:45
Condition variable.
Definition CondVar.h:121
Definition EventQueueTimer.h:12
void addEvent(Event &&event) override
Add event to queue.
Definition EventQueue.cpp:181
void addHandler(EventTypes type, void *target, const EventHandler &handler) override
Register an event handler for an event type.
Definition EventQueue.cpp:268
EventQueueTimer * newOneShotTimer(double duration, void *target) override
Create a one-shot timer.
Definition EventQueue.cpp:236
bool getEvent(Event &event, double timeout=-1.0) override
Remove event from queue.
Definition EventQueue.cpp:161
void removeHandler(EventTypes type, void *target) override
Unregister an event handler for an event type.
Definition EventQueue.cpp:274
EventQueue & operator=(EventQueue &&)=delete
EventQueue(EventQueue const &)=delete
EventQueue(EventQueue &&)=delete
void deleteTimer(EventQueueTimer *) override
Destroy a timer.
Definition EventQueue.cpp:253
void removeHandlers(void *target) override
Unregister all event handlers for an event target.
Definition EventQueue.cpp:289
EventQueueTimer * newTimer(double duration, void *target) override
Create a recurring timer.
Definition EventQueue.cpp:219
bool dispatchEvent(const Event &event) override
Dispatch an event.
Definition EventQueue.cpp:167
~EventQueue() override
Definition EventQueue.cpp:39
void * getSystemTarget() override
Get the system event type target.
Definition EventQueue.cpp:401
void adoptBuffer(IEventQueueBuffer *) override
Set the buffer.
Definition EventQueue.cpp:78
EventQueue()
Definition EventQueue.cpp:32
int loop() override
Loop the event queue until quit.
Definition EventQueue.cpp:48
EventQueue & operator=(EventQueue const &)=delete
void waitForReady() const override
Wait for event queue to become ready.
Definition EventQueue.cpp:407
Event.
Definition Event.h:43
Event queue buffer interface.
Definition IEventQueueBuffer.h:22
Definition IEventQueue.h:35
Event queue interface.
Definition IEventQueue.h:29
std::function< void(const Event &)> EventHandler
Definition IEventQueue.h:31
Mutual exclusion.
Definition Mutex.h:22
A priority queue with an iterator.
Definition PriorityQueue.h:27
A timer class.
Definition Stopwatch.h:16
EventTypes
Definition EventTypes.h:13