Neuron®
The Neuron® is the basis for the creation of open and secure federated networks for smart societies.
Loading...
Searching...
No Matches
Coalesce.cs
1using System;
2using System.Runtime.ExceptionServices;
3using System.Threading.Tasks;
4using Waher.Script;
8
10{
15 {
23 public Coalesce(ScriptNode Argument1, int Start, int Length, Expression Expression)
24 : this(new ScriptNode[] { Argument1 }, Start, Length, Expression)
25 {
26 }
27
36 public Coalesce(ScriptNode Argument1, ScriptNode Argument2, int Start, int Length, Expression Expression)
37 : this(new ScriptNode[] { Argument1, Argument2 }, Start, Length, Expression)
38 {
39 }
40
50 public Coalesce(ScriptNode Argument1, ScriptNode Argument2, ScriptNode Argument3, int Start, int Length, Expression Expression)
51 : this(new ScriptNode[] { Argument1, Argument2, Argument3 }, Start, Length, Expression)
52 {
53 }
54
65 public Coalesce(ScriptNode Argument1, ScriptNode Argument2, ScriptNode Argument3,
66 ScriptNode Argument4, int Start, int Length, Expression Expression)
67 : this(new ScriptNode[] { Argument1, Argument2, Argument3, Argument4 }, Start, Length, Expression)
68 {
69 }
70
82 public Coalesce(ScriptNode Argument1, ScriptNode Argument2, ScriptNode Argument3,
83 ScriptNode Argument4, ScriptNode Argument5, int Start, int Length, Expression Expression)
84 : this(new ScriptNode[] { Argument1, Argument2, Argument3, Argument4, Argument5 }, Start, Length, Expression)
85 {
86 }
87
100 public Coalesce(ScriptNode Argument1, ScriptNode Argument2, ScriptNode Argument3,
101 ScriptNode Argument4, ScriptNode Argument5, ScriptNode Argument6, int Start, int Length, Expression Expression)
102 : this(new ScriptNode[] { Argument1, Argument2, Argument3, Argument4, Argument5, Argument6 }, Start, Length, Expression)
103 {
104 }
105
114 : base(Arguments, NormalTypes(Arguments), Start, Length, Expression)
115 {
116 }
117
118 private static ArgumentType[] NormalTypes(ScriptNode[] Arguments)
119 {
120 int i, c = Arguments.Length;
121 ArgumentType[] Types = new ArgumentType[c];
122
123 for (i = 0; i < c; i++)
124 Types[i] = ArgumentType.Normal;
125
126 return Types;
127 }
128
132 public override string FunctionName => nameof(Coalesce);
133
137 public override string[] DefaultArgumentNames => new string[] { "Exp", "..." };
138
145 {
146 Exception LastException = null;
147
148 foreach (ScriptNode Argument in this.Arguments)
149 {
150 try
151 {
152 return Argument.Evaluate(Variables);
153 }
155 {
157 }
158 catch (Exception ex)
159 {
160 LastException = ex;
161 }
162 }
163
164 if (!(LastException is null))
165 ExceptionDispatchInfo.Capture(LastException).Throw();
166
167 throw new ScriptRuntimeException("No valid result found.", this);
168 }
169
175 public override async Task<IElement> EvaluateAsync(Variables Variables)
176 {
177 Exception LastException = null;
178
179 foreach (ScriptNode Argument in this.Arguments)
180 {
181 try
182 {
183 return await Argument.EvaluateAsync(Variables);
184 }
186 {
188 }
189 catch (Exception ex)
190 {
191 LastException = ex;
192 }
193 }
194
195 if (!(LastException is null))
196 ExceptionDispatchInfo.Capture(LastException).Throw();
197
198 throw new ScriptRuntimeException("No valid result found.", this);
199 }
200
208 {
209 return Arguments[0];
210 }
211
218 public override Task<IElement> EvaluateAsync(IElement[] Arguments, Variables Variables)
219 {
220 return Task.FromResult(this.Evaluate(Arguments, Variables));
221 }
222 }
223}
Coalesce(Expression, ...)
Definition: Coalesce.cs:15
Coalesce(ScriptNode Argument1, ScriptNode Argument2, ScriptNode Argument3, int Start, int Length, Expression Expression)
Coalesce(Exp1,Exp2,Exp3)
Definition: Coalesce.cs:50
override string[] DefaultArgumentNames
Default Argument names
Definition: Coalesce.cs:137
Coalesce(ScriptNode Argument1, ScriptNode Argument2, ScriptNode Argument3, ScriptNode Argument4, ScriptNode Argument5, int Start, int Length, Expression Expression)
Coalesce(Exp1,Exp2,Exp3,Exp4,Exp5)
Definition: Coalesce.cs:82
Coalesce(ScriptNode Argument1, int Start, int Length, Expression Expression)
Coalesce(Exp1)
Definition: Coalesce.cs:23
Coalesce(ScriptNode[] Arguments, int Start, int Length, Expression Expression)
Coalesce(Expression, ...)
Definition: Coalesce.cs:113
override IElement Evaluate(Variables Variables)
Evaluates the node, using the variables provided in the Variables collection.
Definition: Coalesce.cs:144
Coalesce(ScriptNode Argument1, ScriptNode Argument2, ScriptNode Argument3, ScriptNode Argument4, int Start, int Length, Expression Expression)
Coalesce(Exp1,Exp2,Exp3,Exp4)
Definition: Coalesce.cs:65
override async Task< IElement > EvaluateAsync(Variables Variables)
Evaluates the node, using the variables provided in the Variables collection.
Definition: Coalesce.cs:175
override IElement Evaluate(IElement[] Arguments, Variables Variables)
Evaluates the function.
Definition: Coalesce.cs:207
Coalesce(ScriptNode Argument1, ScriptNode Argument2, ScriptNode Argument3, ScriptNode Argument4, ScriptNode Argument5, ScriptNode Argument6, int Start, int Length, Expression Expression)
Coalesce(Exp1,Exp2,Exp3,Exp4,Exp5,Exp6)
Definition: Coalesce.cs:100
override Task< IElement > EvaluateAsync(IElement[] Arguments, Variables Variables)
Evaluates the function.
Definition: Coalesce.cs:218
override string FunctionName
Name of the function
Definition: Coalesce.cs:132
Coalesce(ScriptNode Argument1, ScriptNode Argument2, int Start, int Length, Expression Expression)
Coalesce(Exp1,Exp2)
Definition: Coalesce.cs:36
Class managing a script expression.
Definition: Expression.cs:39
Base class for multivariate funcions.
ScriptNode[] Arguments
Function arguments.
Base class for all nodes in a parsed script tree.
Definition: ScriptNode.cs:69
int Length
Length of expression covered by node.
Definition: ScriptNode.cs:101
Expression Expression
Expression of which the node is a part.
Definition: ScriptNode.cs:177
int Start
Start position in script expression.
Definition: ScriptNode.cs:92
abstract IElement Evaluate(Variables Variables)
Evaluates the node, using the variables provided in the Variables collection. This method should be ...
virtual Task< IElement > EvaluateAsync(Variables Variables)
Evaluates the node, using the variables provided in the Variables collection. This method should be ...
Definition: ScriptNode.cs:158
Collection of variables.
Definition: Variables.cs:25
Basic interface for all types of elements.
Definition: IElement.cs:20
ArgumentType
Type of parameter used in a function definition or a lambda definition.
Definition: IFunction.cs:9