mirror of
https://github.com/liuk7071/ChonkyStation.git
synced 2025-04-02 10:52:38 -04:00
37 lines
No EOL
912 B
C++
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;
|
|
} |