#pragma once
#include "Heap.h"
#include "Ptr.h"
#include "Event.h"
#include "AbstractSimulationResultDTO.h"

class AbstractSimulator
{
public:
	virtual void start() = 0;
	virtual void reset() = 0;
	virtual void step() = 0;
	virtual bool isSimulationComplete() = 0;
	virtual Heap<Ptr<Event> > getEventQueue() = 0;
	virtual Event* getCurrentEvent() = 0 ;
	virtual Event* getIthEvent(int i) = 0;
	virtual int getEventQueueSize() = 0;
	virtual void setSimulationResult(AbstractSimulationResultDTO* result) = 0;
	virtual AbstractSimulationResultDTO* getSimulationResult() = 0;
	virtual void setAverageArrivalsRate(int arrivalsRate) = 0;
};