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)); }
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); }