Example #1
0
        protected virtual Operator OnMultiply(Symbol symbol, bool front)
        {
            List <Operator> operators = new List <Operator>();

            operators.Add(this);
            OperatorSymbol multiplier = new OperatorSymbol(symbol);

            operators.Insert(front ? 0 : 1, multiplier);
            return(new OperatorProduct(operators));
        }
Example #2
0
        protected override Operator OnMultiply(Symbol symbol, bool front)
        {
            List<Operator> operators = new List<Operator>();

            foreach(Operator op in this.Operators) 
            {
                operators.Add(op);
            }

            int index = front ? 0 : operators.Count - 1;

            Operator target = this.Operators[(front) ? 0 : operators.Count - 1];

            if (target.SumTerms.Count == 0)
            {
                Symbol newSymbol = symbol * target.SymbolTerm;
                if (newSymbol == Symbol.One)
                {
                    this.Operators.RemoveAt(index);
                    if (this.Operators.Count == 1)
                    {
                        return this.Operators[0];
                    }
                }

                operators[index] = new OperatorSymbol(newSymbol);
            }
            else
            {
                Operator newOperatorSymbol = new OperatorSymbol(symbol);
                if (front)
                {
                    operators.Insert(0, newOperatorSymbol);
                }
                else
                {
                    operators.Add(newOperatorSymbol);
                }
            }

            return new OperatorProduct(operators);
        }