1 // 2 // Copyright (c) ZeroC, Inc. All rights reserved. 3 // 4 5 using System; 6 using System.Collections; 7 8 namespace IceUtilInternal 9 { 10 public sealed class Arrays 11 { Equals(object[] arr1, object[] arr2)12 public static bool Equals(object[] arr1, object[] arr2) 13 { 14 if(object.ReferenceEquals(arr1, arr2)) 15 { 16 return true; 17 } 18 19 if((arr1 == null && arr2 != null) || (arr1 != null && arr2 == null)) 20 { 21 return false; 22 } 23 24 if(arr1.Length == arr2.Length) 25 { 26 for(int i = 0; i < arr1.Length; i++) 27 { 28 if(arr1[i] == null) 29 { 30 if(arr2[i] != null) 31 { 32 return false; 33 } 34 } 35 else if(!arr1[i].Equals(arr2[i])) 36 { 37 return false; 38 } 39 } 40 41 return true; 42 } 43 44 return false; 45 } 46 Equals(Array arr1, Array arr2)47 public static bool Equals(Array arr1, Array arr2) 48 { 49 if(object.ReferenceEquals(arr1, arr2)) 50 { 51 return true; 52 } 53 54 if((arr1 == null && arr2 != null) || (arr1 != null && arr2 == null)) 55 { 56 return false; 57 } 58 59 if(arr1.Length == arr2.Length) 60 { 61 IEnumerator e1 = arr1.GetEnumerator(); 62 IEnumerator e2 = arr2.GetEnumerator(); 63 while(e1.MoveNext()) 64 { 65 e2.MoveNext(); 66 if(e1.Current == null) 67 { 68 if(e2.Current != null) 69 { 70 return false; 71 } 72 } 73 else if(!e1.Current.Equals(e2.Current)) 74 { 75 return false; 76 } 77 } 78 79 return true; 80 } 81 82 return false; 83 } 84 GetHashCode(object[] arr)85 public static int GetHashCode(object[] arr) 86 { 87 int h = 5381; 88 89 for(int i = 0; i < arr.Length; i++) 90 { 91 object o = arr[i]; 92 if(o != null) 93 { 94 IceInternal.HashUtil.hashAdd(ref h, o); 95 } 96 } 97 98 return h; 99 } 100 GetHashCode(Array arr)101 public static int GetHashCode(Array arr) 102 { 103 int h = 0; 104 105 foreach(object o in arr) 106 { 107 if(o != null) 108 { 109 IceInternal.HashUtil.hashAdd(ref h, o); 110 } 111 } 112 113 return h; 114 } 115 } 116 } 117