1
0
mirror of https://github.com/TomHarte/CLK.git synced 2026-04-19 19:16:34 +00:00

Extended to permit subclasses that are interested to get sub-run_for information about event times.

This commit is contained in:
Thomas Harte
2017-09-10 14:44:38 -04:00
parent 90c7056d12
commit 90d2347c90
2 changed files with 21 additions and 3 deletions
+12 -3
View File
@@ -16,10 +16,19 @@ TimedEventLoop::TimedEventLoop(unsigned int input_clock_rate) :
input_clock_rate_(input_clock_rate) {}
void TimedEventLoop::run_for(const Cycles cycles) {
cycles_until_event_ -= cycles.as_int();
while(cycles_until_event_ <= 0) {
int remaining_cycles = cycles.as_int();
while(cycles_until_event_ <= remaining_cycles) {
advance(cycles_until_event_);
remaining_cycles -= cycles_until_event_;
cycles_until_event_ = 0;
process_next_event();
}
if(remaining_cycles) {
cycles_until_event_ -= remaining_cycles;
advance(remaining_cycles);
}
}
unsigned int TimedEventLoop::get_cycles_until_next_event() {
@@ -52,7 +61,7 @@ void TimedEventLoop::set_next_event_time_interval(Time interval) {
// So this event will fire in the integral number of cycles from now, putting us at the remainder
// number of subcycles
cycles_until_event_ = (int)(numerator / denominator);
cycles_until_event_ += (int)(numerator / denominator);
subcycles_until_event_.length = (unsigned int)(numerator % denominator);
subcycles_until_event_.clock_rate = (unsigned int)denominator;
}