public Node Insert(Node node, AExpStm newStm) { //Node must be a node for an AExpStm Node newNode = new Node(newStm); foreach (Node successor in node.Successors) { newNode.AddSucc(successor); } foreach (Node successor in newNode.Successors) { node.RemoveSucc(successor); } node.AddSucc(newNode); Nodes.Insert(Nodes.IndexOf(node) + 1, newNode); return newNode; }
public void Remove(Node node) { Nodes.Remove(node); //Set succ/pred of succ/pred nodes foreach (Node predecessor in node.Predecessors) { foreach (Node successor in node.Successors) { predecessor.AddSucc(successor); } } //Remove node from succ/pred lists for (int i = node.Predecessors.Count - 1; i >= 0; i--) { Node predecessor = node.Predecessors[i]; node.RemovePred(predecessor); } for (int i = node.Successors.Count - 1; i >= 0; i--) { Node successor = node.Successors[i]; node.RemoveSucc(successor); } }
public void RemovePred(Node node) { if (Predecessors.Contains(node)) { Predecessors.Remove(node); node.RemoveSucc(this); } }