2009-08-20 Sebastien Pouliot <sebastien@ximian.com>
[mono.git] / mcs / class / System / System.Collections.Specialized / OrderedDictionary.cs
index 4969a2ca99bb8bdf4d23a5b5b63b07b70d321d60..9aa976bf9b2a7b50febe74bda240f2ec216b4551 100644 (file)
@@ -4,7 +4,7 @@
 // Authors:\r
 //     Lluis Sanchez Gual (lluis@novell.com)\r
 //\r
-// Copyright (C) 2005 Novell, Inc (http://www.novell.com)
+// Copyright (C) 2005 Novell, Inc (http://www.novell.com)\r
 //\r
 // Permission is hereby granted, free of charge, to any person obtaining\r
 // a copy of this software and associated documentation files (the\r
@@ -38,8 +38,8 @@ namespace System.Collections.Specialized
                ArrayList list;\r
                Hashtable hash;\r
                bool readOnly;\r
-               int initialCapacity;
-               SerializationInfo serializationInfo;
+               int initialCapacity;\r
+               SerializationInfo serializationInfo;\r
                IEqualityComparer comparer;\r
                \r
                public OrderedDictionary ()\r
@@ -54,68 +54,68 @@ namespace System.Collections.Specialized
                        list = new ArrayList (initialCapacity);\r
                        hash = new Hashtable (initialCapacity);\r
                }\r
-               
-               public OrderedDictionary (IEqualityComparer equalityComparer)
-               {
+               \r
+               public OrderedDictionary (IEqualityComparer equalityComparer)\r
+               {\r
                        list = new ArrayList ();\r
-                       hash = new Hashtable (equalityComparer);
+                       hash = new Hashtable (equalityComparer);\r
                        comparer = equalityComparer;\r
-               }
-
-               public OrderedDictionary (int capacity, IEqualityComparer equalityComparer)
-               {
+               }\r
+\r
+               public OrderedDictionary (int capacity, IEqualityComparer equalityComparer)\r
+               {\r
                        initialCapacity = (capacity < 0) ? 0 : capacity;\r
                        list = new ArrayList (initialCapacity);\r
                        hash = new Hashtable (initialCapacity, equalityComparer);\r
                        comparer = equalityComparer;\r
-               }
+               }\r
 \r
                protected OrderedDictionary (SerializationInfo info, StreamingContext context)\r
-               {
+               {\r
                        serializationInfo = info;\r
                }\r
-
-               protected virtual void OnDeserialization (object sender)
-               {
-                       OnDeserialization (sender);
-               }
-
-               void IDeserializationCallback.OnDeserialization (object sender)
-               {
-                       if (serializationInfo == null)
-                               return;
-
-                       comparer = (IEqualityComparer) serializationInfo.GetValue ("KeyComparer", typeof (IEqualityComparer));
+\r
+               protected virtual void OnDeserialization (object sender)\r
+               {\r
+                       ((IDeserializationCallback) this).OnDeserialization (sender);\r
+               }\r
+\r
+               void IDeserializationCallback.OnDeserialization (object sender)\r
+               {\r
+                       if (serializationInfo == null)\r
+                               return;\r
+\r
+                       comparer = (IEqualityComparer) serializationInfo.GetValue ("KeyComparer", typeof (IEqualityComparer));\r
                        readOnly = serializationInfo.GetBoolean ("ReadOnly");\r
-                       initialCapacity = serializationInfo.GetInt32 ("InitialCapacity");
-
+                       initialCapacity = serializationInfo.GetInt32 ("InitialCapacity");\r
+\r
                        if (list == null)\r
-                               list = new ArrayList ();
-                       else
-                               list.Clear ();
-
-                       hash = new Hashtable (comparer);
-                       object[] array = (object[]) serializationInfo.GetValue ("ArrayList", typeof(object[]));
-                       foreach (DictionaryEntry de in array) {
+                               list = new ArrayList ();\r
+                       else\r
+                               list.Clear ();\r
+\r
+                       hash = new Hashtable (comparer);\r
+                       object[] array = (object[]) serializationInfo.GetValue ("ArrayList", typeof(object[]));\r
+                       foreach (DictionaryEntry de in array) {\r
                                hash.Add (de.Key, de.Value);\r
                                list.Add (de);\r
                        }\r
                }\r
                \r
                public virtual void GetObjectData (SerializationInfo info, StreamingContext context)\r
-               {
-                       if (info == null)
-                               throw new ArgumentNullException ("info");
-
-                       info.AddValue ("KeyComparer", comparer, typeof (IEqualityComparer));
+               {\r
+                       if (info == null)\r
+                               throw new ArgumentNullException ("info");\r
+\r
+                       info.AddValue ("KeyComparer", comparer, typeof (IEqualityComparer));\r
                        info.AddValue ("ReadOnly", readOnly);\r
                        info.AddValue ("InitialCapacity", initialCapacity);\r
-
-                       object[] array = new object [hash.Count];
+\r
+                       object[] array = new object [hash.Count];\r
                        hash.CopyTo (array, 0);\r
                        info.AddValue ("ArrayList", array);\r
-               }
-
+               }\r
+\r
                IEnumerator IEnumerable.GetEnumerator()\r
                {\r
                        return list.GetEnumerator ();\r
@@ -126,29 +126,29 @@ namespace System.Collections.Specialized
                                return list.Count;\r
                        }\r
                }\r
-
-               bool ICollection.IsSynchronized {
-                       get {
-                               return list.IsSynchronized;
-                       }
-               }
-
-               object ICollection.SyncRoot {
-                       get {
-                               return list.SyncRoot;
-                       }
-               }
+\r
+               bool ICollection.IsSynchronized {\r
+                       get {\r
+                               return list.IsSynchronized;\r
+                       }\r
+               }\r
+\r
+               object ICollection.SyncRoot {\r
+                       get {\r
+                               return list.SyncRoot;\r
+                       }\r
+               }\r
 \r
                public void CopyTo (Array array, int index)\r
                {\r
                        list.CopyTo (array, index);\r
                }\r
-
-               bool IDictionary.IsFixedSize {
-                       get {
-                               return false;
-                       }
-               }
+\r
+               bool IDictionary.IsFixedSize {\r
+                       get {\r
+                               return false;\r
+                       }\r
+               }\r
                \r
                public bool IsReadOnly\r
                {\r
@@ -178,9 +178,9 @@ namespace System.Collections.Specialized
                        set {\r
                                WriteCheck ();\r
                                DictionaryEntry de = (DictionaryEntry) list [index];\r
-                               de.Value = value;
-                               // update (even on the list) isn't automatic
-                               list [index] = de;
+                               de.Value = value;\r
+                               // update (even on the list) isn't automatic\r
+                               list [index] = de;\r
                                hash [de.Key] = value;\r
                        }\r
                }\r
@@ -238,7 +238,7 @@ namespace System.Collections.Specialized
                {\r
                        for (int n=0; n<list.Count; n++) {\r
                                DictionaryEntry de = (DictionaryEntry) list [n];\r
-                               if (de.Key.Equals (key))\r
+                               if (comparer != null ? comparer.Equals(de.Key, key) : de.Key.Equals(key))\r
                                        return n;\r
                        }\r
                        return -1;\r
@@ -256,7 +256,7 @@ namespace System.Collections.Specialized
                        od.list = list;\r
                        od.hash = hash;\r
                        od.comparer = comparer;\r
-                       od.readOnly = true;
+                       od.readOnly = true;\r
                        return od;\r
                }\r
                \r