lucenenet-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From nightowl...@apache.org
Subject [34/50] lucenenet git commit: Lucene.Net.Core.Support.Arrays.Equals(): Changed implementation to be more like the original JDK version, including the ability to test equality based on the values of the nested value if it is a collection
Date Thu, 30 Mar 2017 18:00:29 GMT
Lucene.Net.Core.Support.Arrays.Equals(): Changed implementation to be more like the original
JDK version, including the ability to test equality based on the values of the nested value
if it is a collection


Project: http://git-wip-us.apache.org/repos/asf/lucenenet/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucenenet/commit/d0c2c108
Tree: http://git-wip-us.apache.org/repos/asf/lucenenet/tree/d0c2c108
Diff: http://git-wip-us.apache.org/repos/asf/lucenenet/diff/d0c2c108

Branch: refs/heads/api-work
Commit: d0c2c108eea1fd2035a9d8a54eb9cee34772ac74
Parents: 842182c
Author: Shad Storhaug <shad@shadstorhaug.com>
Authored: Thu Mar 30 09:55:01 2017 +0700
Committer: Shad Storhaug <shad@shadstorhaug.com>
Committed: Thu Mar 30 09:55:01 2017 +0700

----------------------------------------------------------------------
 src/Lucene.Net.Core/Support/Arrays.cs | 30 +++++++++++++++++++++++++-----
 1 file changed, 25 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucenenet/blob/d0c2c108/src/Lucene.Net.Core/Support/Arrays.cs
----------------------------------------------------------------------
diff --git a/src/Lucene.Net.Core/Support/Arrays.cs b/src/Lucene.Net.Core/Support/Arrays.cs
index 80cd06e..bea165d 100644
--- a/src/Lucene.Net.Core/Support/Arrays.cs
+++ b/src/Lucene.Net.Core/Support/Arrays.cs
@@ -87,19 +87,39 @@ namespace Lucene.Net.Support
         /// considered equal if (e1==null ? e2==null : e1.equals(e2)). In other
         /// words, the two arrays are equal if they contain the same elements in
         /// the same order. Also, two array references are considered equal if
-        /// both are null.</returns>
+        /// both are null.
+        /// <para/>
+        /// Note that if the type of <paramref name="T"/> is a <see cref="IDictionary{TKey,
TValue}"/>,
+        /// <see cref="IList{T}"/>, or <see cref="ISet{T}"/>, its values and
any nested collection values
+        /// will be compared for equality as well.
+        /// </returns>
         public static bool Equals<T>(T[] a, T[] b)
         {
-            if (a == null)
+            if (object.ReferenceEquals(a, b))
+            {
+                return true;
+            }
+            bool isValueType = typeof(T).IsValueType;
+            if (!isValueType && a == null)
+            {
                 return b == null;
+            }
+
+            int length = a.Length;
 
-            if (a.Length != b.Length)
+            if (b.Length != length)
+            {
                 return false;
+            }
 
-            for (int i = 0; i < a.Length; i++)
+            for (int i = 0; i < length; i++)
             {
-                if (!object.Equals(a[i], b[i]))
+                T o1 = a[i];
+                T o2 = b[i];
+                if (!(isValueType ? o1.Equals(o2) : (o1 == null ? o2 == null : Collections.Equals(o1,
o2))))
+                {
                     return false;
+                }
             }
 
             return true;


Mime
View raw message