internal FunctionCalculator CompileCalculation(CalculationSchema schema) { _runtimeParameter = Expression.Parameter(typeof(GraspRuntime), "runtime"); var lambdaBody = Visit(schema.Expression); return new FunctionCalculator(schema.OutputVariable, CompileFunction(lambdaBody)); }
private void EnsureAssignableToOutputVariable(CalculationSchema calculation) { if(!calculation.OutputVariable.Type.IsAssignableFrom(calculation.Expression.Type)) { throw new InvalidCalculationResultTypeException( calculation.Source, Resources.InvalidCalculationResultType.FormatInvariant( calculation.Expression.Type, calculation, calculation.OutputVariable.Type, calculation.OutputVariable)); } }
private void EnsureVariablesExistInSchema(CalculationSchema calculation) { foreach(var variable in calculation.Variables) { if(!_variables.Contains(variable)) { throw new InvalidCalculationVariableException( variable, calculation.Source, _schema, Resources.InvalidCalculationVariable.FormatInvariant(variable, calculation)); } } }
private static ICalculator GetCalculator(CalculationSchema schema) { return new CalculationCompiler().CompileCalculation(schema); }
internal DependencyNode(CalculationSchema calculation, IEnumerable<CalculationSchema> dependencies) { Calculation = calculation; Dependencies = dependencies.ToList().AsReadOnly(); }
private static bool IsDependency(CalculationSchema calculation, CalculationSchema possibleDependency) { return calculation.Variables.Contains(possibleDependency.OutputVariable); }