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); }
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); }
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); } }