using System; using System.Collections; using System.Collections.Generic; namespace uNature.Wrappers.Linq { internal abstract class OrderedEnumerable : IOrderedEnumerable, IEnumerable, IEnumerable { private IEnumerable source; protected OrderedEnumerable(IEnumerable source) { this.source = source; } IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } public virtual IEnumerator GetEnumerator() { return Sort(source).GetEnumerator(); } public abstract SortContext CreateContext(SortContext current); protected abstract IEnumerable Sort(IEnumerable source); public IOrderedEnumerable CreateOrderedEnumerable(Func selector, IComparer comparer, bool descending) { return new OrderedSequence(this, source, selector, comparer, descending ? SortDirection.Descending : SortDirection.Ascending); } } }