//
// Authors:
// Marek Safar <marek.safar@gmail.com>
+// Jb Evain <jbevain@novell.com>
//
-// Copyright (C) 2007 Novell, Inc (http://www.novell.com)
+// Copyright (C) 2007 - 2008 Novell, Inc (http://www.novell.com)
//
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the
abstract class OrderedEnumerable<TElement> : IOrderedEnumerable<TElement> {
- protected OrderedEnumerable<TElement> parent;
+ IEnumerable<TElement> source;
- public abstract IEnumerator<TElement> GetEnumerator ();
- public abstract IEnumerable<TElement> Sort (IEnumerable<TElement> parentSource);
+ protected OrderedEnumerable (IEnumerable<TElement> source)
+ {
+ this.source = source;
+ }
IEnumerator IEnumerable.GetEnumerator ()
{
return GetEnumerator ();
}
-
+
+ public IEnumerator<TElement> GetEnumerator ()
+ {
+ return Sort (source).GetEnumerator ();
+ }
+
+ public abstract SortContext<TElement> CreateContext (SortContext<TElement> current);
+
+ protected abstract IEnumerable<TElement> Sort (IEnumerable<TElement> source);
+
public IOrderedEnumerable<TElement> CreateOrderedEnumerable<TKey> (
Func<TElement, TKey> selector, IComparer<TKey> comparer, bool descending)
{
- parent = new OrderedSequence<TElement, TKey> (this, selector, comparer, descending);
- return parent;
+ return new OrderedSequence<TElement, TKey> (this, source, selector, comparer,
+ descending ? SortDirection.Descending : SortDirection.Ascending);
}
}
}