public override bool CanJoin(RuntimeData runtime, INumber val) { if (val is Number || val is Fraction) { return(true); } return(val.CanJoin(runtime, null)); }
public void AddItem(RuntimeData runtime, INumber val) { var v = val.Eval(runtime); if (v is Number && (v as Number).Value == 1) { return; } if (val is AdditionFormula && (val as AdditionFormula).Count == 1) { this.AddItem(runtime, (val as AdditionFormula).Items[0]); return; } if (val is MultipleFormula) { foreach (var item in (val as MultipleFormula).items) { this.AddItem(runtime, item); } return; } for (int i = 0; i < this.items.Count; i++) { if (runtime.Setting.DoOptimize && ( this.items[i].CanJoin(runtime, val) || val.CanJoin(runtime, this.items[i]))) { this.items[i] = this.items[i].Multiple(runtime, val); return; } } this.items.Add(v); }