mirror of https://github.com/BOINC/boinc.git
31 lines
630 B
C++
31 lines
630 B
C++
#include <vector>
|
|
#include <algorithm>
|
|
|
|
using std::vector;
|
|
|
|
struct EVENT {
|
|
double t;
|
|
virtual void handle(){}
|
|
};
|
|
|
|
bool compare(EVENT* e1, EVENT* e2) {
|
|
return (e1->t > e2->t);
|
|
}
|
|
|
|
struct SIMULATOR {
|
|
vector<EVENT*> events;
|
|
void insert(EVENT* e) {
|
|
events.push_back(e);
|
|
push_heap(events.begin(), events.end(), compare);
|
|
}
|
|
void simulate(double dur) {
|
|
while (events.size()) {
|
|
EVENT* e = events.front();
|
|
pop_heap(events.begin(), events.end(), compare);
|
|
events.pop_back();
|
|
if (e->t > dur) break;
|
|
e->handle();
|
|
}
|
|
}
|
|
};
|