Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
XPathSortComparer.cs
Go to the documentation of this file.
4
6
7internal sealed class XPathSortComparer : IComparer<SortKey>
8{
9 private Query[] _expressions;
10
12
13 private int _numSorts;
14
15 public int NumSorts => _numSorts;
16
17 public XPathSortComparer(int size)
18 {
19 if (size <= 0)
20 {
21 size = 3;
22 }
23 _expressions = new Query[size];
24 _comparers = new IComparer[size];
25 }
26
28 : this(3)
29 {
30 }
31
32 public void AddSort(Query evalQuery, IComparer comparer)
33 {
34 if (_numSorts == _expressions.Length)
35 {
36 Query[] array = new Query[_numSorts * 2];
38 for (int i = 0; i < _numSorts; i++)
39 {
40 array[i] = _expressions[i];
41 array2[i] = _comparers[i];
42 }
43 _expressions = array;
45 }
46 if (evalQuery.StaticType == XPathResultType.NodeSet || evalQuery.StaticType == XPathResultType.Any)
47 {
48 evalQuery = new StringFunctions(Function.FunctionType.FuncString, new Query[1] { evalQuery });
49 }
51 _comparers[_numSorts] = comparer;
52 _numSorts++;
53 }
54
55 public Query Expression(int i)
56 {
57 return _expressions[i];
58 }
59
61 {
62 int num = 0;
63 for (int i = 0; i < x.NumKeys; i++)
64 {
65 num = _comparers[i].Compare(x[i], y[i]);
66 if (num != 0)
67 {
68 return num;
69 }
70 }
71 return x.OriginalPosition - y.OriginalPosition;
72 }
73
75 {
77 for (int i = 0; i < _numSorts; i++)
78 {
79 xPathSortComparer._comparers[i] = _comparers[i];
80 xPathSortComparer._expressions[i] = (Query)_expressions[i].Clone();
81 }
82 xPathSortComparer._numSorts = _numSorts;
83 return xPathSortComparer;
84 }
85}
void AddSort(Query evalQuery, IComparer comparer)