00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef EVENT_H
00024 #define EVENT_H
00025
00026 #include <stdint.h>
00027
00028 #include "sidplayfp/siddefs.h"
00029
00030 typedef int_fast64_t event_clock_t;
00031
00038 typedef enum {EVENT_CLOCK_PHI1 = 0, EVENT_CLOCK_PHI2 = 1} event_phase_t;
00039
00040
00050 class SID_EXTERN Event
00051 {
00052 friend class EventScheduler;
00053
00054 private:
00056 const char * const m_name;
00057
00059 event_clock_t triggerTime;
00060
00062 Event *next;
00063
00064 public:
00071 Event(const char * const name) :
00072 m_name(name) {}
00073
00079 virtual void event() = 0;
00080
00081 protected:
00082 ~Event() {}
00083 };
00084
00101 class EventContext
00102 {
00103 public:
00109 virtual void cancel(Event &event) = 0;
00110
00120 virtual void schedule(Event &event, event_clock_t cycles,
00121 event_phase_t phase) = 0;
00122
00129 virtual void schedule(Event &event, event_clock_t cycles) = 0;
00130
00137 virtual bool isPending(Event &event) const = 0;
00138
00145 virtual event_clock_t getTime(event_phase_t phase) const = 0;
00146
00154 virtual event_clock_t getTime(event_clock_t clock, event_phase_t phase) const = 0;
00155
00161 virtual event_phase_t phase() const = 0;
00162
00163 protected:
00164 ~EventContext() {}
00165 };
00166
00167 #endif // EVENT_H