//
-// AOrderedEnumerable.cs
+// OrderedEnumerable.cs
//
// 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
using System.Collections;
using System.Collections.Generic;
-namespace System.Linq
-{
- abstract class AOrderedEnumerable<TElement> : IOrderedEnumerable<TElement>
- {
- protected AOrderedEnumerable<TElement> parent;
-
- public abstract IEnumerator<TElement> GetEnumerator ();
- public abstract IEnumerable<TElement> Sort (IEnumerable<TElement> parentSource);
-
+namespace System.Linq {
+
+ abstract class OrderedEnumerable<TElement> : IOrderedEnumerable<TElement> {
+
+ IEnumerable<TElement> source;
+
+ 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 InternalOrderedSequence<TElement, TKey> (this, selector, comparer, descending);
- return parent;
+ return new OrderedSequence<TElement, TKey> (this, source, selector, comparer,
+ descending ? SortDirection.Descending : SortDirection.Ascending);
}
- }
+ }
}
-