got a little sloppy committing...
[qemupp.git] / time / test-time-source.cpp
blobeeb2c4d7487c501f23218bd6191bf72dfcadde71
1 #include "test-time-source.hpp"
3 #include <stdio.h>
5 TestTimeSource::TestTimeSource(uint64_t base, TimeUnit unit, bool reliable) :
6 time(time_to_ns(base, unit)), reliable(reliable)
10 uint64_t TestTimeSource::now(TimeUnit unit)
12 return ns_to_time(this->time, unit);
15 #include <stdio.h>
17 void TestTimeSource::arm(Timer *timer)
19 std::list<Timer *>::iterator i;
21 for (i = this->events.begin(); i != this->events.end(); ++i) {
22 if (timer->get_deadline() < (*i)->get_deadline()) {
23 break;
27 this->events.insert(i, timer);
30 void TestTimeSource::cancel(Timer *timer)
32 std::list<Timer *>::iterator i;
34 for (i = this->events.begin(); i != this->events.end(); ++i) {
35 if (*i == timer) {
36 this->events.erase(i);
37 break;
42 void TestTimeSource::advance(uint64_t by, TimeUnit unit)
44 std::list<Timer *>::iterator i;
45 uint64_t target;
47 target = time_to_ns(ns_to_time(this->time, unit) + by, unit);
49 if (!this->reliable) {
50 this->time = target;
53 i = this->events.begin();
54 while (i != this->events.end() &&
55 (*i)->get_deadline() <= target) {
56 Timer *timer = *i;
57 this->events.pop_front();
58 if (this->reliable) {
59 if (this->time < timer->get_deadline()) {
60 this->time = timer->get_deadline();
63 timer->fire();
64 i = this->events.begin();
67 this->time = target;