Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
ArrayHelper.cs
Go to the documentation of this file.
1namespace System.Xml;
2
3internal abstract class ArrayHelper<TArgument, TArray>
4{
5 public TArray[] ReadArray(XmlDictionaryReader reader, TArgument localName, TArgument namespaceUri, int maxArrayLength)
6 {
7 TArray[][] array = null;
8 TArray[] array2 = null;
9 int num = 0;
10 int num2 = 0;
11 if (reader.TryGetArrayLength(out var count))
12 {
13 if (count > 65535)
14 {
15 count = 65535;
16 }
17 }
18 else
19 {
20 count = 32;
21 }
22 while (true)
23 {
24 array2 = new TArray[count];
25 int i;
26 int num3;
27 for (i = 0; i < array2.Length; i += num3)
28 {
29 num3 = ReadArray(reader, localName, namespaceUri, array2, i, array2.Length - i);
30 if (num3 == 0)
31 {
32 break;
33 }
34 }
35 num2 += i;
36 if (i < array2.Length || reader.NodeType == XmlNodeType.EndElement)
37 {
38 break;
39 }
40 if (array == null)
41 {
42 array = new TArray[32][];
43 }
44 array[num++] = array2;
45 count *= 2;
46 }
47 if (num2 != array2.Length || num > 0)
48 {
49 TArray[] array3 = new TArray[num2];
50 int num4 = 0;
51 for (int j = 0; j < num; j++)
52 {
53 Array.Copy(array[j], 0, array3, num4, array[j].Length);
54 num4 += array[j].Length;
55 }
57 array2 = array3;
58 }
59 return array2;
60 }
61
62 public void WriteArray(XmlDictionaryWriter writer, string prefix, TArgument localName, TArgument namespaceUri, XmlDictionaryReader reader)
63 {
64 int count = ((!reader.TryGetArrayLength(out count)) ? 256 : Math.Min(count, 256));
65 TArray[] array = new TArray[count];
66 while (true)
67 {
68 int num = ReadArray(reader, localName, namespaceUri, array, 0, array.Length);
69 if (num != 0)
70 {
71 WriteArray(writer, prefix, localName, namespaceUri, array, 0, num);
72 continue;
73 }
74 break;
75 }
76 }
77
78 protected abstract int ReadArray(XmlDictionaryReader reader, TArgument localName, TArgument namespaceUri, TArray[] array, int offset, int count);
79
80 protected abstract void WriteArray(XmlDictionaryWriter writer, string prefix, TArgument localName, TArgument namespaceUri, TArray[] array, int offset, int count);
81}
static unsafe void Copy(Array sourceArray, Array destinationArray, int length)
Definition Array.cs:624
static byte Min(byte val1, byte val2)
Definition Math.cs:912
void WriteArray(XmlDictionaryWriter writer, string prefix, TArgument localName, TArgument namespaceUri, XmlDictionaryReader reader)
TArray[] ReadArray(XmlDictionaryReader reader, TArgument localName, TArgument namespaceUri, int maxArrayLength)
Definition ArrayHelper.cs:5
void WriteArray(XmlDictionaryWriter writer, string prefix, TArgument localName, TArgument namespaceUri, TArray[] array, int offset, int count)
int ReadArray(XmlDictionaryReader reader, TArgument localName, TArgument namespaceUri, TArray[] array, int offset, int count)
virtual bool TryGetArrayLength(out int count)
XmlNodeType NodeType
Definition XmlReader.cs:62