using System; using System.Collections.Generic; namespace uNature.Wrappers.Linq { internal class OrderedSequence : OrderedEnumerable { private OrderedEnumerable parent; private Func selector; private IComparer comparer; private SortDirection direction; internal OrderedSequence(IEnumerable source, Func key_selector, IComparer comparer, SortDirection direction) : base(source) { selector = key_selector; this.comparer = comparer ?? Comparer.Default; this.direction = direction; } internal OrderedSequence(OrderedEnumerable parent, IEnumerable source, Func keySelector, IComparer comparer, SortDirection direction) : this(source, keySelector, comparer, direction) { this.parent = parent; } public override IEnumerator GetEnumerator() { return base.GetEnumerator(); } public override SortContext CreateContext(SortContext current) { SortContext sortContext = new SortSequenceContext(selector, comparer, direction, current); if (parent != null) { return parent.CreateContext(sortContext); } return sortContext; } protected override IEnumerable Sort(IEnumerable source) { return QuickSort.Sort(source, CreateContext(null)); } } }