public SystemSchedule(StateHistory oldStates, Stack <Access> newAccessList, double newEventStartTime) { Dictionary <Asset, Task> tasks = new Dictionary <Asset, Task>(); Dictionary <Asset, double> taskStarts = new Dictionary <Asset, double>(); Dictionary <Asset, double> taskEnds = new Dictionary <Asset, double>(); Dictionary <Asset, double> eventStarts = new Dictionary <Asset, double>(); Dictionary <Asset, double> eventEnds = new Dictionary <Asset, double>(); foreach (var access in newAccessList) { if (access.Task != null) { if (access.AccessStart <= newEventStartTime && newEventStartTime <= access.AccessEnd) { taskStarts.Add(access.Asset, newEventStartTime); } else if (access.AccessStart >= newEventStartTime && access.AccessStart <= newEventStartTime + SchedParameters.SimStepSeconds) { taskStarts.Add(access.Asset, access.AccessStart); } else { Console.WriteLine("Event Start: " + newEventStartTime + " AccesStart: " + access.AccessStart + " AccessEnd: " + access.AccessEnd); taskStarts.Add(access.Asset, newEventStartTime); } tasks.Add(access.Asset, access.Task); if (access.AccessEnd > SimParameters.SimEndSeconds) { taskEnds.Add(access.Asset, SimParameters.SimEndSeconds); } else { taskEnds.Add(access.Asset, access.AccessEnd); } eventStarts.Add(access.Asset, newEventStartTime); if (newEventStartTime + SchedParameters.SimStepSeconds > SimParameters.SimEndSeconds) { eventEnds.Add(access.Asset, SchedParameters.SimStepSeconds); } else { eventEnds.Add(access.Asset, newEventStartTime + SchedParameters.SimStepSeconds); } } else { taskStarts.Add(access.Asset, newEventStartTime); taskEnds.Add(access.Asset, newEventStartTime); tasks.Add(access.Asset, null); eventStarts.Add(access.Asset, newEventStartTime); eventEnds.Add(access.Asset, newEventStartTime + SchedParameters.SimStepSeconds); } } Event eventToAdd = new Event(tasks, new SystemState(oldStates.GetLastState())); //all references eventToAdd.SetEventEnd(eventEnds); eventToAdd.SetTaskEnd(taskEnds); eventToAdd.SetEventStart(eventStarts); eventToAdd.SetTaskStart(taskStarts); AllStates = new StateHistory(oldStates, eventToAdd); }
public SystemState GetSubsystemNewState() { return(AllStates.GetLastState()); }