private Node combineNodes(Node cleanNode1, Node cleanNode2) { if (cleanNode1 is NodeNumber && !(cleanNode2 is NodeNumber)) { if (((NodeNumber)cleanNode1).Number == 0) { return(cleanNode2); } } if (cleanNode2 is NodeNumber && !(cleanNode1 is NodeNumber)) { if (((NodeNumber)cleanNode2).Number == 0) { return(cleanNode1); } } if (cleanNode1 is NodeNumber && cleanNode2 is NodeNumber) { if (((NodeNumber)cleanNode1).Number == 0) { Node newNumberNode; newNumberNode = new NodeNumber(cleanNode2.ContainsX(), cleanNode2.ContainsP(), ((NodeNumber)cleanNode2).Number); return(newNumberNode); } else if (((NodeNumber)cleanNode2).Number == 0) { Node newNumberNode; newNumberNode = new NodeNumber(cleanNode1.ContainsX(), cleanNode1.ContainsP(), ((NodeNumber)cleanNode1).Number); return(newNumberNode); } else if (cleanNode1.ContainsX() == cleanNode2.ContainsX()) { if (cleanNode1.ContainsP() == cleanNode2.ContainsP()) { Node newNumberNode; newNumberNode = new NodeNumber(cleanNode1.ContainsX(), cleanNode1.ContainsP(), ((NodeNumber)cleanNode1).Number + ((NodeNumber)cleanNode2).Number); return(newNumberNode); } } } //none of the nodes are numbers, so they need to be cleaned! Node trash; if (cleanNode1 is NodeLN && cleanNode2 is NodeLN) { Node nodeln = new NodeLN(); Node nodeTim = new NodeTimes(); nodeTim.AddNode1(cleanNode1.Node1); nodeTim.AddNode2(cleanNode2.Node1); nodeln.AddNode1(nodeTim); nodeln.MakeNodeClean(null, out trash); return(nodeln); } return(null); }
public override Node MakeNodeClean(Node prevNodeNumber, out Node replacementNode) { Node garbage; if (node1 is NodeLN && node2 is NodeLN) //exception { Node nodeDiv = new NodeDivision(); Node nodeln = new NodeLN(); nodeln.AddNode1(nodeDiv); nodeDiv.AddNode1(Node1.Node1); nodeDiv.AddNode2(node2.Node1); nodeln.MakeNodeClean(null, out garbage); replacementNode = null; return(nodeln); } else { Node nodePlus = new NodePlus(); nodePlus.AddNode1(node1); if (node2 is NodeNumber) { ((NodeNumber)node2).SwapPositivity(); nodePlus.AddNode2(node2); } else if (node2 is NodeMinus) { Node newNode2 = node2.MakeNodeClean(null, out garbage); //node2 is now nodeplus ((NodePlus)newNode2).SwapPositivity(); nodePlus.AddNode2(newNode2); } else { Node nodeTimes = new NodeTimes(); Node nodeNumber = new NodeNumber(false, false, -1); nodeTimes.AddNode1(nodeNumber); nodeTimes.AddNode2(node2); nodePlus.AddNode2(nodeTimes); } replacementNode = null; nodePlus.MakeNodeClean(null, out garbage); return(nodePlus); } }