MayaFlux 0.2.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches
EventSource.cpp
Go to the documentation of this file.
1#include "EventSource.hpp"
2
4
5namespace MayaFlux::Vruta {
6
8{
10 m_pending_events.push(event);
11 return;
12 }
13
14 m_pending_events.push(event);
15
16 auto waiters = m_waiters;
17 for (auto* awaiter : waiters) {
18 awaiter->try_resume();
19 }
20}
21
23{
24 return Kriya::EventAwaiter { *this, std::nullopt };
25}
26
31
32std::optional<Core::WindowEvent> EventSource::pop_event(
33 std::optional<Core::WindowEventType> filter)
34{
35 if (m_pending_events.empty()) {
36 return std::nullopt;
37 }
38
39 if (!filter) {
40 auto event = m_pending_events.front();
41 m_pending_events.pop();
42 return event;
43 }
44
45 // TODO: Filter for specific type (need to search queue)
46 auto event = m_pending_events.front();
47 if (event.type == *filter) {
48 m_pending_events.pop();
49 return event;
50 }
51
52 return std::nullopt;
53}
54
56{
57 m_waiters.push_back(awaiter);
58}
59
61{
62 auto it = std::ranges::find(m_waiters, awaiter);
63 if (it != m_waiters.end()) {
64 m_waiters.erase(it);
65 }
66}
67
68} // namespace MayaFlux::Vruta
Awaiter for suspending on window events.
Definition Awaiters.hpp:280
std::optional< Core::WindowEvent > pop_event(std::optional< Core::WindowEventType > filter)
Kriya::EventAwaiter next_event()
Creates awaiter for next event (any type)
std::vector< Kriya::EventAwaiter * > m_waiters
void register_waiter(Kriya::EventAwaiter *awaiter)
std::queue< Core::WindowEvent > m_pending_events
Kriya::EventAwaiter await_event(Core::WindowEventType type)
Creates awaiter for specific event type.
void unregister_waiter(Kriya::EventAwaiter *awaiter)
void signal(Core::WindowEvent event)
Signals that an event occurred.
WindowEventType
Types of window and input events.
Event data for window and input events.