public override Value Evaluate(FSharpList <Value> args) { var e = new Expression(FormulaString.ToLower(), EvaluateOptions.IgnoreCase); e.Parameters["pi"] = 3.14159265358979; var functionLookup = new Dictionary <string, Value>(); foreach (var arg in args.Select((arg, i) => new { Value = arg, Index = i })) { var parameter = InPortData[arg.Index].NickName; if (arg.Value.IsFunction) { functionLookup[parameter] = arg.Value; } else { if (arg.Value.IsNumber) { e.Parameters[parameter] = ((Value.Number)arg.Value).Item; } else if (arg.Value.IsContainer) { e.Parameters[parameter] = Utils.UnwrapToSIUnit(arg.Value).Value *dynSettings.Controller.UnitsManager.UiLengthConversion; } } } e.EvaluateFunction += delegate(string name, FunctionArgs fArgs) { if (functionLookup.ContainsKey(name)) { var func = ((Value.Function)functionLookup[name]).Item; fArgs.Result = ((Value.Number)func.Invoke( Utils.ToFSharpList( fArgs.Parameters.Select( p => Value.NewNumber(Convert.ToDouble(p.Evaluate())))))).Item; } else { fArgs.HasResult = false; } }; return(Value.NewNumber(Convert.ToDouble(e.Evaluate()))); }
public override Value Evaluate(FSharpList<Value> args) { var e = new Expression(Formula); var functionLookup = new Dictionary<string, Value>(); foreach (var arg in args.Select((arg, i) => new { Value = arg, Index = i })) { var parameter = InPortData[arg.Index].NickName; if (arg.Value.IsFunction) functionLookup[parameter] = arg.Value; else e.Parameters[parameter] = ((Value.Number)arg.Value).Item; } e.EvaluateFunction += delegate(string name, FunctionArgs fArgs) { if (functionLookup.ContainsKey(name)) { var func = ((Value.Function)functionLookup[name]).Item; fArgs.Result = ((Value.Number)func.Invoke( Utils.SequenceToFSharpList( fArgs.Parameters.Select<Expression, Value>( p => Value.NewNumber(Convert.ToDouble(p.Evaluate())))))).Item; } else { fArgs.HasResult = false; } }; return Value.NewNumber(Convert.ToDouble(e.Evaluate())); }
protected virtual void __eval_internal(FSharpList<FScheme.Value> args, Dictionary<PortData, FScheme.Value> outPuts) { var t = GetType(); if (t != typeof(Watch) && !typeof(MathBase).IsAssignableFrom(t) ) { args = Utils.ToFSharpList(args.Select(SIUnit.UnwrapToDoubleWithHostUnitConversion)); } _errorCount = 0; __eval_internal_recursive(args, outPuts); if (_errorCount > 1) Error(string.Format("{0} runs generated errors.\n\n{1}", _errorCount, ToolTipText)); }
protected internal virtual void __eval_internal(FSharpList<Value> args, Dictionary<PortData, Value> outPuts) { var argList = new List<string>(); if (args.Count() > 0) { argList = args.Select(x => x.ToString()).ToList<string>(); } var outPutsList = new List<string>(); if(outPuts.Count() > 0) { outPutsList = outPuts.Keys.Select(x=>x.NickName).ToList<string>(); } Debug.WriteLine(string.Format("__eval_internal : {0} : {1}", string.Join(",", argList), string.Join(",", outPutsList))); Evaluate(args, outPuts); }
public override Value Evaluate(FSharpList<Value> args) { var e = new Expression(FormulaString.ToLower(), EvaluateOptions.IgnoreCase); e.Parameters["pi"] = 3.14159265358979; var functionLookup = new Dictionary<string, Value>(); foreach (var arg in args.Select((arg, i) => new { Value = arg, Index = i })) { var parameter = InPortData[arg.Index].NickName; if (arg.Value.IsFunction) functionLookup[parameter] = arg.Value; else { if (arg.Value.IsNumber) { e.Parameters[parameter] = ((Value.Number)arg.Value).Item; } else if (arg.Value.IsContainer) { e.Parameters[parameter] = SIUnit.UnwrapToSIUnit(arg.Value).Value * dynSettings.Controller.UnitsManager.UiLengthConversion; } } } e.EvaluateFunction += delegate(string name, FunctionArgs fArgs) { if (functionLookup.ContainsKey(name)) { var func = ((Value.Function)functionLookup[name]).Item; fArgs.Result = ((Value.Number)func.Invoke( Utils.ToFSharpList( fArgs.Parameters.Select( p => Value.NewNumber(Convert.ToDouble(p.Evaluate())))))).Item; } else { fArgs.HasResult = false; } }; return Value.NewNumber(Convert.ToDouble(e.Evaluate())); }
protected virtual void __eval_internal(FSharpList<FScheme.Value> args, Dictionary<PortData, FScheme.Value> outPuts) { //HACK: This allows us to apply a host units conversion for all //types in the DynamoRevit library if (GetType().Assembly.GetName().Name == "DynamoRevit") { args = args.Select(Utils.UnwrapToDoubleWithHostUnitConversion).ToFSharpList(); } _errorCount = 0; __eval_internal_recursive(args, outPuts); if (_errorCount > 1) Error(string.Format("{0} runs generated errors.\n\n{1}", _errorCount, ToolTipText)); }
public override Expression Evaluate(FSharpList<Expression> args) { var procedure = this.Bench.Environment.LookupSymbol(this.Symbol); if (procedure.IsFunction) { return (procedure as Expression.Function).Item .Invoke(ExecutionEnvironment.IDENT) .Invoke( Utils.convertSequence( args.Select( input => this.macroEnvironment.Evaluate(input) ) ) ); } else return base.Evaluate(args); }
private Expression evalIfDirty(FSharpList<Expression> args, ExecutionEnvironment environment) { //If this node requires a re-calc or if we haven't calc'd yet... if (this.IsDirty || this.oldValue == null) { //Store the environment this.macroEnvironment = environment; //Evaluate arguments, then evaluate this. this.oldValue = this.eval( Utils.convertSequence( args.Select( input => environment.Evaluate(input) ) ) ); } else //Otherwise, just increment the run counter. this.runCount++; //We're done here return this.oldValue; }