Beispiel #1
0
        public static void FastCLRSort <TElement, TComparer>(
            ArraySegment <TElement> data, TComparer comparer, int?offset = null, int?count = null
            )
            where TComparer : IComparer <TElement>
        {
            int actualOffset = offset.GetValueOrDefault(0),
                actualCount  = count.GetValueOrDefault(data.Count - actualOffset);
            var sorter       = new FastCLRSorter <TElement, IComparer <TElement> >(data, comparer);

            sorter.Sort(actualOffset, actualCount);
        }
Beispiel #2
0
        public static void FastCLRSortRef <TElement, TComparer>(
            TElement[] data, TComparer comparer, int?offset = null, int?count = null
            )
            where TComparer : IRefComparer <TElement>
        {
            int actualOffset = offset.GetValueOrDefault(0),
                actualCount  = count.GetValueOrDefault(data.Length - actualOffset);

            var sorter = new FastCLRSorter <TElement, TComparer>(data, comparer);

            sorter.Sort(actualOffset, actualCount);
        }
Beispiel #3
0
        public static void FastCLRSortRef <TElement, TComparer>(
            ArraySegment <TElement> data, TComparer comparer, int?offset = null, int?count = null
            )
            where TComparer : IRefComparer <TElement>
        {
            int actualOffset = offset.GetValueOrDefault(0),
                actualCount  = count.GetValueOrDefault(data.Count - actualOffset);

            if (comparer is IRefComparerAdapter <TElement> wrapper)
            {
                // FIXME: Devirtualize somehow
                var sorter = new FastCLRSorter <TElement, IComparer <TElement> >(data, wrapper.Comparer);
                sorter.Sort(actualOffset, actualCount);
            }
            else
            {
                var sorter = new FastCLRSorterRef <TElement, TComparer>(data, comparer);
                sorter.Sort(actualOffset, actualCount);
            }
        }