Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
DataPointer.cs
Go to the documentation of this file.
1using System.Data;
3
4namespace System.Xml;
5
6internal sealed class DataPointer : IXmlDataVirtualNode
7{
9
10 private XmlNode _node;
11
13
14 private bool _fOnValue;
15
16 private bool _bNeedFoliate;
17
18 private bool _isInUse;
19
21
22 internal int AttributeCount
23 {
24 get
25 {
27 if (_node != null && _column == null && _node.NodeType == XmlNodeType.Element)
28 {
29 if (!IsFoliated(_node))
30 {
31 return ColumnCount(Row, fAttribute: true, fNulls: false);
32 }
33 return _node.Attributes.Count;
34 }
35 return 0;
36 }
37 }
38
40 {
41 get
42 {
44 if (_node == null)
45 {
46 return XmlNodeType.None;
47 }
48 if (_column == null)
49 {
50 return _node.NodeType;
51 }
52 if (_fOnValue)
53 {
54 return XmlNodeType.Text;
55 }
56 if (_column.ColumnMapping == MappingType.Attribute)
57 {
58 return XmlNodeType.Attribute;
59 }
60 return XmlNodeType.Element;
61 }
62 }
63
64 internal string LocalName
65 {
66 get
67 {
69 if (_node == null)
70 {
71 return string.Empty;
72 }
73 if (_column == null)
74 {
75 string localName = _node.LocalName;
77 {
78 return string.Empty;
79 }
80 return localName;
81 }
82 if (_fOnValue)
83 {
84 return string.Empty;
85 }
87 }
88 }
89
90 internal string NamespaceURI
91 {
92 get
93 {
95 if (_node == null)
96 {
97 return string.Empty;
98 }
99 if (_column == null)
100 {
101 return _node.NamespaceURI;
102 }
103 if (_fOnValue)
104 {
105 return string.Empty;
106 }
108 }
109 }
110
111 internal string Name
112 {
113 get
114 {
115 RealFoliate();
116 if (_node == null)
117 {
118 return string.Empty;
119 }
120 if (_column == null)
121 {
122 string name = _node.Name;
124 {
125 return string.Empty;
126 }
127 return name;
128 }
129 string prefix = Prefix;
130 string localName = LocalName;
131 if (prefix != null && prefix.Length > 0)
132 {
133 if (localName != null && localName.Length > 0)
134 {
135 return _doc.NameTable.Add(prefix + ":" + localName);
136 }
137 return prefix;
138 }
139 return localName;
140 }
141 }
142
143 internal string Prefix
144 {
145 get
146 {
147 RealFoliate();
148 if (_node == null)
149 {
150 return string.Empty;
151 }
152 if (_column == null)
153 {
154 return _node.Prefix;
155 }
156 return string.Empty;
157 }
158 }
159
160 internal string Value
161 {
162 [RequiresUnreferencedCode("Members from serialized types may be trimmed if not referenced directly.")]
163 get
164 {
165 RealFoliate();
166 if (_node == null)
167 {
168 return null;
169 }
170 if (_column == null)
171 {
172 return _node.Value;
173 }
174 if (_column.ColumnMapping == MappingType.Attribute || _fOnValue)
175 {
176 DataRow row = Row;
177 DataRowVersion version = ((row.RowState == DataRowState.Detached) ? DataRowVersion.Proposed : DataRowVersion.Current);
178 object value = row[_column, version];
179 if (!Convert.IsDBNull(value))
180 {
182 }
183 return null;
184 }
185 return null;
186 }
187 }
188
189 internal bool IsEmptyElement
190 {
191 get
192 {
193 RealFoliate();
194 if (_node != null && _column == null && _node.NodeType == XmlNodeType.Element)
195 {
196 return ((XmlElement)_node).IsEmpty;
197 }
198 return false;
199 }
200 }
201
202 internal bool IsDefault
203 {
204 get
205 {
206 RealFoliate();
207 if (_node != null && _column == null && _node.NodeType == XmlNodeType.Attribute)
208 {
209 return !((XmlAttribute)_node).Specified;
210 }
211 return false;
212 }
213 }
214
215 internal string PublicId => NodeType switch
216 {
218 XmlNodeType.Entity => ((XmlEntity)_node).PublicId,
219 XmlNodeType.Notation => ((XmlNotation)_node).PublicId,
220 _ => null,
221 };
222
223 internal string SystemId => NodeType switch
224 {
226 XmlNodeType.Entity => ((XmlEntity)_node).SystemId,
227 XmlNodeType.Notation => ((XmlNotation)_node).SystemId,
228 _ => null,
229 };
230
231 internal string InternalSubset
232 {
233 get
234 {
235 if (NodeType == XmlNodeType.DocumentType)
236 {
238 }
239 return null;
240 }
241 }
242
244 {
245 get
246 {
248 if (xmlNode != null && xmlNode.NodeType == XmlNodeType.XmlDeclaration)
249 {
250 return (XmlDeclaration)xmlNode;
251 }
252 return null;
253 }
254 }
255
256 internal string Encoding
257 {
258 get
259 {
260 if (NodeType == XmlNodeType.XmlDeclaration)
261 {
262 return ((XmlDeclaration)_node).Encoding;
263 }
264 if (NodeType == XmlNodeType.Document)
265 {
267 if (declaration != null)
268 {
269 return declaration.Encoding;
270 }
271 }
272 return null;
273 }
274 }
275
276 internal string Standalone
277 {
278 get
279 {
280 if (NodeType == XmlNodeType.XmlDeclaration)
281 {
283 }
284 if (NodeType == XmlNodeType.Document)
285 {
287 if (declaration != null)
288 {
289 return declaration.Standalone;
290 }
291 }
292 return null;
293 }
294 }
295
296 internal string Version
297 {
298 get
299 {
300 if (NodeType == XmlNodeType.XmlDeclaration)
301 {
302 return ((XmlDeclaration)_node).Version;
303 }
304 if (NodeType == XmlNodeType.Document)
305 {
307 if (declaration != null)
308 {
309 return declaration.Version;
310 }
311 }
312 return null;
313 }
314 }
315
317 {
318 _doc = doc;
319 _node = node;
320 _column = null;
321 _fOnValue = false;
322 _bNeedFoliate = false;
323 _isInUse = true;
324 }
325
327 {
328 _doc = pointer._doc;
329 _node = pointer._node;
330 _column = pointer._column;
331 _fOnValue = pointer._fOnValue;
332 _bNeedFoliate = false;
333 _isInUse = true;
334 }
335
336 internal void AddPointer()
337 {
338 _doc.AddPointer(this);
339 }
340
342 {
343 if (_column != null)
344 {
345 return _node as XmlBoundElement;
346 }
348 return rowElem;
349 }
350
351 private static bool IsFoliated(XmlNode node)
352 {
353 if (node == null || !(node is XmlBoundElement))
354 {
355 return true;
356 }
357 return ((XmlBoundElement)node).IsFoliated;
358 }
359
361 {
362 _doc = pointer._doc;
363 _node = pointer._node;
364 _column = pointer._column;
365 _fOnValue = pointer._fOnValue;
366 }
367
368 private void MoveTo(XmlNode node)
369 {
370 _node = node;
371 _column = null;
372 _fOnValue = false;
373 }
374
376 {
377 _node = node;
378 _column = column;
380 }
381
383 {
384 if (row.RowState == DataRowState.Deleted)
385 {
386 return null;
387 }
388 DataTable table = row.Table;
390 int i = ((col != null) ? (col.Ordinal + 1) : 0);
391 int count = columns.Count;
392 DataRowVersion version = ((row.RowState == DataRowState.Detached) ? DataRowVersion.Proposed : DataRowVersion.Current);
393 for (; i < count; i++)
394 {
397 {
398 return dataColumn;
399 }
400 }
401 return null;
402 }
403
405 {
406 DataColumn dataColumn = null;
407 while ((dataColumn = NextColumn(row, dataColumn, fAttribute, fNulls)) != null)
408 {
409 if (iColumn == 0)
410 {
411 return dataColumn;
412 }
413 iColumn = checked(iColumn - 1);
414 }
415 return null;
416 }
417
418 private int ColumnCount(DataRow row, bool fAttribute, bool fNulls)
419 {
420 DataColumn col = null;
421 int num = 0;
422 while ((col = NextColumn(row, col, fAttribute, fNulls)) != null)
423 {
424 num++;
425 }
426 return num;
427 }
428
429 internal bool MoveToFirstChild()
430 {
431 RealFoliate();
432 if (_node == null)
433 {
434 return false;
435 }
436 if (_column != null)
437 {
438 if (_fOnValue)
439 {
440 return false;
441 }
442 _fOnValue = true;
443 return true;
444 }
445 if (!IsFoliated(_node))
446 {
447 DataColumn dataColumn = NextColumn(Row, null, fAttribute: false, fNulls: false);
448 if (dataColumn != null)
449 {
451 return true;
452 }
453 }
455 if (xmlNode != null)
456 {
458 return true;
459 }
460 return false;
461 }
462
463 internal bool MoveToNextSibling()
464 {
465 RealFoliate();
466 if (_node != null)
467 {
468 if (_column != null)
469 {
471 {
472 return false;
473 }
475 if (dataColumn != null)
476 {
478 return true;
479 }
481 if (xmlNode != null)
482 {
484 return true;
485 }
486 }
487 else
488 {
490 if (xmlNode2 != null)
491 {
493 return true;
494 }
495 }
496 }
497 return false;
498 }
499
500 internal bool MoveToParent()
501 {
502 RealFoliate();
503 if (_node != null)
504 {
505 if (_column != null)
506 {
508 {
509 MoveTo(_node, _column, fOnValue: false);
510 return true;
511 }
512 if (_column.ColumnMapping != MappingType.Attribute)
513 {
514 MoveTo(_node, null, fOnValue: false);
515 return true;
516 }
517 }
518 else
519 {
520 XmlNode parentNode = _node.ParentNode;
521 if (parentNode != null)
522 {
523 MoveTo(parentNode);
524 return true;
525 }
526 }
527 }
528 return false;
529 }
530
531 internal bool MoveToOwnerElement()
532 {
533 RealFoliate();
534 if (_node != null)
535 {
536 if (_column != null)
537 {
539 {
540 return false;
541 }
542 MoveTo(_node, null, fOnValue: false);
543 return true;
544 }
545 if (_node.NodeType == XmlNodeType.Attribute)
546 {
547 XmlNode ownerElement = ((XmlAttribute)_node).OwnerElement;
548 if (ownerElement != null)
549 {
550 MoveTo(ownerElement, null, fOnValue: false);
551 return true;
552 }
553 }
554 }
555 return false;
556 }
557
558 internal bool MoveToAttribute(int i)
559 {
560 RealFoliate();
561 if (i < 0)
562 {
563 return false;
564 }
565 if (_node != null && (_column == null || _column.ColumnMapping == MappingType.Attribute) && _node.NodeType == XmlNodeType.Element)
566 {
567 if (!IsFoliated(_node))
568 {
569 DataColumn dataColumn = NthColumn(Row, fAttribute: true, i, fNulls: false);
570 if (dataColumn != null)
571 {
573 return true;
574 }
575 }
576 else
577 {
579 if (xmlNode != null)
580 {
581 MoveTo(xmlNode, null, fOnValue: false);
582 return true;
583 }
584 }
585 }
586 return false;
587 }
588
590 {
591 switch (nt)
592 {
593 case XmlNodeType.None:
594 case XmlNodeType.Text:
595 case XmlNodeType.CDATA:
596 case XmlNodeType.Comment:
597 case XmlNodeType.Document:
598 case XmlNodeType.DocumentFragment:
599 case XmlNodeType.Whitespace:
600 case XmlNodeType.SignificantWhitespace:
601 case XmlNodeType.EndElement:
602 case XmlNodeType.EndEntity:
603 return true;
604 case XmlNodeType.Element:
605 case XmlNodeType.Attribute:
606 case XmlNodeType.EntityReference:
607 case XmlNodeType.Entity:
608 case XmlNodeType.ProcessingInstruction:
609 case XmlNodeType.DocumentType:
610 case XmlNodeType.Notation:
611 case XmlNodeType.XmlDeclaration:
612 return false;
613 default:
614 return true;
615 }
616 }
617
623
624 internal XmlNode GetNode()
625 {
626 return _node;
627 }
628
630 {
631 if (_node == foliatedNode && _column != null)
632 {
633 _bNeedFoliate = true;
634 }
635 }
636
637 internal void RealFoliate()
638 {
639 if (!_bNeedFoliate)
640 {
641 return;
642 }
643 XmlNode xmlNode = null;
645 {
647 }
648 else
649 {
650 if (_column.ColumnMapping == MappingType.Attribute)
651 {
653 }
654 else
655 {
657 while (xmlNode != null && (!(xmlNode.LocalName == _column.EncodedColumnName) || !(xmlNode.NamespaceURI == _column.Namespace)))
658 {
660 }
661 }
662 if (xmlNode != null && _fOnValue)
663 {
665 }
666 }
667 if (xmlNode == null)
668 {
670 }
671 _node = xmlNode;
672 _column = null;
673 _fOnValue = false;
674 _bNeedFoliate = false;
675 }
676
678 {
679 return _isInUse;
680 }
681
682 internal void SetNoLongerUse()
683 {
684 _node = null;
685 _column = null;
686 _fOnValue = false;
687 _bNeedFoliate = false;
688 _isInUse = false;
689 }
690}
static bool IsDBNull([NotNullWhen(true)] object? value)
Definition Convert.cs:215
string ConvertObjectToXml(object value)
virtual MappingType ColumnMapping
DataColumnCollection Columns
Definition DataTable.cs:327
static string DataDom_Foliation
Definition SR.cs:684
Definition SR.cs:7
XmlBoundElement GetRowElement()
void MoveTo(DataPointer pointer)
void MoveTo(XmlNode node)
static bool IsFoliated(XmlNode node)
XmlDeclaration Declaration
DataColumn NthColumn(DataRow row, bool fAttribute, int iColumn, bool fNulls)
void MoveTo(XmlNode node, DataColumn column, bool fOnValue)
DataPointer(XmlDataDocument doc, XmlNode node)
XmlDataDocument _doc
Definition DataPointer.cs:8
DataColumn NextColumn(DataRow row, DataColumn col, bool fAttribute, bool fNulls)
DataPointer(DataPointer pointer)
int ColumnCount(DataRow row, bool fAttribute, bool fNulls)
bool IsLocalNameEmpty(XmlNodeType nt)
bool MoveToAttribute(int i)
bool GetRegion(XmlNode node, [NotNullWhen(true)] out XmlBoundElement rowElem)
XmlNode SafeFirstChild(XmlNode n)
bool IsNotMapped(DataColumn c)
void AddPointer(IXmlDataVirtualNode pointer)
XmlNode SafeNextSibling(XmlNode n)
bool IsTextOnly(DataColumn c)
string Add(char[] array, int offset, int length)
virtual ? XmlNode Item(int index)
virtual ? XmlNode GetNamedItem(string name)
virtual ? string Value
Definition XmlNode.cs:62
virtual ? XmlNode ParentNode
Definition XmlNode.cs:76
virtual ? XmlNode NextSibling
Definition XmlNode.cs:104
virtual string NamespaceURI
Definition XmlNode.cs:139
virtual ? XmlNode FirstChild
Definition XmlNode.cs:120
virtual string Prefix
Definition XmlNode.cs:142
virtual ? XmlAttributeCollection Attributes
Definition XmlNode.cs:106
XmlNodeType NodeType
Definition XmlNode.cs:73
void OnFoliated(XmlNode foliatedNode)
bool IsOnNode(XmlNode nodeToCheck)