예제 #1
0
 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;
 }
예제 #2
0
        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;
        }
예제 #3
0
        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;
            }
        }