/// <summary> /// Visits the constant calculation. /// </summary> /// <param name="constantCalculation">The constant calculation.</param> protected override void VisitConstantCalculation(ConstantCalculation constantCalculation) { if (currentIdx == hitIndex) { constantCalculation.SetValue(GetValue()); } currentIdx++; }
/// <summary> /// Generates the calculation based on the given formation. /// </summary> /// <returns> /// The <see cref="Calculation" /> being generated. /// </returns> /// <exception cref="InvalidOperationException">Cannot generate the equation: the given equation generation formation is not valid, please see ErrorMessages property for details.</exception> public override Calculation Generate() { if (!this.IsValid) { throw new InvalidOperationException("Cannot generate the equation: the given equation generation formation is not valid, please see ErrorMessages property for details."); } Calculation result = null; var numOfFactors = numOfFactors_min; if (numOfFactors_max != 0) { numOfFactors = rnd.Next(numOfFactors_min, numOfFactors_max + 1); } for (var idx = 0; idx < numOfFactors; idx++) { long factor = rnd.Next(max + 1); var @operator = Utils.GenerateRandomOperator(this.acceptableOperators); Calculation left = result, right = new ConstantCalculation(factor); if (@operator == Operator.Add || @operator == Operator.Mul) { var seed = rnd.Next(DateTime.Now.Millisecond); if ((seed % 2) == 0) { left = new ConstantCalculation(factor); right = result; } } if (this.rules != null) { foreach (var rule in rules) { rule.Apply(left, right, Parameters, ref @operator); } } result = Calculation.Merge(left, right, @operator); } return(result); }
/// <summary> /// Visits the constant calculation. /// </summary> /// <param name="constantCalculation">The constant calculation.</param> protected virtual void VisitConstantCalculation(ConstantCalculation constantCalculation) { }
/// <summary> /// Visits the constant calculation. /// </summary> /// <param name="constantCalculation">The constant calculation.</param> protected override void VisitConstantCalculation(ConstantCalculation constantCalculation) { base.VisitConstantCalculation(constantCalculation); this.numOfConstantCalculations++; }