Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ ComparePosition()

XmlNodeOrder System.Xml.XPathNodePointer.ComparePosition ( XPathNodePointer other)
inlinepackage

Definition at line 1021 of file XPathNodePointer.cs.

1022 {
1023 RealFoliate();
1024 other.RealFoliate();
1025 if (IsSamePosition(other))
1026 {
1027 return XmlNodeOrder.Same;
1028 }
1029 XmlNode xmlNode = null;
1030 XmlNode xmlNode2 = null;
1031 if (NodeType == XPathNodeType.Namespace && other.NodeType == XPathNodeType.Namespace)
1032 {
1033 if (_parentOfNS == other._parentOfNS)
1034 {
1036 }
1038 xmlNode2 = other._parentOfNS;
1039 }
1040 else if (NodeType == XPathNodeType.Namespace)
1041 {
1042 if (_parentOfNS == other._node)
1043 {
1044 if (other._column == null)
1045 {
1046 return XmlNodeOrder.After;
1047 }
1048 return XmlNodeOrder.Before;
1049 }
1051 xmlNode2 = other._node;
1052 }
1053 else if (other.NodeType == XPathNodeType.Namespace)
1054 {
1055 if (_node == other._parentOfNS)
1056 {
1057 if (_column == null)
1058 {
1059 return XmlNodeOrder.Before;
1060 }
1061 return XmlNodeOrder.After;
1062 }
1063 xmlNode = _node;
1064 xmlNode2 = other._parentOfNS;
1065 }
1066 else
1067 {
1068 if (_node == other._node)
1069 {
1070 if (_column == other._column)
1071 {
1072 if (_fOnValue)
1073 {
1074 return XmlNodeOrder.After;
1075 }
1076 return XmlNodeOrder.Before;
1077 }
1078 if (_column == null)
1079 {
1080 return XmlNodeOrder.Before;
1081 }
1082 if (other._column == null)
1083 {
1084 return XmlNodeOrder.After;
1085 }
1086 if (_column.Ordinal < other._column.Ordinal)
1087 {
1088 return XmlNodeOrder.Before;
1089 }
1090 return XmlNodeOrder.After;
1091 }
1092 xmlNode = _node;
1093 xmlNode2 = other._node;
1094 }
1095 if (xmlNode == null || xmlNode2 == null)
1096 {
1097 return XmlNodeOrder.Unknown;
1098 }
1099 int depth = -1;
1100 int depth2 = -1;
1101 XmlNode root = GetRoot(xmlNode, ref depth);
1102 XmlNode root2 = GetRoot(xmlNode2, ref depth2);
1103 if (root != root2)
1104 {
1105 return XmlNodeOrder.Unknown;
1106 }
1107 if (depth > depth2)
1108 {
1109 while (xmlNode != null && depth > depth2)
1110 {
1111 xmlNode = ((xmlNode.NodeType == XmlNodeType.Attribute) ? ((XmlAttribute)xmlNode).OwnerElement : xmlNode.ParentNode);
1112 depth--;
1113 }
1114 if (xmlNode == xmlNode2)
1115 {
1116 return XmlNodeOrder.After;
1117 }
1118 }
1119 else if (depth2 > depth)
1120 {
1121 while (xmlNode2 != null && depth2 > depth)
1122 {
1123 xmlNode2 = ((xmlNode2.NodeType == XmlNodeType.Attribute) ? ((XmlAttribute)xmlNode2).OwnerElement : xmlNode2.ParentNode);
1124 depth2--;
1125 }
1126 if (xmlNode == xmlNode2)
1127 {
1128 return XmlNodeOrder.Before;
1129 }
1130 }
1131 XmlNode xmlNode3 = GetParent(xmlNode);
1132 XmlNode xmlNode4 = GetParent(xmlNode2);
1133 XmlNode xmlNode5 = null;
1134 while (xmlNode3 != null && xmlNode4 != null)
1135 {
1136 if (xmlNode3 == xmlNode4)
1137 {
1138 while (xmlNode != null)
1139 {
1140 xmlNode5 = xmlNode.NextSibling;
1141 if (xmlNode5 == xmlNode2)
1142 {
1143 return XmlNodeOrder.Before;
1144 }
1145 xmlNode = xmlNode5;
1146 }
1147 return XmlNodeOrder.After;
1148 }
1149 xmlNode = xmlNode3;
1151 xmlNode3 = xmlNode.ParentNode;
1152 xmlNode4 = xmlNode2.ParentNode;
1153 }
1154 return XmlNodeOrder.Unknown;
1155 }
XmlNodeOrder CompareNamespacePosition(XPathNodePointer other)
bool IsSamePosition(XPathNodePointer pointer)
static XmlNode GetRoot(XmlNode node, ref int depth)
XmlNode GetParent(XmlNode node)

References System.Xml.XmlNode.NextSibling, System.other, and System.Xml.XmlNode.ParentNode.

Referenced by System.Xml.DataDocumentXPathNavigator.ComparePosition().