Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
XmlBinaryWriter.cs
Go to the documentation of this file.
1using System.IO;
3
4namespace System.Xml;
5
7{
9
10 private char[] _chars;
11
12 private byte[] _bytes;
13
27
29 {
30 return new XmlSigningNodeWriter(text: false);
31 }
32
33 protected override void WriteTextNode(XmlDictionaryReader reader, bool attribute)
34 {
35 Type valueType = reader.ValueType;
36 if (valueType == typeof(string))
37 {
39 {
41 }
42 else if (reader.CanReadValueChunk)
43 {
44 if (_chars == null)
45 {
46 _chars = new char[256];
47 }
48 int count;
49 while ((count = reader.ReadValueChunk(_chars, 0, _chars.Length)) > 0)
50 {
52 }
53 }
54 else
55 {
56 WriteString(reader.Value);
57 }
58 if (!attribute)
59 {
60 reader.Read();
61 }
62 }
63 else if (valueType == typeof(byte[]))
64 {
65 if (reader.CanReadBinaryContent)
66 {
67 if (_bytes == null)
68 {
69 _bytes = new byte[384];
70 }
71 int count2;
72 while ((count2 = reader.ReadValueAsBase64(_bytes, 0, _bytes.Length)) > 0)
73 {
75 }
76 }
77 else
78 {
79 WriteString(reader.Value);
80 }
81 if (!attribute)
82 {
83 reader.Read();
84 }
85 }
86 else if (valueType == typeof(int))
87 {
89 }
90 else if (valueType == typeof(long))
91 {
93 }
94 else if (valueType == typeof(bool))
95 {
97 }
98 else if (valueType == typeof(double))
99 {
101 }
102 else if (valueType == typeof(DateTime))
103 {
105 }
106 else if (valueType == typeof(float))
107 {
109 }
110 else if (valueType == typeof(decimal))
111 {
113 }
114 else if (valueType == typeof(UniqueId))
115 {
117 }
118 else if (valueType == typeof(Guid))
119 {
121 }
122 else if (valueType == typeof(TimeSpan))
123 {
125 }
126 else
127 {
129 }
130 }
131
132 private void WriteStartArray(string prefix, string localName, string namespaceUri, int count)
133 {
136 WriteStartElement(prefix, localName, namespaceUri);
138 }
139
140 private void WriteStartArray(string prefix, XmlDictionaryString localName, XmlDictionaryString namespaceUri, int count)
141 {
144 WriteStartElement(prefix, localName, namespaceUri);
146 }
147
148 private void WriteEndArray()
149 {
150 EndArray();
151 }
152
153 private unsafe void UnsafeWriteArray(string prefix, string localName, string namespaceUri, XmlBinaryNodeType nodeType, int count, byte* array, byte* arrayMax)
154 {
155 WriteStartArray(prefix, localName, namespaceUri, count);
158 }
159
160 private unsafe void UnsafeWriteArray(string prefix, XmlDictionaryString localName, XmlDictionaryString namespaceUri, XmlBinaryNodeType nodeType, int count, byte* array, byte* arrayMax)
161 {
162 WriteStartArray(prefix, localName, namespaceUri, count);
165 }
166
190
191 public unsafe override void WriteArray(string prefix, string localName, string namespaceUri, bool[] array, int offset, int count)
192 {
194 if (count > 0)
195 {
196 fixed (bool* ptr = &array[offset])
197 {
198 UnsafeWriteArray(prefix, localName, namespaceUri, XmlBinaryNodeType.BoolTextWithEndElement, count, (byte*)ptr, (byte*)(ptr + count));
199 }
200 }
201 }
202
203 public unsafe override void WriteArray(string prefix, XmlDictionaryString localName, XmlDictionaryString namespaceUri, bool[] array, int offset, int count)
204 {
206 if (count > 0)
207 {
208 fixed (bool* ptr = &array[offset])
209 {
210 UnsafeWriteArray(prefix, localName, namespaceUri, XmlBinaryNodeType.BoolTextWithEndElement, count, (byte*)ptr, (byte*)(ptr + count));
211 }
212 }
213 }
214
215 public unsafe override void WriteArray(string prefix, string localName, string namespaceUri, short[] array, int offset, int count)
216 {
218 if (count > 0)
219 {
220 fixed (short* ptr = &array[offset])
221 {
222 UnsafeWriteArray(prefix, localName, namespaceUri, XmlBinaryNodeType.Int16TextWithEndElement, count, (byte*)ptr, (byte*)(ptr + count));
223 }
224 }
225 }
226
227 public unsafe override void WriteArray(string prefix, XmlDictionaryString localName, XmlDictionaryString namespaceUri, short[] array, int offset, int count)
228 {
230 if (count > 0)
231 {
232 fixed (short* ptr = &array[offset])
233 {
234 UnsafeWriteArray(prefix, localName, namespaceUri, XmlBinaryNodeType.Int16TextWithEndElement, count, (byte*)ptr, (byte*)(ptr + count));
235 }
236 }
237 }
238
239 public unsafe override void WriteArray(string prefix, string localName, string namespaceUri, int[] array, int offset, int count)
240 {
242 if (count > 0)
243 {
244 fixed (int* ptr = &array[offset])
245 {
246 UnsafeWriteArray(prefix, localName, namespaceUri, XmlBinaryNodeType.Int32TextWithEndElement, count, (byte*)ptr, (byte*)(ptr + count));
247 }
248 }
249 }
250
251 public unsafe override void WriteArray(string prefix, XmlDictionaryString localName, XmlDictionaryString namespaceUri, int[] array, int offset, int count)
252 {
254 if (count > 0)
255 {
256 fixed (int* ptr = &array[offset])
257 {
258 UnsafeWriteArray(prefix, localName, namespaceUri, XmlBinaryNodeType.Int32TextWithEndElement, count, (byte*)ptr, (byte*)(ptr + count));
259 }
260 }
261 }
262
263 public unsafe override void WriteArray(string prefix, string localName, string namespaceUri, long[] array, int offset, int count)
264 {
266 if (count > 0)
267 {
268 fixed (long* ptr = &array[offset])
269 {
270 UnsafeWriteArray(prefix, localName, namespaceUri, XmlBinaryNodeType.Int64TextWithEndElement, count, (byte*)ptr, (byte*)(ptr + count));
271 }
272 }
273 }
274
275 public unsafe override void WriteArray(string prefix, XmlDictionaryString localName, XmlDictionaryString namespaceUri, long[] array, int offset, int count)
276 {
278 if (count > 0)
279 {
280 fixed (long* ptr = &array[offset])
281 {
282 UnsafeWriteArray(prefix, localName, namespaceUri, XmlBinaryNodeType.Int64TextWithEndElement, count, (byte*)ptr, (byte*)(ptr + count));
283 }
284 }
285 }
286
287 public unsafe override void WriteArray(string prefix, string localName, string namespaceUri, float[] array, int offset, int count)
288 {
290 if (count > 0)
291 {
292 fixed (float* ptr = &array[offset])
293 {
294 UnsafeWriteArray(prefix, localName, namespaceUri, XmlBinaryNodeType.FloatTextWithEndElement, count, (byte*)ptr, (byte*)(ptr + count));
295 }
296 }
297 }
298
299 public unsafe override void WriteArray(string prefix, XmlDictionaryString localName, XmlDictionaryString namespaceUri, float[] array, int offset, int count)
300 {
302 if (count > 0)
303 {
304 fixed (float* ptr = &array[offset])
305 {
306 UnsafeWriteArray(prefix, localName, namespaceUri, XmlBinaryNodeType.FloatTextWithEndElement, count, (byte*)ptr, (byte*)(ptr + count));
307 }
308 }
309 }
310
311 public unsafe override void WriteArray(string prefix, string localName, string namespaceUri, double[] array, int offset, int count)
312 {
314 if (count > 0)
315 {
316 fixed (double* ptr = &array[offset])
317 {
318 UnsafeWriteArray(prefix, localName, namespaceUri, XmlBinaryNodeType.DoubleTextWithEndElement, count, (byte*)ptr, (byte*)(ptr + count));
319 }
320 }
321 }
322
323 public unsafe override void WriteArray(string prefix, XmlDictionaryString localName, XmlDictionaryString namespaceUri, double[] array, int offset, int count)
324 {
326 if (count > 0)
327 {
328 fixed (double* ptr = &array[offset])
329 {
330 UnsafeWriteArray(prefix, localName, namespaceUri, XmlBinaryNodeType.DoubleTextWithEndElement, count, (byte*)ptr, (byte*)(ptr + count));
331 }
332 }
333 }
334
335 public unsafe override void WriteArray(string prefix, string localName, string namespaceUri, decimal[] array, int offset, int count)
336 {
338 if (count > 0)
339 {
340 fixed (decimal* ptr = &array[offset])
341 {
342 UnsafeWriteArray(prefix, localName, namespaceUri, XmlBinaryNodeType.DecimalTextWithEndElement, count, (byte*)ptr, (byte*)(ptr + count));
343 }
344 }
345 }
346
347 public unsafe override void WriteArray(string prefix, XmlDictionaryString localName, XmlDictionaryString namespaceUri, decimal[] array, int offset, int count)
348 {
350 if (count > 0)
351 {
352 fixed (decimal* ptr = &array[offset])
353 {
354 UnsafeWriteArray(prefix, localName, namespaceUri, XmlBinaryNodeType.DecimalTextWithEndElement, count, (byte*)ptr, (byte*)(ptr + count));
355 }
356 }
357 }
358
359 public override void WriteArray(string prefix, string localName, string namespaceUri, DateTime[] array, int offset, int count)
360 {
362 if (count > 0)
363 {
364 WriteStartArray(prefix, localName, namespaceUri, count);
367 }
368 }
369
370 public override void WriteArray(string prefix, XmlDictionaryString localName, XmlDictionaryString namespaceUri, DateTime[] array, int offset, int count)
371 {
373 if (count > 0)
374 {
375 WriteStartArray(prefix, localName, namespaceUri, count);
378 }
379 }
380
381 public override void WriteArray(string prefix, string localName, string namespaceUri, Guid[] array, int offset, int count)
382 {
384 if (count > 0)
385 {
386 WriteStartArray(prefix, localName, namespaceUri, count);
389 }
390 }
391
392 public override void WriteArray(string prefix, XmlDictionaryString localName, XmlDictionaryString namespaceUri, Guid[] array, int offset, int count)
393 {
395 if (count > 0)
396 {
397 WriteStartArray(prefix, localName, namespaceUri, count);
400 }
401 }
402
403 public override void WriteArray(string prefix, string localName, string namespaceUri, TimeSpan[] array, int offset, int count)
404 {
406 if (count > 0)
407 {
408 WriteStartArray(prefix, localName, namespaceUri, count);
411 }
412 }
413
414 public override void WriteArray(string prefix, XmlDictionaryString localName, XmlDictionaryString namespaceUri, TimeSpan[] array, int offset, int count)
415 {
417 if (count > 0)
418 {
419 WriteStartArray(prefix, localName, namespaceUri, count);
422 }
423 }
424}
static string Format(string resourceFormat, object p1)
Definition SR.cs:118
static string ValueMustBeNonNegative
Definition SR.cs:296
static string SizeExceedsRemainingBufferSpace
Definition SR.cs:324
static string OffsetExceedsBufferSize
Definition SR.cs:322
Definition SR.cs:7
override void WriteString(string value)
override void WriteStartElement(string prefix, string localName, string namespaceUri)
override void WriteEndElement()
override void WriteChars(char[] chars, int offset, int count)
override void WriteValue(object value)
override void WriteBase64(byte[] buffer, int offset, int count)
void SetOutput(Stream stream, IXmlDictionary dictionary, XmlBinaryWriterSession session, bool ownsStream)
void WriteDateTimeArray(DateTime[] array, int offset, int count)
void WriteTimeSpanArray(TimeSpan[] array, int offset, int count)
unsafe void UnsafeWriteArray(XmlBinaryNodeType nodeType, int count, byte *array, byte *arrayMax)
void WriteGuidArray(Guid[] array, int offset, int count)
unsafe override void WriteArray(string prefix, string localName, string namespaceUri, decimal[] array, int offset, int count)
unsafe void UnsafeWriteArray(string prefix, XmlDictionaryString localName, XmlDictionaryString namespaceUri, XmlBinaryNodeType nodeType, int count, byte *array, byte *arrayMax)
override void WriteArray(string prefix, string localName, string namespaceUri, TimeSpan[] array, int offset, int count)
unsafe override void WriteArray(string prefix, string localName, string namespaceUri, short[] array, int offset, int count)
unsafe override void WriteArray(string prefix, string localName, string namespaceUri, int[] array, int offset, int count)
unsafe override void WriteArray(string prefix, string localName, string namespaceUri, long[] array, int offset, int count)
void WriteStartArray(string prefix, XmlDictionaryString localName, XmlDictionaryString namespaceUri, int count)
unsafe override void WriteArray(string prefix, XmlDictionaryString localName, XmlDictionaryString namespaceUri, double[] array, int offset, int count)
unsafe override void WriteArray(string prefix, string localName, string namespaceUri, float[] array, int offset, int count)
override void WriteTextNode(XmlDictionaryReader reader, bool attribute)
override void WriteArray(string prefix, string localName, string namespaceUri, DateTime[] array, int offset, int count)
unsafe override void WriteArray(string prefix, XmlDictionaryString localName, XmlDictionaryString namespaceUri, int[] array, int offset, int count)
void SetOutput(Stream stream, IXmlDictionary dictionary, XmlBinaryWriterSession session, bool ownsStream)
unsafe override void WriteArray(string prefix, XmlDictionaryString localName, XmlDictionaryString namespaceUri, long[] array, int offset, int count)
XmlBinaryNodeWriter _writer
override void WriteArray(string prefix, XmlDictionaryString localName, XmlDictionaryString namespaceUri, DateTime[] array, int offset, int count)
unsafe override void WriteArray(string prefix, string localName, string namespaceUri, double[] array, int offset, int count)
unsafe override void WriteArray(string prefix, XmlDictionaryString localName, XmlDictionaryString namespaceUri, float[] array, int offset, int count)
unsafe override void WriteArray(string prefix, string localName, string namespaceUri, bool[] array, int offset, int count)
void CheckArray(Array array, int offset, int count)
void WriteStartArray(string prefix, string localName, string namespaceUri, int count)
override XmlSigningNodeWriter CreateSigningNodeWriter()
unsafe void UnsafeWriteArray(string prefix, string localName, string namespaceUri, XmlBinaryNodeType nodeType, int count, byte *array, byte *arrayMax)
unsafe override void WriteArray(string prefix, XmlDictionaryString localName, XmlDictionaryString namespaceUri, short[] array, int offset, int count)
unsafe override void WriteArray(string prefix, XmlDictionaryString localName, XmlDictionaryString namespaceUri, bool[] array, int offset, int count)
override void WriteArray(string prefix, XmlDictionaryString localName, XmlDictionaryString namespaceUri, TimeSpan[] array, int offset, int count)
override void WriteArray(string prefix, XmlDictionaryString localName, XmlDictionaryString namespaceUri, Guid[] array, int offset, int count)
override void WriteArray(string prefix, string localName, string namespaceUri, Guid[] array, int offset, int count)
unsafe override void WriteArray(string prefix, XmlDictionaryString localName, XmlDictionaryString namespaceUri, decimal[] array, int offset, int count)
virtual int ReadValueAsBase64(byte[] buffer, int offset, int count)
virtual bool TryGetValueAsDictionaryString([NotNullWhen(true)] out XmlDictionaryString? value)
virtual Type ValueType
Definition XmlReader.cs:102
virtual long ReadContentAsLong()
Definition XmlReader.cs:270
virtual DateTimeOffset ReadContentAsDateTimeOffset()
Definition XmlReader.cs:190
virtual int ReadValueChunk(char[] buffer, int index, int count)
Definition XmlReader.cs:564
virtual int ReadContentAsInt()
Definition XmlReader.cs:254
virtual bool ReadContentAsBoolean()
Definition XmlReader.cs:158
virtual object ReadContentAsObject()
Definition XmlReader.cs:149
virtual double ReadContentAsDouble()
Definition XmlReader.cs:206
virtual bool CanReadValueChunk
Definition XmlReader.cs:122
virtual bool CanReadBinaryContent
Definition XmlReader.cs:120