ChonkyStation/scheduler.cpp

37 lines
No EOL
912 B
C++

#include "scheduler.h"
scheduler::scheduler() {
for (int i = 0; i < MAX_ENTRIES; i++) {
events[i].function_ptr = nullptr;
events[i].time = 0;
}
}
void scheduler::push(void (*ptr)(void*), int time, void* classptr) {
event Event;
Event.function_ptr = ptr;
Event.time = time;
Event.data = classptr;
for (int i = 0; i < MAX_ENTRIES; i++) {
if (events[i].time > Event.time) {
std::memmove(&events[i + 1], &events[i], (MAX_ENTRIES - i - 1) * sizeof(event));
events[i] = Event;
scheduled++; return;
}
}
if(scheduled < MAX_ENTRIES) events[scheduled++] = Event;
}
void scheduler::tick(uint64_t cycles) {
time += cycles;
int executed = 0;
for (int i = 0; i < scheduled; i++) {
if (time >= events[i].time) {
(*events[i].function_ptr)(events[i].data);
executed++;
}
}
std::memmove(&events[0], &events[executed], (scheduled - executed) * sizeof(event));
scheduled -= executed;
}