#include "sim.h"

bool operator>(const event& left,const event& right)
{
	return left.time>right.time;
}

event::event(unsigned long t):time(t){}

simulation::simulation()
{
	time=0;
}

void simulation::set_max_time(unsigned long mt)
{
	max_run_time=mt;
}

void simulation::scheduleEvent(event *newEvent)
{
	eventQueue.push(newEvent);
}

unsigned long simulation::currentTime() const
{
	return time;
}

void simulation::run()
{
	done=eventQueue.empty();
	while(!done)
	{
		event* nextEvent=eventQueue.top();
		time=nextEvent->time;
		nextEvent->processEvent();
		delete nextEvent;
		eventQueue.pop();
		done=done||eventQueue.empty()||time>max_run_time;
	}
}

