Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
OptimizerPatterns.cs
Go to the documentation of this file.
2
4
5internal sealed class OptimizerPatterns : IQilAnnotation
6{
7 private static readonly int s_patternCount = Enum.GetValues(typeof(OptimizerPatternName)).Length;
8
9 private int _patterns;
10
11 private bool _isReadOnly;
12
13 private object _arg0;
14
15 private object _arg1;
16
17 private object _arg2;
18
19 private static volatile OptimizerPatterns s_zeroOrOneDefault;
20
21 private static volatile OptimizerPatterns s_maybeManyDefault;
22
23 private static volatile OptimizerPatterns s_dodDefault;
24
26 {
28 if (optimizerPatterns == null)
29 {
30 if (!nd.XmlType.MaybeMany)
31 {
32 if (s_zeroOrOneDefault == null)
33 {
35 optimizerPatterns.AddPattern(OptimizerPatternName.IsDocOrderDistinct);
36 optimizerPatterns.AddPattern(OptimizerPatternName.SameDepth);
39 }
40 else
41 {
43 }
44 }
45 else if (nd.XmlType.IsDod)
46 {
47 if (s_dodDefault == null)
48 {
50 optimizerPatterns.AddPattern(OptimizerPatternName.IsDocOrderDistinct);
53 }
54 else
55 {
57 }
58 }
59 else if (s_maybeManyDefault == null)
60 {
64 }
65 else
66 {
68 }
69 }
70 return optimizerPatterns;
71 }
72
74 {
77 if (optimizerPatterns == null || optimizerPatterns._isReadOnly)
78 {
80 if (!nd.XmlType.MaybeMany)
81 {
83 optimizerPatterns.AddPattern(OptimizerPatternName.SameDepth);
84 }
85 else if (nd.XmlType.IsDod)
86 {
87 optimizerPatterns.AddPattern(OptimizerPatternName.IsDocOrderDistinct);
88 }
89 }
90 return optimizerPatterns;
91 }
92
93 public static void Inherit(QilNode ndSrc, QilNode ndDst, OptimizerPatternName pattern)
94 {
96 if (optimizerPatterns.MatchesPattern(pattern))
97 {
99 optimizerPatterns2.AddPattern(pattern);
100 switch (pattern)
101 {
102 case OptimizerPatternName.Step:
104 optimizerPatterns2.AddArgument(OptimizerPatternArgument.StepInput, optimizerPatterns.GetArgument(OptimizerPatternArgument.StepInput));
105 break;
106 case OptimizerPatternName.FilterElements:
107 optimizerPatterns2.AddArgument(OptimizerPatternArgument.ElementQName, optimizerPatterns.GetArgument(OptimizerPatternArgument.ElementQName));
108 break;
109 case OptimizerPatternName.FilterContentKind:
110 optimizerPatterns2.AddArgument(OptimizerPatternArgument.ElementQName, optimizerPatterns.GetArgument(OptimizerPatternArgument.ElementQName));
111 break;
112 case OptimizerPatternName.EqualityIndex:
114 optimizerPatterns2.AddArgument(OptimizerPatternArgument.StepInput, optimizerPatterns.GetArgument(OptimizerPatternArgument.StepInput));
115 break;
116 case OptimizerPatternName.DodReverse:
117 case OptimizerPatternName.JoinAndDod:
118 optimizerPatterns2.AddArgument(OptimizerPatternArgument.ElementQName, optimizerPatterns.GetArgument(OptimizerPatternArgument.ElementQName));
119 break;
120 case OptimizerPatternName.MaxPosition:
121 optimizerPatterns2.AddArgument(OptimizerPatternArgument.ElementQName, optimizerPatterns.GetArgument(OptimizerPatternArgument.ElementQName));
122 break;
123 case OptimizerPatternName.SingleTextRtf:
124 optimizerPatterns2.AddArgument(OptimizerPatternArgument.ElementQName, optimizerPatterns.GetArgument(OptimizerPatternArgument.ElementQName));
125 break;
126 case OptimizerPatternName.FilterAttributeKind:
127 case OptimizerPatternName.IsDocOrderDistinct:
128 case OptimizerPatternName.IsPositional:
129 case OptimizerPatternName.SameDepth:
130 break;
131 }
132 }
133 }
134
136 {
137 switch ((int)argId)
138 {
139 case 0:
140 _arg0 = arg;
141 break;
142 case 1:
143 _arg1 = arg;
144 break;
145 case 2:
146 _arg2 = arg;
147 break;
148 }
149 }
150
152 {
153 object result = null;
154 switch ((int)argNum)
155 {
156 case 0:
157 result = _arg0;
158 break;
159 case 1:
160 result = _arg1;
161 break;
162 case 2:
163 result = _arg2;
164 break;
165 }
166 return result;
167 }
168
169 public void AddPattern(OptimizerPatternName pattern)
170 {
171 _patterns |= 1 << (int)pattern;
172 }
173
175 {
176 return (_patterns & (1 << (int)pattern)) != 0;
177 }
178
179 public override string ToString()
180 {
181 string text = "";
182 for (int i = 0; i < s_patternCount; i++)
183 {
185 {
186 if (text.Length != 0)
187 {
188 text += ", ";
189 }
190 string text2 = text;
193 }
194 }
195 return text;
196 }
197}
static Array GetValues(Type enumType)
Definition Enum.cs:323
static volatile OptimizerPatterns s_dodDefault
static OptimizerPatterns Write(QilNode nd)
static void Inherit(QilNode ndSrc, QilNode ndDst, OptimizerPatternName pattern)
void AddArgument(OptimizerPatternArgument argId, object arg)
static volatile OptimizerPatterns s_maybeManyDefault
bool MatchesPattern(OptimizerPatternName pattern)
void AddPattern(OptimizerPatternName pattern)
static OptimizerPatterns Read(QilNode nd)
static volatile OptimizerPatterns s_zeroOrOneDefault
object GetArgument(OptimizerPatternArgument argNum)
static XmlILAnnotation Write(QilNode nd)