// 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
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
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
-
- 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
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 virtual bool IsReadOnly\r
+ public bool IsReadOnly\r
{\r
get {\r
return readOnly;\r
}\r
}\r
\r
- public virtual object this [object key]\r
+ public object this [object key]\r
{\r
get { return hash [key]; }\r
set {\r
}\r
}\r
\r
- public virtual object this [int index]\r
+ public object this [int index]\r
{\r
get { return ((DictionaryEntry) list [index]).Value; }\r
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
\r
- public virtual ICollection Keys\r
+ public ICollection Keys\r
{\r
get {\r
return new OrderedCollection (list, true);\r
}\r
}\r
\r
- public virtual ICollection Values\r
+ public ICollection Values\r
{\r
get {\r
return new OrderedCollection (list, false);\r
{\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
od.list = list;\r
od.hash = hash;\r
od.comparer = comparer;\r
- od.readOnly = true;
+ od.readOnly = true;\r
return od;\r
}\r
\r