Items in a priority queue are sorted by natural order (i.e. the compareTo() method). A binary heap implementation can be found in BinaryHeap.java. A sorted list implementation is easy to create.
When an event is fired, the simulator sets the clock to the event's fire time. Firing an event may produce another event.
The simulator maintains a queue of events prioritized by their fire times. It perpetually
1. fire next event
2. schedule any event this creates
until the event queue is empty.
Special types of events extend the Event class:
class RepeatingEvent extends Event {
private int count = 0;
public RepeatingEvent(int time) {
super(time); }
public Event fire() {
if (10 < count++) return null;
fireTime += 3;
return this;
}
}
In this firing a repeating event causes it to reschedule itself 3 ticks beyond its current fire time.
We can also extend the simulator:
class Demo {
public static void main(String[] args)
{
Simulator sim = new Simulator();
RepeatingEvent e1 = new
RepeatingEvent(0);
sim.schedule(e1);
RepeatingEvent e2 = new RepeatingEvent(5);
sim.schedule(e2);
sim.run();
}
}
clock = 0
schedule = [{0}, {5}]
clock = 0
schedule = [{3}, {5}]
clock = 3
schedule = [{5}, {6}]
clock = 5
schedule = [{6}, {8}]
clock = 6
schedule = [{8}, {9}]
clock = 8
schedule = [{9}, {11}]
clock = 9
schedule = [{11}, {12}]
clock = 11
schedule = [{12}, {14}]
clock = 12
schedule = [{14}, {15}]
clock = 14
schedule = [{15}, {17}]
clock = 15
schedule = [{17}, {18}]
clock = 17
schedule = [{18}, {20}]
clock = 18
schedule = [{20}, {21}]
clock = 20
schedule = [{21}, {23}]
clock = 21
schedule = [{23}, {24}]
clock = 23
schedule = [{24}, {26}]
clock = 24
schedule = [{26}, {27}]
clock = 26
schedule = [{27}, {29}]
clock = 27
schedule = [{29}, {30}]
clock = 29
schedule = [{30}, {32}]
clock = 30
schedule = [{32}, {33}]
clock = 32
schedule = [{33}, {35}]
clock = 33
schedule = [{35}]
clock = 35
schedule = [{38}]
done