Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
UnionIterator.cs
Go to the documentation of this file.
3
5
7public struct UnionIterator
8{
9 private enum IteratorState
10 {
16 }
17
19
21
23
25
27
29 {
31 _state = IteratorState.InitLeft;
32 }
33
35 {
36 switch (_state)
37 {
38 case IteratorState.InitLeft:
40 _state = IteratorState.NeedRight;
41 return SetIteratorResult.InitRightIterator;
42 case IteratorState.NeedLeft:
44 _state = IteratorState.LeftIsCurrent;
45 break;
46 case IteratorState.NeedRight:
48 _state = IteratorState.RightIsCurrent;
49 break;
50 case IteratorState.LeftIsCurrent:
51 _state = IteratorState.NeedLeft;
52 return SetIteratorResult.NeedLeftNode;
53 case IteratorState.RightIsCurrent:
54 _state = IteratorState.NeedRight;
55 return SetIteratorResult.NeedRightNode;
56 }
57 if (_navCurr == null)
58 {
59 if (_navOther == null)
60 {
61 return SetIteratorResult.NoMoreNodes;
62 }
63 Swap();
64 }
65 else if (_navOther != null)
66 {
68 if (num == 0)
69 {
70 if (_state == IteratorState.LeftIsCurrent)
71 {
72 _state = IteratorState.NeedLeft;
73 return SetIteratorResult.NeedLeftNode;
74 }
75 _state = IteratorState.NeedRight;
76 return SetIteratorResult.NeedRightNode;
77 }
78 if (num < 0)
79 {
80 Swap();
81 }
82 }
83 return SetIteratorResult.HaveCurrentNode;
84 }
85
86 private void Swap()
87 {
91 if (_state == IteratorState.LeftIsCurrent)
92 {
93 _state = IteratorState.RightIsCurrent;
94 }
95 else
96 {
97 _state = IteratorState.LeftIsCurrent;
98 }
99 }
100}
int ComparePosition(XPathNavigator navigatorThis, XPathNavigator navigatorThat)
void Create(XmlQueryRuntime runtime)
SetIteratorResult MoveNext(XPathNavigator nestedNavigator)