internal static int OrderSubTrees(XmlDiffElement elem1, XmlDiffElement elem2) { var node1_1 = elem1._attributes; var node2_1 = elem2._attributes; while (node1_1 != null && node1_1.NodeType == XmlDiffNodeType.Namespace) node1_1 = (XmlDiffAttributeOrNamespace) node1_1._nextSibling; while (node2_1 != null && node2_1.NodeType == XmlDiffNodeType.Namespace) node2_1 = (XmlDiffAttributeOrNamespace) node2_1._nextSibling; for (; node1_1 != null && node2_1 != null; node2_1 = (XmlDiffAttributeOrNamespace) node2_1._nextSibling) { int num; if ((num = XmlDiffDocument.OrderAttributesOrNamespaces(node1_1, node2_1)) != 0) return num; node1_1 = (XmlDiffAttributeOrNamespace) node1_1._nextSibling; } if (node1_1 == node2_1) { var node1_2 = elem1.FirstChildNode; XmlDiffNode node2_2; for (node2_2 = elem2.FirstChildNode; node1_2 != null && node2_2 != null; node2_2 = node2_2._nextSibling) { int num; if ((num = XmlDiffDocument.OrderChildren(node1_2, node2_2)) != 0) return num; node1_2 = node1_2._nextSibling; } if (node1_2 == node2_2) return 0; return node1_2 == null ? 1 : -1; } return node1_1 == null ? 1 : -1; }
internal void InsertAttributeOrNamespace(XmlDiffAttributeOrNamespace newAttrOrNs) { newAttrOrNs._parent = (XmlDiffParentNode)this; var node1 = this._attributes; var attributeOrNamespace = (XmlDiffAttributeOrNamespace)null; for (; node1 != null && XmlDiffDocument.OrderAttributesOrNamespaces(node1, newAttrOrNs) <= 0; node1 = (XmlDiffAttributeOrNamespace)node1._nextSibling) { attributeOrNamespace = node1; } if (attributeOrNamespace == null) { newAttrOrNs._nextSibling = (XmlDiffNode)this._attributes; this._attributes = newAttrOrNs; } else { newAttrOrNs._nextSibling = attributeOrNamespace._nextSibling; attributeOrNamespace._nextSibling = (XmlDiffNode)newAttrOrNs; } this._allAttributesHash += newAttrOrNs.HashValue; char c; if (newAttrOrNs.NodeType == XmlDiffNodeType.Attribute) { c = newAttrOrNs.LocalName[0]; } else { var xmlDiffNamespace = (XmlDiffNamespace)newAttrOrNs; c = xmlDiffNamespace.Prefix == string.Empty ? 'A' : xmlDiffNamespace.Prefix[0]; } var upper = char.ToUpper(c); if (upper >= 'R') { this._attributesHashRZ += newAttrOrNs.HashValue; } else if (upper >= 'I') { this._attributesHashIQ += newAttrOrNs.HashValue; } else { this._attributesHashAH += newAttrOrNs.HashValue; } if (newAttrOrNs.NodeType != XmlDiffNodeType.Namespace) { return; } this._bDefinesNamespaces = true; }
internal void InsertAttributeOrNamespace(XmlDiffAttributeOrNamespace newAttrOrNs) { Debug.Assert(newAttrOrNs != null); newAttrOrNs._parent = this; XmlDiffAttributeOrNamespace curAttr = _attributes; XmlDiffAttributeOrNamespace prevAttr = null; while (curAttr != null && XmlDiffDocument.OrderAttributesOrNamespaces(curAttr, newAttrOrNs) <= 0) { prevAttr = curAttr; curAttr = (XmlDiffAttributeOrNamespace)curAttr._nextSibling; } if (prevAttr == null) { newAttrOrNs._nextSibling = _attributes; _attributes = newAttrOrNs; } else { newAttrOrNs._nextSibling = prevAttr._nextSibling; prevAttr._nextSibling = newAttrOrNs; } // hash Debug.Assert(newAttrOrNs.HashValue != 0); _allAttributesHash += newAttrOrNs.HashValue; char firstLetter; if (newAttrOrNs.NodeType == XmlDiffNodeType.Attribute) { firstLetter = ((XmlDiffAttribute)newAttrOrNs).LocalName[0]; } else { XmlDiffNamespace nsNode = (XmlDiffNamespace)newAttrOrNs; firstLetter = (nsNode.Prefix == string.Empty) ? 'A' : nsNode.Prefix[0]; } firstLetter = char.ToUpper(firstLetter); if (firstLetter >= 'R') { _attributesHashRZ += newAttrOrNs.HashValue; } else if (firstLetter >= 'I') { _attributesHashIQ += newAttrOrNs.HashValue; } else { _attributesHashAH += newAttrOrNs.HashValue; } if (newAttrOrNs.NodeType == XmlDiffNodeType.Namespace) { _bDefinesNamespaces = true; } }