Neuron®
The Neuron® is the basis for the creation of open and secure federated networks for smart societies.
Loading...
Searching...
No Matches
Integer.cs
1using System;
2using System.Collections.Generic;
3using System.Numerics;
4using System.Threading.Tasks;
9
11{
16 {
26 {
27 }
28
32 public override string FunctionName => nameof(Integer);
33
37 public override string[] Aliases
38 {
39 get { return new string[] { "int" }; }
40 }
41
49 {
50 return new DoubleNumber(Math.Truncate(Argument));
51 }
52
60 {
61 return new DoubleNumber(Argument ? 1 : 0);
62 }
63
71 {
72 if (!Expression.TryParse(Argument, out double d))
73 throw new ScriptException("Not an integer.");
74
75 return new DoubleNumber(Math.Truncate(d));
76 }
77
85 {
86 return this.EvaluateScalar(Argument.ToString(), Variables);
87 }
88
95 public override Task<IElement> EvaluateScalarAsync(IElement Argument, Variables Variables)
96 {
97 return Task.FromResult(this.EvaluateScalar(Argument, Variables));
98 }
99
106 public override PatternMatchResult PatternMatch(IElement CheckAgainst, Dictionary<string, IElement> AlreadyFound)
107 {
108 object Obj = CheckAgainst.AssociatedObjectValue;
109
110 if (!(Obj is BigInteger))
111 {
112 if (Obj is double d)
113 {
114 if (Math.Truncate(d) != d)
115 return PatternMatchResult.NoMatch;
116 }
117 else if (Obj is string s)
118 {
119 if (int.TryParse(s, out int i))
120 return this.Argument.PatternMatch(new DoubleNumber(i), AlreadyFound);
121 else if (long.TryParse(s, out long l) && ((long)((double)l)) == l)
122 return this.Argument.PatternMatch(new DoubleNumber(l), AlreadyFound);
123 else if (BigInteger.TryParse(s, out BigInteger I))
124 return this.Argument.PatternMatch(new Objects.Integer(I), AlreadyFound);
125 }
126 else
127 return PatternMatchResult.NoMatch;
128 }
129
130 return this.Argument.PatternMatch(CheckAgainst, AlreadyFound);
131 }
132 }
133}
Base class for script exceptions.
Class managing a script expression.
Definition: Expression.cs:39
static bool TryParse(string s, out double Value)
Tries to parse a double-precision floating-point value.
Definition: Expression.cs:4517
override IElement EvaluateScalar(string Argument, Variables Variables)
Evaluates the function on a scalar argument.
Definition: Integer.cs:70
override string[] Aliases
Optional aliases. If there are no aliases for the function, null is returned.
Definition: Integer.cs:38
Integer(ScriptNode Argument, int Start, int Length, Expression Expression)
Integer(x)
Definition: Integer.cs:24
override IElement EvaluateScalar(bool Argument, Variables Variables)
Evaluates the function on a scalar argument.
Definition: Integer.cs:59
override IElement EvaluateScalar(IElement Argument, Variables Variables)
Evaluates the function on a scalar argument.
Definition: Integer.cs:84
override Task< IElement > EvaluateScalarAsync(IElement Argument, Variables Variables)
Evaluates the function on a scalar argument.
Definition: Integer.cs:95
override string FunctionName
Name of the function
Definition: Integer.cs:32
override PatternMatchResult PatternMatch(IElement CheckAgainst, Dictionary< string, IElement > AlreadyFound)
Performs a pattern match operation.
Definition: Integer.cs:106
override IElement EvaluateScalar(double Argument, Variables Variables)
Evaluates the function on a scalar argument.
Definition: Integer.cs:48
Base class for funcions of one scalar variable.
ScriptNode Argument
Function argument.
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
virtual PatternMatchResult PatternMatch(IElement CheckAgainst, Dictionary< string, IElement > AlreadyFound)
Performs a pattern match operation.
Definition: ScriptNode.cs:169
int Start
Start position in script expression.
Definition: ScriptNode.cs:92
Collection of variables.
Definition: Variables.cs:25
Basic interface for all types of elements.
Definition: IElement.cs:20
object AssociatedObjectValue
Associated object value.
Definition: IElement.cs:33
PatternMatchResult
Status result of a pattern matching operation.
Definition: ScriptNode.cs:17