Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
TemplateMatch.cs
Go to the documentation of this file.
3
4namespace System.Xml.Xsl.Xslt;
5
6internal sealed class TemplateMatch
7{
8 internal sealed class TemplateMatchComparer : IComparer<TemplateMatch>
9 {
11 {
12 if (!(x._priority > y._priority))
13 {
14 if (!(x._priority < y._priority))
15 {
17 }
18 return -1;
19 }
20 return 1;
21 }
22 }
23
25
26 private readonly Template _template;
27
28 private readonly double _priority;
29
31
32 private QilName _qname;
33
34 private readonly QilIterator _iterator;
35
37
39
40 public QilName QName => _qname;
41
43
45
47
49 {
50 _template = template;
51 _priority = (double.IsNaN(template.Priority) ? XPathPatternBuilder.GetPriority(filter) : template.Priority);
52 _iterator = filter.Variable;
53 _condition = filter.Body;
56 }
57
58 private void NipOffTypeNameCheck()
59 {
60 QilBinary[] array = new QilBinary[4];
61 int num = -1;
64 _qname = null;
65 while (qilNode.NodeType == QilNodeType.And)
66 {
67 qilNode = (array[++num & 3] = (QilBinary)qilNode).Left;
68 }
69 if (qilNode.NodeType != QilNodeType.IsType)
70 {
71 return;
72 }
74 if (qilBinary.Left != _iterator || qilBinary.Right.NodeType != QilNodeType.LiteralType)
75 {
76 return;
77 }
78 XmlNodeKindFlags nodeKinds = qilBinary.Right.XmlType.NodeKinds;
79 if (!Bits.ExactlyOne((uint)nodeKinds))
80 {
81 return;
82 }
85 QilBinary qilBinary2 = array[num & 3];
86 if (qilBinary2 != null && qilBinary2.Right.NodeType == QilNodeType.Eq)
87 {
89 if (qilBinary3.Left.NodeType == QilNodeType.NameOf && ((QilUnary)qilBinary3.Left).Child == _iterator && qilBinary3.Right.NodeType == QilNodeType.LiteralQName)
90 {
92 _qname = (QilName)((QilLiteral)qilBinary3.Right).Value;
93 num--;
94 }
95 }
96 QilBinary qilBinary4 = array[num & 3];
97 QilBinary qilBinary5 = array[--num & 3];
98 if (qilBinary5 != null)
99 {
101 }
102 else if (qilBinary4 != null)
103 {
104 _condition = qilBinary4.Right;
105 }
106 else
107 {
108 _condition = null;
109 }
110 }
111}
static bool ExactlyOne(uint num)
Definition Bits.cs:15
int Compare(TemplateMatch x, TemplateMatch y)
TemplateMatch(Template template, QilLoop filter)