Example #1
0
        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);
        }
Example #2
0
        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);
            }
        }