internal override EnumerableSorter <TElement> GetEnumerableSorter(EnumerableSorter <TElement>?next) { EnumerableSorter <TElement> sorter = new EnumerableSorter <TElement, TKey>(_keySelector, _comparer, _descending, next); if (_parent != null) { sorter = _parent.GetEnumerableSorter(sorter); } return(sorter); }
public IEnumerator GetEnumerator() { Buffer buffer = new Buffer(this.source); if (buffer.count > 0) { EnumerableSorter sorter = GetEnumerableSorter(null); int[] map = sorter.Sort(buffer.items, buffer.count); for (int i = 0; i < buffer.count; i++) { yield return(buffer.items[map[i]]); } } }
internal override EnumerableSorter <TElement> GetEnumerableSorter(EnumerableSorter <TElement>?next) { // Special case the common use of string with default comparer. Comparer<string>.Default checks the // thread's Culture on each call which is an overhead which is not required, because we are about to // do a sort which remains on the current thread (and EnumerableSorter is not used afterwards). IComparer <TKey> comparer = _comparer; if (typeof(TKey) == typeof(string) && comparer == Comparer <string> .Default) { comparer = (IComparer <TKey>)StringComparer.CurrentCulture; } EnumerableSorter <TElement> sorter = new EnumerableSorter <TElement, TKey>(_keySelector, comparer, _descending, next); if (_parent != null) { sorter = _parent.GetEnumerableSorter(sorter); } return(sorter); }
internal abstract EnumerableSorter GetEnumerableSorter(EnumerableSorter next);