public override void WriteToConsole(DateTime?clockTime = null) { foreach (var load in AllLoads) { Console.Write("Id: {0}\tP_Idx: {1}\tS_Idx: {2}\t", load, LoadProcedureStepIndex[load].Item1, LoadProcedureStepIndex[load].Item2); if (Occupying.ContainsKey(load)) { foreach (var res in Occupying[load].SelectMany(i => i)) { Console.Write("{0} ", res.Tag); } } Console.WriteLine(); } Console.WriteLine(); foreach (var res in Config.Resources) { Console.Write("Id: {0}\tOccupied: {1}\tPending: ", res.Id, Occupation.ContainsKey(res) ? Occupation[res].ToString() : "null"); foreach (var load in PendingLoads[res]) { Console.Write("{0} ", load); } Console.WriteLine(); } }
/// <summary> /// Request resources for indexed procedure and step /// </summary> /// <param name="procedureIdx">Procedure index</param> /// <param name="stepIdx">Step index</param> /// <returns>Two-dimension list for resources accoridng to # requirement x quantity for each requirement</returns> private List <List <Resource> > RqstResources(int procedureIdx, int stepIdx, TLoad load) { var step = Config.Procedures[procedureIdx].Steps[stepIdx]; var resources = new List <List <Resource> >(); var rqst = new HashSet <Resource>(); foreach (var req in step.Requirements) { var toRqst = ResourcePool[procedureIdx][stepIdx].Where(res => req.Condition(res) && (!Occupation.ContainsKey(res) || Occupation[res].Equals(load)) && !rqst.Contains(res)) .Take(req.Quantity).ToList(); if (toRqst.Count < req.Quantity) { return(null); } foreach (var res in toRqst) { rqst.Add(res); } resources.Add(toRqst); } return(resources); }