/// <summary> /// Postavljanje pocetnog event-a simulacije. /// </summary> /// <param name="eventPars">Skup parametara koji odredjuju aktivacije event-a</param> public virtual void StartEvents(params EventPar <TEvent>[] eventPars) { foreach (var evPar in eventPars) { FEL.Insert(evPar); } }
public virtual void RunSimulation() { EventPar <TEvent> promotedEvent = null; EventPar <TEvent> eventPar = null; //Inicijalizacija pre pokretanja simulacije PreInitialize(); while (FEL.Count > 0 || promotedEvent != null) { //Preuzimanje sledeceg event-a if (promotedEvent != null) { eventPar = promotedEvent; promotedEvent = null; } else { eventPar = FEL.Remove(); } CurrentEventPar = eventPar; //Trenutak aktivacije event-a Time = eventPar.Time; //Uslov za zavrsetak simulacije, trajanje simulacije if (Time >= SimulationEndTime) { break; } //Aktivacija event-a var nextEvent = eventPar.Event; nextEvent.ActivateEvent(eventPar.Parameters); //Prolazak kroz sve otocne grane posmatranog event-a, ako je //uslov zadovoljen odgovarajuci skup parametara za aktivaciju //event-a se postavlja na FEL. foreach (var eventEdge in EventGraph.OutEdges(nextEvent)) { switch (eventEdge.ActivationType) { case ActivationType.Normal: { FEL.Insert(eventEdge.GetEventPar()); } break; case ActivationType.Immediate: { if (promotedEvent != null) { throw new Exception("Only single immediate event can be triggered from current event."); } promotedEvent = eventEdge.GetEventPar(); } break; } } } //Inicijalizacija nakon zavrsetka simulacije PostInitialize(); }
/// <summary> /// Postavljanje pocetnog event-a simulacije. /// </summary> /// <param name="ev">Event koji se aktivira</param> /// <param name="time">Trenutak aktivacije</param> public virtual void StartEvent(TEvent ev, double time) { FEL.Insert(new EventPar <TEvent>(ev, time)); }