/// <summary> /// Gibt an ob ein Vorgang bereits in einer Liste vorhanden ist. /// </summary> /// <param name="l">Zu überprüfende Liste.</param> /// <param name="v">Zu überprüfender Vorgang.</param> /// <returns>true falls der Vorgang bereits in der Liste enthalten ist, false falls nicht.</returns> private Boolean ListContainsVorgang(List <Vorgang> l, Vorgang v) { foreach (var e in l) { if (e.Id == v.Id) { return(true); } } return(false); }
/// <summary> /// Überprüft ob ein Vorgang überhaupt in einem Pfad vorkommt. /// </summary> /// <param name="vorgang">Zu überprüfender Vorgang.</param> /// <returns>true falls der Vorgang in einem Pfad vorkommt, sonst false.</returns> private Boolean InPfade(Vorgang vorgang) { foreach (var p in Pfade) { foreach (var v in p) { if (v.Id == vorgang.Id) { return(true); } } } return(false); }
/// <summary> /// Rekursive Überprüfung auf Zyklen indem der überprüft wird ob der Index eines beliebigen Nachfolgers bereits besucht wurde. /// Andernfalls wird der Nachfolger einem Klon der Liste hinzugefügt und mit diesem weitergerechnet. /// </summary> /// <param name="v">Aktuell zu überprüfendes Vorgang-Objekt.</param> /// <param name="list">Liste der bereits überprüften Vorgänge.</param> /// <returns>true falls ein Zyklus vorliegt, false falls nicht.</returns> private Boolean HasZyklus(Vorgang v, List <int> list) { foreach (var n in v.Nachfolger(Repo)) { if (list.IndexOf(n.Id) > -1) { return(true); } var temp = new List <int>(list); temp.Add(n.Id); return(HasZyklus(n, temp)); } return(false); }
/// <summary> /// Weist dem Vorgang SEZ = FEZ zu falls dieser ein Endvorgang ist. Andernfalls wird die kleinste späteste Anfangszeit aller Nachfolger für diesen Wert verwendet. /// Setzt die früheste Endzeit aus der Dauer und der frühesten Anfangszeit zusammen. /// </summary> /// <param name="v">Zu verarbeitender Vorgang.</param> private void KalkRueckwaerts(Vorgang v) { if (v.isEnd) { v.SEZ = v.FEZ; } else { v.SEZ = v.Nachfolger(Repo).OrderBy(o => o.SAZ).ToList().First().SAZ; } v.SAZ = v.SEZ - v.Dauer; foreach (var vo in v.Vorgaenger(Repo)) { KalkRueckwaerts(vo); } }
/// <summary> /// Weist dem Vorgang FAZ = 0 zu falls dieser ein Startvorgang ist. Andernfalls wird die größte früheste Endzeit aller Vorgänger für diesen Wert verwendet. /// Setzt die früheste Endzeit aus der Dauer und der frühesten Anfangszeit zusammen. /// </summary> /// <param name="v">Zu verarbeitender Vorgang.</param> private void KalkVorwaerts(Vorgang v) { if (v.isStart) { v.FAZ = 0; } else { v.FAZ = v.Vorgaenger(Repo).OrderByDescending(o => o.FEZ).ToList().First().FEZ; } v.FEZ = v.FAZ + v.Dauer; foreach (var n in v.Nachfolger(Repo)) { KalkVorwaerts(n); } }
/// <summary> /// Durchsucht die Datei nach dem Teil nach dem Kommentarbereich. /// </summary> /// <param name="lines">Inhalt der Eingangsdatei nach Zeilen aufgespaltet.</param> /// <param name="filepath">Pfad der einzulesenden Datei.</param> /// <returns>Liste aller eingelesenen Vorgänge</returns> private static List <Vorgang> ListVorgaenge(string[] lines, string filepath) { List <Vorgang> ret = new List <Vorgang>(); foreach (var line in lines) { if (line.IndexOf("//") != 0 && !line.Equals("")) { Vorgang v = CreateVorgang(line); ret.Add(v); } } return(ret); }
/// <summary> /// Fügt einen einzelnen Vorgang dem Speicher hinzu. /// </summary> /// <param name="v">Hinzuzufügender Vorgang.</param> public void Add(Vorgang v) { Vorgaenge.Add(v); }