Neuron®
The Neuron® is the basis for the creation of open and secure federated networks for smart societies.
Loading...
Searching...
No Matches
Sort.cs
1using System;
2using System.Collections.Generic;
8
10{
15 {
23 public Sort(ScriptNode Vector, int Start, int Length, Expression Expression)
24 : base(new ScriptNode[] { Vector },
25 new ArgumentType[] { ArgumentType.Vector },
27 {
28 }
29
38 public Sort(ScriptNode Vector, ScriptNode Order1, int Start, int Length, Expression Expression)
39 : base(new ScriptNode[] { Vector, Order1 },
40 new ArgumentType[] { ArgumentType.Vector, ArgumentType.Scalar },
42 {
43 }
44
54 public Sort(ScriptNode Vector, ScriptNode Order1, ScriptNode Order2, int Start, int Length, Expression Expression)
55 : base(new ScriptNode[] { Vector, Order1, Order2 },
56 new ArgumentType[] { ArgumentType.Vector, ArgumentType.Scalar, ArgumentType.Scalar },
58 {
59 }
60
71 public Sort(ScriptNode Vector, ScriptNode Order1, ScriptNode Order2, ScriptNode Order3, int Start, int Length, Expression Expression)
72 : base(new ScriptNode[] { Vector, Order1, Order2, Order3 },
73 new ArgumentType[] { ArgumentType.Vector, ArgumentType.Scalar, ArgumentType.Scalar, ArgumentType.Scalar },
75 {
76 }
77
89 public Sort(ScriptNode Vector, ScriptNode Order1, ScriptNode Order2, ScriptNode Order3, ScriptNode Order4, int Start, int Length, Expression Expression)
90 : base(new ScriptNode[] { Vector, Order1, Order2, Order3, Order4 },
91 new ArgumentType[] { ArgumentType.Vector, ArgumentType.Scalar, ArgumentType.Scalar, ArgumentType.Scalar, ArgumentType.Scalar },
93 {
94 }
95
108 public Sort(ScriptNode Vector, ScriptNode Order1, ScriptNode Order2, ScriptNode Order3, ScriptNode Order4, ScriptNode Order5,
110 : base(new ScriptNode[] { Vector, Order1, Order2, Order3, Order4, Order5 },
111 new ArgumentType[] { ArgumentType.Vector, ArgumentType.Scalar, ArgumentType.Scalar, ArgumentType.Scalar, ArgumentType.Scalar,
112 ArgumentType.Scalar },
114 {
115 }
116
130 public Sort(ScriptNode Vector, ScriptNode Order1, ScriptNode Order2, ScriptNode Order3, ScriptNode Order4, ScriptNode Order5,
131 ScriptNode Order6, int Start, int Length, Expression Expression)
132 : base(new ScriptNode[] { Vector, Order1, Order2, Order3, Order4, Order5, Order6 },
133 new ArgumentType[] { ArgumentType.Vector, ArgumentType.Scalar, ArgumentType.Scalar, ArgumentType.Scalar, ArgumentType.Scalar,
134 ArgumentType.Scalar, ArgumentType.Scalar },
136 {
137 }
138
153 public Sort(ScriptNode Vector, ScriptNode Order1, ScriptNode Order2, ScriptNode Order3, ScriptNode Order4, ScriptNode Order5,
154 ScriptNode Order6, ScriptNode Order7, int Start, int Length, Expression Expression)
155 : base(new ScriptNode[] { Vector, Order1, Order2, Order3, Order4, Order5, Order6, Order7 },
156 new ArgumentType[] { ArgumentType.Vector, ArgumentType.Scalar, ArgumentType.Scalar, ArgumentType.Scalar, ArgumentType.Scalar,
157 ArgumentType.Scalar, ArgumentType.Scalar, ArgumentType.Scalar },
159 {
160 }
161
177 public Sort(ScriptNode Vector, ScriptNode Order1, ScriptNode Order2, ScriptNode Order3, ScriptNode Order4, ScriptNode Order5,
178 ScriptNode Order6, ScriptNode Order7, ScriptNode Order8, int Start, int Length, Expression Expression)
179 : base(new ScriptNode[] { Vector, Order1, Order2, Order3, Order4, Order5, Order6, Order7, Order8 },
180 new ArgumentType[] { ArgumentType.Vector, ArgumentType.Scalar, ArgumentType.Scalar, ArgumentType.Scalar, ArgumentType.Scalar,
181 ArgumentType.Scalar, ArgumentType.Scalar, ArgumentType.Scalar, ArgumentType.Scalar },
183 {
184 }
185
202 public Sort(ScriptNode Vector, ScriptNode Order1, ScriptNode Order2, ScriptNode Order3, ScriptNode Order4, ScriptNode Order5,
203 ScriptNode Order6, ScriptNode Order7, ScriptNode Order8, ScriptNode Order9, int Start, int Length, Expression Expression)
204 : base(new ScriptNode[] { Vector, Order1, Order2, Order3, Order4, Order5, Order6, Order7, Order8, Order9 },
205 new ArgumentType[] { ArgumentType.Vector, ArgumentType.Scalar, ArgumentType.Scalar, ArgumentType.Scalar, ArgumentType.Scalar,
206 ArgumentType.Scalar, ArgumentType.Scalar, ArgumentType.Scalar, ArgumentType.Scalar, ArgumentType.Scalar },
208 {
209 }
210
214 public override string FunctionName => nameof(Sort);
215
219 public override string[] DefaultArgumentNames
220 {
221 get { return new string[] { "x", "o1", "o2", "o3", "o4", "o5", "o6", "o7", "o8", "o9" }; }
222 }
223
231 {
232 int c = Arguments.Length;
233
234 if (!(Arguments[0] is IVector Vector))
235 throw new ScriptRuntimeException("First argument muts be a vector.", this);
236
237 ICollection<IElement> Temp = Vector.VectorElements;
238 IElement[] Elements;
239 int i;
240
241 if (Temp is IElement[] V)
242 Elements = (IElement[])V.Clone();
243 else
244 {
245 Elements = new IElement[Temp.Count];
246 i = 0;
247
248 foreach (IElement E in Temp)
249 Elements[i++] = E;
250 }
251
252 if (c == 1)
253 Array.Sort(Elements, new ElementOrder(this));
254 else
255 {
256 IComparer<IElement>[] Comparers = new IComparer<IElement>[c];
258 object Obj;
259
260 for (i = 1; i < c; i++)
261 {
262 Element = Arguments[i];
264
265 if (Obj is double d)
266 {
267 int Sign = 1;
268
269 if (d < 0)
270 {
271 Sign = -1;
272 d = -d;
273 }
274
275 if (d == 0 || d > int.MaxValue || d != Math.Truncate(d))
276 throw new ScriptRuntimeException("Index values must be non-zero integers.", this);
277
278 Comparers[i - 1] = new IndexOrder(this, (int)(d - 1), Sign);
279 }
280 else if (Obj is string s)
281 {
282 int Sign = 1;
283
284 if (s.StartsWith("-"))
285 {
286 s = s.Substring(1);
287 Sign = -1;
288 }
289
290 Comparers[i - 1] = new PropertyOrder(this, s, Sign);
291 }
292 else if (Obj is ILambdaExpression Lambda)
293 {
294 if (Lambda.NrArguments != 2)
295 throw new ScriptRuntimeException("Lambda expressions must take exactly two parameters.", this);
296
297 Comparers[i - 1] = new LambdaOrder(Lambda, Variables);
298 }
299 else
300 {
301 throw new ScriptRuntimeException("Order parameters must be either lambda expressions, " +
302 "string values representing field names or numeric index values.", this);
303 }
304 }
305
306 Comparers[c - 1] = new ElementOrder(this);
307
308 Array.Sort(Elements, new CompoundOrder(Comparers));
309 }
310
311 return Vector.Encapsulate(Elements, this);
312 }
313
314 }
315}
Base class for all types of elements.
Definition: Element.cs:13
abstract object AssociatedObjectValue
Associated object value.
Definition: Element.cs:46
Class managing a script expression.
Definition: Expression.cs:39
Sort(v[,x1[,x2[,x3[,x4[,x5[,x6[,x7[,x8[,x9]]]]]]]]])
Definition: Sort.cs:15
Sort(ScriptNode Vector, ScriptNode Order1, ScriptNode Order2, ScriptNode Order3, ScriptNode Order4, ScriptNode Order5, ScriptNode Order6, ScriptNode Order7, ScriptNode Order8, ScriptNode Order9, int Start, int Length, Expression Expression)
Sort(v,x1,x2,x3,x4,x5,x6,x7,x8,x9)
Definition: Sort.cs:202
override string FunctionName
Name of the function
Definition: Sort.cs:214
override string[] DefaultArgumentNames
Default Argument names
Definition: Sort.cs:220
Sort(ScriptNode Vector, int Start, int Length, Expression Expression)
Sort(v)
Definition: Sort.cs:23
Sort(ScriptNode Vector, ScriptNode Order1, ScriptNode Order2, ScriptNode Order3, int Start, int Length, Expression Expression)
Sort(v,x1,x2,x3)
Definition: Sort.cs:71
Sort(ScriptNode Vector, ScriptNode Order1, ScriptNode Order2, ScriptNode Order3, ScriptNode Order4, int Start, int Length, Expression Expression)
Sort(v,x1,x2,x3,x4)
Definition: Sort.cs:89
Sort(ScriptNode Vector, ScriptNode Order1, ScriptNode Order2, ScriptNode Order3, ScriptNode Order4, ScriptNode Order5, ScriptNode Order6, ScriptNode Order7, int Start, int Length, Expression Expression)
Sort(v,x1,x2,x3,x4,x5,x6,x7)
Definition: Sort.cs:153
Sort(ScriptNode Vector, ScriptNode Order1, int Start, int Length, Expression Expression)
Sort(v,x1)
Definition: Sort.cs:38
Sort(ScriptNode Vector, ScriptNode Order1, ScriptNode Order2, ScriptNode Order3, ScriptNode Order4, ScriptNode Order5, ScriptNode Order6, int Start, int Length, Expression Expression)
Sort(v,x1,x2,x3,x4,x5,x6)
Definition: Sort.cs:130
override IElement Evaluate(IElement[] Arguments, Variables Variables)
Evaluates the function on a vector argument.
Definition: Sort.cs:230
Sort(ScriptNode Vector, ScriptNode Order1, ScriptNode Order2, ScriptNode Order3, ScriptNode Order4, ScriptNode Order5, int Start, int Length, Expression Expression)
Sort(v,x1,x2,x3,x4,x5)
Definition: Sort.cs:108
Sort(ScriptNode Vector, ScriptNode Order1, ScriptNode Order2, int Start, int Length, Expression Expression)
Sort(v,x1,x2)
Definition: Sort.cs:54
Sort(ScriptNode Vector, ScriptNode Order1, ScriptNode Order2, ScriptNode Order3, ScriptNode Order4, ScriptNode Order5, ScriptNode Order6, ScriptNode Order7, ScriptNode Order8, int Start, int Length, Expression Expression)
Sort(v,x1,x2,x3,x4,x5,x6,x7,x8)
Definition: Sort.cs:177
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
Orders elements based on a sequence of comparers.
Orders elements based on their values.
Definition: ElementOrder.cs:14
Orders vectors based on values of elements at a given index position in the vectors.
Definition: IndexOrder.cs:13
Orders elements based logic defined in a lambda expression.
Definition: LambdaOrder.cs:12
Orders elements based on values of a given property.
Collection of variables.
Definition: Variables.cs:25
Basic interface for all types of elements.
Definition: IElement.cs:20
Basic interface for vectors.
Definition: IVector.cs:9
Base interface for lambda expressions.
ArgumentType
Type of parameter used in a function definition or a lambda definition.
Definition: IFunction.cs:9