Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
XPathNodeInfoTable.cs
Go to the documentation of this file.
1using System.Text;
3
5
6internal sealed class XPathNodeInfoTable
7{
9
10 private int _sizeTable;
11
13
15 {
17 _sizeTable = 0;
18 }
19
20 public XPathNodeInfoAtom Create(string localName, string namespaceUri, string prefix, string baseUri, XPathNode[] pageParent, XPathNode[] pageSibling, XPathNode[] pageSimilar, XPathDocument doc, int lineNumBase, int linePosBase)
21 {
22 XPathNodeInfoAtom xPathNodeInfoAtom;
23 if (_infoCached == null)
24 {
25 xPathNodeInfoAtom = new XPathNodeInfoAtom(localName, namespaceUri, prefix, baseUri, pageParent, pageSibling, pageSimilar, doc, lineNumBase, linePosBase);
26 }
27 else
28 {
29 xPathNodeInfoAtom = _infoCached;
30 _infoCached = xPathNodeInfoAtom.Next;
31 xPathNodeInfoAtom.Init(localName, namespaceUri, prefix, baseUri, pageParent, pageSibling, pageSimilar, doc, lineNumBase, linePosBase);
32 }
33 return Atomize(xPathNodeInfoAtom);
34 }
35
37 {
38 for (XPathNodeInfoAtom xPathNodeInfoAtom = _hashTable[info.GetHashCode() & (_hashTable.Length - 1)]; xPathNodeInfoAtom != null; xPathNodeInfoAtom = xPathNodeInfoAtom.Next)
39 {
40 if (info.Equals(xPathNodeInfoAtom))
41 {
42 info.Next = _infoCached;
43 _infoCached = info;
44 return xPathNodeInfoAtom;
45 }
46 }
47 if (_sizeTable >= _hashTable.Length)
48 {
49 XPathNodeInfoAtom[] hashTable = _hashTable;
50 _hashTable = new XPathNodeInfoAtom[hashTable.Length * 2];
51 for (int i = 0; i < hashTable.Length; i++)
52 {
53 XPathNodeInfoAtom xPathNodeInfoAtom = hashTable[i];
54 while (xPathNodeInfoAtom != null)
55 {
56 XPathNodeInfoAtom next = xPathNodeInfoAtom.Next;
57 AddInfo(xPathNodeInfoAtom);
58 xPathNodeInfoAtom = next;
59 }
60 }
61 }
62 AddInfo(info);
63 return info;
64 }
65
66 private void AddInfo(XPathNodeInfoAtom info)
67 {
68 int num = info.GetHashCode() & (_hashTable.Length - 1);
69 info.Next = _hashTable[num];
70 _hashTable[num] = info;
71 _sizeTable++;
72 }
73
74 public override string ToString()
75 {
76 StringBuilder stringBuilder = new StringBuilder();
77 for (int i = 0; i < _hashTable.Length; i++)
78 {
79 StringBuilder stringBuilder2 = stringBuilder;
81 handler.AppendFormatted(i, 4);
82 handler.AppendLiteral(": ");
83 stringBuilder2.Append(ref handler);
84 for (XPathNodeInfoAtom xPathNodeInfoAtom = _hashTable[i]; xPathNodeInfoAtom != null; xPathNodeInfoAtom = xPathNodeInfoAtom.Next)
85 {
86 if (xPathNodeInfoAtom != _hashTable[i])
87 {
88 stringBuilder.Append("\n ");
89 }
90 stringBuilder.Append(xPathNodeInfoAtom);
91 }
92 stringBuilder.Append('\n');
93 }
94 return stringBuilder.ToString();
95 }
96}
void Init(string localName, string namespaceUri, string prefix, string baseUri, XPathNode[] pageParent, XPathNode[] pageSibling, XPathNode[] pageSimilar, XPathDocument doc, int lineNumBase, int linePosBase)
XPathNodeInfoAtom Atomize(XPathNodeInfoAtom info)
XPathNodeInfoAtom Create(string localName, string namespaceUri, string prefix, string baseUri, XPathNode[] pageParent, XPathNode[] pageSibling, XPathNode[] pageSimilar, XPathDocument doc, int lineNumBase, int linePosBase)
override string ToString()
StringBuilder Append(char value, int repeatCount)