/// <summary> /// Creates a new derivative operation from a numeric or derivative module and an operator. /// The operator will be used with the module's number value, instead of a built-in value. /// </summary> /// <param name="reference">The module.</param> /// <param name="oper">The operator.</param> public DerivativeOperation(ModuleNumeric reference, char oper) { if (reference.ModuleType != ModuleData.moduleType.NUMERIC && reference.ModuleType != ModuleData.moduleType.DERIVATIVE) { throw new ArgumentException("This subclass of ModuleNumeric can't be made into a derivative operation this way. It only works with NUMERIC and DERIVATIVE."); } this.reference = reference; logic = oper + ""; }
/// <summary> /// Does this DerivativeOperation's calculation on a number. /// </summary> /// <param name="source">The original number.</param> /// <returns>The number after calculation.</returns> public double Calc(double source) { double val = source; if (reference == null) { char oper = logic[0]; double mod = double.Parse(logic.Substring(1)); val = Operate(oper, source, mod); } else if (reference is ModuleCheck) { ModuleCheck check = reference as ModuleCheck; string[] logics = logic.Split(','); if (check.IsChecked) { char oper = logics[0][0]; double mod = double.Parse(logics[0].Substring(1)); val = Operate(oper, source, mod); } else if (logics.Length > 1) { char oper = logics[1][0]; double mod = double.Parse(logics[1].Substring(1)); val = Operate(oper, source, mod); } } else if (reference is ModuleMenu) { ModuleMenu menu = reference as ModuleMenu; string[] logics = logic.Split(','); char oper = logics[menu.MenuIndex - 1][0]; double mod = double.Parse(logics[menu.MenuIndex - 1].Substring(1)); val = Operate(oper, source, mod); } else if (reference is ModuleNumeric) { ModuleNumeric numeric = reference as ModuleNumeric; char oper = logic[0]; double mod = numeric.Number; val = Operate(oper, source, mod); } else { throw new ArgumentException("Cannot calculate a DerivativeOperation based on a " + reference.ModuleType + " module."); } return(val); }