23#ifndef EVENTSCHEDULER_H
24#define EVENTSCHEDULER_H
40using event_phase_t =
enum
65 Event *firstEvent =
nullptr;
68 event_clock_t currentTime = 0;
76 void schedule(
Event &event)
79 Event **scan = &firstEvent;
82 if ((*scan ==
nullptr) || ((*scan)->triggerTime > event.triggerTime))
88 scan = &((*scan)->next);
105 event.triggerTime = currentTime + ((currentTime & 1) ^
phase) + (cycles << 1);
117 event.triggerTime = currentTime + (cycles << 1);
138 Event &
event = *firstEvent;
139 firstEvent = firstEvent->next;
140 currentTime =
event.triggerTime;
160 return (currentTime + (
phase ^ 1)) >> 1;
168 event_phase_t
phase()
const {
return static_cast<event_phase_t
>(currentTime & 1); }
170 event_clock_t remaining(
Event &event)
const {
return event.triggerTime - currentTime; }
Definition EventScheduler.h:62
void schedule(Event &event, unsigned int cycles, event_phase_t phase)
Definition EventScheduler.h:102
void schedule(Event &event, unsigned int cycles)
Definition EventScheduler.h:115
event_clock_t getTime(event_phase_t phase) const
Definition EventScheduler.h:158
bool isPending(Event &event) const
Definition EventScheduler.cpp:50
void reset()
Definition EventScheduler.cpp:29
void clock()
Definition EventScheduler.h:136
event_phase_t phase() const
Definition EventScheduler.h:168
void cancel(Event &event)
Definition EventScheduler.cpp:35