public void CreateNodes() { foreach (KeyValuePair <string, string> nodeItemStrings in _nodes) { INode newNode = (INode)NodeFactory.CreateNode(nodeItemStrings.Value); newNode.Id = nodeItemStrings.Key; newNode.Type = nodeItemStrings.Value; if (nodeItemStrings.Value == "and") { newNode.PropogationDelay = AND.accept(delayCalc); } else if (nodeItemStrings.Value == "nand") { newNode.PropogationDelay = NAND.accept(delayCalc); } else if (nodeItemStrings.Value == "nor") { newNode.PropogationDelay = NOR.accept(delayCalc); } else if (nodeItemStrings.Value == "not") { newNode.PropogationDelay = NOT.accept(delayCalc); } else if (nodeItemStrings.Value == "or") { newNode.PropogationDelay = OR.accept(delayCalc); } else if (nodeItemStrings.Value == "probe") { newNode.PropogationDelay = PROBE.accept(delayCalc); } else if (nodeItemStrings.Value == "xor") { newNode.PropogationDelay = XOR.accept(delayCalc); } else { newNode.PropogationDelay = 15; } AllNodes.Add(newNode); } // Link edges aan nodes foreach (var node in AllNodes) { List <string> linkedEdges; if (_edges.TryGetValue(node.Id, out linkedEdges)) { foreach (var linkedEdgeString in linkedEdges) { INode linkedNode = AllNodes.First(item => item.Id == linkedEdgeString); linkedNode.PreviousNodes.Add(node); node.NextNodes.Add(linkedNode); } } else { Console.WriteLine("Final node: " + node.Id); EndNodes.Add(node); } } bool noErrors = true; // Check op fouten m.b.t connecties foreach (var node in AllNodes) { // Probe moet PreviousNodes of NextNodes hebben, Alle andere nodes moeten zowel PreviousNodes als NextNodes hebben if (node.GetType() == typeof(Probe) && (node.PreviousNodes.Count == 0 && node.NextNodes.Count == 0) || node.GetType() != typeof(Probe) && (node.PreviousNodes.Count == 0 || node.NextNodes.Count == 0)) { Console.WriteLine("Er is een node binnen je circuit aanwezig die een foute connectie heeft!"); noErrors = FoundError(); break; } } // Check op infinite loops foreach (var node in EndNodes) { List <INode> routeVisited = new List <INode>(); if (!HasNoInfiniteLoop(node, routeVisited)) { Console.WriteLine("Er is een infinite loop binnen je circuit aanwezig!"); noErrors = FoundError(); break; } } if (noErrors) { Console.WriteLine("Nodes en edges zijn aangemaakt en gelinkt!"); } }