Example #1
0
        private static void QuickSortNodes(
            ref XmlDiffNode firstNode,
            ref XmlDiffNode lastNode,
            int count,
            XmlDiffNode firstPreviousSibbling,
            XmlDiffNode lastNextSibling)
        {
            var sortArray   = new XmlDiffNode[(int)checked ((uint)count)];
            var xmlDiffNode = firstNode;
            var index1      = 0;

            while (index1 < count)
            {
                sortArray[index1] = xmlDiffNode;
                ++index1;
                xmlDiffNode = xmlDiffNode._nextSibling;
            }
            XmlDiff.QuickSortNodesRecursion(ref sortArray, 0, count - 1);
            for (var index2 = 0; index2 < count - 1; ++index2)
            {
                sortArray[index2]._nextSibling = sortArray[index2 + 1];
            }
            if (firstPreviousSibbling == null)
            {
                firstNode._parent._firstChildNode = sortArray[0];
            }
            else
            {
                firstPreviousSibbling._nextSibling = sortArray[0];
            }
            sortArray[count - 1]._nextSibling = lastNextSibling;
            firstNode = sortArray[0];
            lastNode  = sortArray[count - 1];
        }
Example #2
0
        private static void QuickSortNodesRecursion(
            ref XmlDiffNode[] sortArray,
            int firstIndex,
            int lastIndex)
        {
            var position    = sortArray[(firstIndex + lastIndex) / 2].Position;
            var firstIndex1 = firstIndex;
            var lastIndex1  = lastIndex;

            while (firstIndex1 < lastIndex1)
            {
                while (sortArray[firstIndex1].Position < position)
                {
                    ++firstIndex1;
                }
                while (sortArray[lastIndex1].Position > position)
                {
                    --lastIndex1;
                }
                if (firstIndex1 < lastIndex1)
                {
                    var xmlDiffNode = sortArray[firstIndex1];
                    sortArray[firstIndex1] = sortArray[lastIndex1];
                    sortArray[lastIndex1]  = xmlDiffNode;
                    ++firstIndex1;
                    --lastIndex1;
                }
                else if (firstIndex1 == lastIndex1)
                {
                    ++firstIndex1;
                    --lastIndex1;
                }
            }
            if (firstIndex < lastIndex1)
            {
                XmlDiff.QuickSortNodesRecursion(ref sortArray, firstIndex, lastIndex1);
            }
            if (firstIndex1 >= lastIndex)
            {
                return;
            }
            XmlDiff.QuickSortNodesRecursion(ref sortArray, firstIndex1, lastIndex);
        }