public CalculationEngine(CultureInfo cultureInfo, ExecutionMode executionMode, bool cacheEnabled, bool optimizerEnabled) { this.executionFormulaCache = new ConcurrentDictionary<string, Func<Dictionary<string, double>, double>>(); this.cultureInfo = cultureInfo; this.cacheEnabled = cacheEnabled; this.optimizerEnabled = optimizerEnabled; if (executionMode == ExecutionMode.Interpreted) executor = new Interpreter(); else if (executionMode == ExecutionMode.Compiled) executor = new DynamicCompiler(); else throw new ArgumentException(string.Format("Unsupported execution mode \"\".", executionMode), "executionMode"); optimizer = new Optimizer(new Interpreter()); // We run the optimizer with the interpreter }
/// <summary> /// Creates a new instance of the <see cref="CalculationEngine"/> class. /// </summary> /// <param name="cultureInfo"> /// The <see cref="CultureInfo"/> required for correctly reading floating poin numbers. /// </param> /// <param name="executionMode">The execution mode that must be used for formula execution.</param> /// <param name="cacheEnabled">Enable or disable caching of mathematical formulas.</param> /// <param name="optimizerEnabled">Enable or disable optimizing of formulas.</param> public CalculationEngine(CultureInfo cultureInfo, ExecutionMode executionMode, bool cacheEnabled, bool optimizerEnabled) { this.executionFormulaCache = new MemoryCache<string, Func<Dictionary<string, double>, double>>(); this.FunctionRegistry = new FunctionRegistry(false); this.ConstantRegistry = new ConstantRegistry(false); this.cultureInfo = cultureInfo; this.cacheEnabled = cacheEnabled; this.optimizerEnabled = optimizerEnabled; if (executionMode == ExecutionMode.Interpreted) executor = new Interpreter(); else if (executionMode == ExecutionMode.Compiled) executor = new DynamicCompiler(); else throw new ArgumentException(string.Format("Unsupported execution mode \"{0}\".", executionMode), "executionMode"); optimizer = new Optimizer(new Interpreter()); // We run the optimizer with the interpreter // Register the default constants of Jace.NET into the constant registry RegisterDefaultConstants(); // Register the default functions of Jace.NET into the function registry RegisterDefaultFunctions(); }