Sort key for xs:string values. Strings are sorted according to a byte-wise sort key calculated by caller.
Inheritance: XmlSortKey
示例#1
0
        public override int CompareTo(object obj)
        {
            XmlStringSortKey that = obj as XmlStringSortKey;
            int idx, cntCmp, result;

            if (that == null)
            {
                return(CompareToEmpty(obj));
            }

            // Compare either using SortKey.Compare or byte arrays
            if (_sortKey != null)
            {
                Debug.Assert(that._sortKey != null, "Both keys must have non-null sortKey field");
                result = SortKey.Compare(_sortKey, that._sortKey);
            }
            else
            {
                Debug.Assert(_sortKeyBytes != null && that._sortKeyBytes != null, "Both keys must have non-null sortKeyBytes field");

                cntCmp = (_sortKeyBytes.Length < that._sortKeyBytes.Length) ? _sortKeyBytes.Length : that._sortKeyBytes.Length;
                for (idx = 0; idx < cntCmp; idx++)
                {
                    if (_sortKeyBytes[idx] < that._sortKeyBytes[idx])
                    {
                        result = -1;
                        goto Done;
                    }

                    if (_sortKeyBytes[idx] > that._sortKeyBytes[idx])
                    {
                        result = 1;
                        goto Done;
                    }
                }

                // So far, keys are equal, so now test length of each key
                if (_sortKeyBytes.Length < that._sortKeyBytes.Length)
                {
                    result = -1;
                }
                else if (_sortKeyBytes.Length > that._sortKeyBytes.Length)
                {
                    result = 1;
                }
                else
                {
                    result = 0;
                }
            }

Done:
            // Use document order to break sorting tie
            if (result == 0)
            {
                return(BreakSortingTie(that));
            }

            return(_descendingOrder ? -result : result);
        }