1using System.Collections.Generic;
3using System.Threading.Tasks;
51 object x =
Argument1.AssociatedObjectValue;
52 object y =
Argument2.AssociatedObjectValue;
54 if (x is
double xd && y is
double yd)
57 if (x is Complex xz && y is Complex yz)
60 if (x is
bool xb && y is
bool yb)
63 if (x is
string xs && y is
string ys)
73 arg1 = Q1.ToPhysicalQuantity().Magnitude;
83 arg2 = Q2.ToPhysicalQuantity().Magnitude;
92 LinkedList<IElement> Elements =
new LinkedList<IElement>();
97 return Argument2.Encapsulate(Elements,
this);
104 LinkedList<IElement> Elements =
new LinkedList<IElement>();
109 return Argument1.Encapsulate(Elements,
this);
113 ICollection<IElement> Argument1Children =
Argument1.ChildElements;
114 ICollection<IElement> Argument2Children =
Argument2.ChildElements;
116 if (Argument1Children.Count == Argument2Children.Count)
118 LinkedList<IElement> Elements =
new LinkedList<IElement>();
119 IEnumerator<IElement> eArgument1 = Argument1Children.GetEnumerator();
120 IEnumerator<IElement> eArgument2 = Argument2Children.GetEnumerator();
124 while (eArgument1.MoveNext() && eArgument2.MoveNext())
125 Elements.AddLast(this.
Evaluate(eArgument1.Current, eArgument2.Current,
Variables));
129 eArgument1.Dispose();
130 eArgument2.Dispose();
133 return Argument1.Encapsulate(Elements,
this);
137 LinkedList<IElement> Argument1Result =
new LinkedList<IElement>();
139 foreach (
IElement Argument1Child
in Argument1Children)
141 LinkedList<IElement> Argument2Result =
new LinkedList<IElement>();
143 foreach (
IElement Argument2Child
in Argument2Children)
144 Argument2Result.AddLast(this.
Evaluate(Argument1Child, Argument2Child,
Variables));
146 Argument1Result.AddLast(
Argument2.Encapsulate(Argument2Result,
this));
149 return Argument1.Encapsulate(Argument1Result,
this);
164 object v1 =
Argument1.AssociatedObjectValue;
165 object v2 =
Argument2.AssociatedObjectValue;
253 object x =
Argument1.AssociatedObjectValue;
254 object y =
Argument2.AssociatedObjectValue;
256 if (x is
double xd && y is
double yd)
259 if (x is Complex xz && y is Complex yz)
262 if (x is
bool xb && y is
bool yb)
265 if (x is
string xs && y is
string ys)
275 arg1 = Q1.ToPhysicalQuantity().Magnitude;
285 arg2 = Q2.ToPhysicalQuantity().Magnitude;
294 LinkedList<IElement> Elements =
new LinkedList<IElement>();
299 return Argument2.Encapsulate(Elements,
this);
306 LinkedList<IElement> Elements =
new LinkedList<IElement>();
311 return Argument1.Encapsulate(Elements,
this);
315 ICollection<IElement> Argument1Children =
Argument1.ChildElements;
316 ICollection<IElement> Argument2Children =
Argument2.ChildElements;
318 if (Argument1Children.Count == Argument2Children.Count)
320 LinkedList<IElement> Elements =
new LinkedList<IElement>();
321 IEnumerator<IElement> eArgument1 = Argument1Children.GetEnumerator();
322 IEnumerator<IElement> eArgument2 = Argument2Children.GetEnumerator();
326 while (eArgument1.MoveNext() && eArgument2.MoveNext())
331 eArgument1.Dispose();
332 eArgument2.Dispose();
335 return Argument1.Encapsulate(Elements,
this);
339 LinkedList<IElement> Argument1Result =
new LinkedList<IElement>();
341 foreach (
IElement Argument1Child
in Argument1Children)
343 LinkedList<IElement> Argument2Result =
new LinkedList<IElement>();
345 foreach (
IElement Argument2Child
in Argument2Children)
348 Argument1Result.AddLast(
Argument2.Encapsulate(Argument2Result,
this));
351 return Argument1.Encapsulate(Argument1Result,
this);
366 object v1 =
Argument1.AssociatedObjectValue;
367 object v2 =
Argument2.AssociatedObjectValue;
Script runtime exception.
Class managing a script expression.
static bool UpgradeField(ref IElement E1, ref ISet Set1, ref IElement E2, ref ISet Set2)
Upgrades elements if necessary, to a common field extension, trying to make them compatible.
static bool TryConvert(object Value, Type DesiredType, out object Result)
Tries to convert an object Value to an object of type DesiredType .
Base class for funcions of two scalar variables.
virtual Task< IElement > EvaluateScalarAsync(double Argument1, double Argument2, Variables Variables)
Evaluates the function on two scalar arguments.
virtual IElement EvaluateScalar(double Argument1, double Argument2, Variables Variables)
Evaluates the function on two scalar arguments.
virtual IElement EvaluateScalar(Complex Argument1, Complex Argument2, Variables Variables)
Evaluates the function on two scalar arguments.
virtual IElement EvaluateScalar(IElement Argument1, IElement Argument2, Variables Variables)
Evaluates the function on two scalar arguments.
virtual Task< IElement > EvaluateScalarAsync(string Argument1, string Argument2, Variables Variables)
Evaluates the function on two scalar arguments.
virtual Task< IElement > EvaluateScalarAsync(bool Argument1, bool Argument2, Variables Variables)
Evaluates the function on two scalar arguments.
virtual Task< IElement > EvaluateScalarAsync(IElement Argument1, IElement Argument2, Variables Variables)
Evaluates the function on two scalar arguments.
override async Task< IElement > EvaluateAsync(IElement Argument1, IElement Argument2, Variables Variables)
Evaluates the function.
override IElement Evaluate(IElement Argument1, IElement Argument2, Variables Variables)
Evaluates the function.
virtual IElement EvaluateScalar(bool Argument1, bool Argument2, Variables Variables)
Evaluates the function on two scalar arguments.
virtual IElement EvaluateScalar(string Argument1, string Argument2, Variables Variables)
Evaluates the function on two scalar arguments.
FunctionTwoScalarVariables(ScriptNode Argument1, ScriptNode Argument2, int Start, int Length, Expression Expression)
Base class for funcions of one scalar variable.
virtual Task< IElement > EvaluateScalarAsync(Complex Argument1, Complex Argument2, Variables Variables)
Evaluates the function on two scalar arguments.
Base class for funcions of one variable.
ScriptNode Argument2
Function argument 2.
ScriptNode Argument1
Function argument 1.
Base class for all nodes in a parsed script tree.
int Length
Length of expression covered by node.
int Start
Start position in script expression.
Basic interface for all types of elements.
Basic interface for all types of sets.
Interface for objects that can be represented as a physical quantity.