Author: jbevain
Date: 2007-11-08 17:17:20 -0500 (Thu, 08 Nov 2007)
New Revision: 89277

Modified:
   trunk/mcs/class/System.Core/System.Linq/ChangeLog
   trunk/mcs/class/System.Core/System.Linq/Enumerable.cs
Log:
2007-11-08  Jb Evain  <[EMAIL PROTECTED]>

        * Enumerable.cs: Implement SequenceEqual.



Modified: trunk/mcs/class/System.Core/System.Linq/ChangeLog
===================================================================
--- trunk/mcs/class/System.Core/System.Linq/ChangeLog   2007-11-08 22:16:53 UTC 
(rev 89276)
+++ trunk/mcs/class/System.Core/System.Linq/ChangeLog   2007-11-08 22:17:20 UTC 
(rev 89277)
@@ -1,5 +1,9 @@
 2007-11-08  Jb Evain  <[EMAIL PROTECTED]>
 
+       * Enumerable.cs: Implement SequenceEqual.
+
+2007-11-08  Jb Evain  <[EMAIL PROTECTED]>
+
        * Enumerable.cs: Complete Union.
 
 2007-11-08  Jb Evain  <[EMAIL PROTECTED]>

Modified: trunk/mcs/class/System.Core/System.Linq/Enumerable.cs
===================================================================
--- trunk/mcs/class/System.Core/System.Linq/Enumerable.cs       2007-11-08 
22:16:53 UTC (rev 89276)
+++ trunk/mcs/class/System.Core/System.Linq/Enumerable.cs       2007-11-08 
22:17:20 UTC (rev 89277)
@@ -2581,6 +2581,39 @@
 
                #endregion
 
+               #region SequenceEqual
+
+               public static bool SequenceEqual<TSource> (this 
IEnumerable<TSource> first, IEnumerable<TSource> second)
+               {
+                       return first.SequenceEqual (second, null);
+               }
+
+               public static bool SequenceEqual<TSource> (this 
IEnumerable<TSource> first, IEnumerable<TSource> second, 
IEqualityComparer<TSource> comparer)
+               {
+                       if (first == null)
+                               throw new ArgumentNullException ("first");
+                       if (second == null)
+                               throw new ArgumentNullException ("second");
+
+                       if (comparer == null)
+                               comparer = EqualityComparer<TSource>.Default;
+
+                       var first_enumerator = first.GetEnumerator ();
+                       var second_enumerator = second.GetEnumerator ();
+
+                       while (first_enumerator.MoveNext ()) {
+                               if (!second_enumerator.MoveNext ())
+                                       return false;
+
+                               if (!comparer.Equals (first_enumerator.Current, 
second_enumerator.Current))
+                                       return false;
+                       }
+
+                       return !second_enumerator.MoveNext ();
+               }
+
+               #endregion
+
                #region Union
 
                public static IEnumerable<TSource> Union<TSource> (this 
IEnumerable<TSource> first, IEnumerable<TSource> second)

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to