23 #ifndef EVENTSCHEDULER_H
24 #define EVENTSCHEDULER_H
29 template<
class This >
33 typedef void (This::*Callback) ();
37 Callback
const m_callback;
40 void event() { (m_this.*m_callback)(); }
43 EventCallback(
const char *
const name, This &_this, Callback callback) :
46 m_callback(callback) {}
61 event_clock_t currentTime;
74 void schedule(
Event &event)
77 Event **scan = &firstEvent;
80 if (*scan == 0 || (*scan)->triggerTime > event.triggerTime)
86 scan = &((*scan)->next);
91 void schedule(
Event &event, event_clock_t cycles,
95 event.triggerTime = (cycles << 1) + currentTime + ((currentTime & 1) ^
phase);
99 void schedule(
Event &event, event_clock_t cycles)
101 event.triggerTime = (cycles << 1) + currentTime;
122 Event &
event = *firstEvent;
123 firstEvent = firstEvent->next;
124 currentTime =
event.triggerTime;
135 return (currentTime + (phase ^ 1)) >> 1;
143 event_phase_t
phase()
const {
return (event_phase_t) (currentTime & 1); }
146 #endif // EVENTSCHEDULER_H