示例#1
0
 /// <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);
     }
 }
示例#2
0
        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();
        }
示例#3
0
 /// <summary>
 /// Metoda za oslobadjanje resursa simulatora posle izvrsenog ciklusa simulacije. Overload
 /// metode treba da pozivaju ovu osnovnu implementaciju.
 /// </summary>
 protected virtual void PostInitialize()
 {
     FEL.Clear();
 }
示例#4
0
 /// <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));
 }