1 2008-04-29 Juraj Skripsky <js@hotfeet.ch>
3 * Dictionary.cs (Clear, Remove): Clear empty slots in keySlots
4 and valueSlots. Otherwise the garbage collector cannot reclaim
5 the referenced key/value. Fixes bug #384723.
7 2008-04-02 Andreas Nahr <ClassDevelopment@A-SoftTech.com>
9 * KeyNotFoundException.cs
10 * KeyValuePair.cs: Fix parameter names
12 2008-03-21 Sebastien Pouliot <sebastien@ximian.com>
14 * EqualityComparer.cs: Add null checks in GetHashCode. Fix bug
17 2007-11-05 Sebastien Pouliot <sebastien@ximian.com>
19 * Dictionary.cs: Ensure that the non-generic CopyTo works on Array.
22 2007-10-31 Miguel de Icaza <miguel@novell.com>
24 * Dictionary.cs: Do not increment curTableItem when we return
25 false. Was not necessary, just a defensive move.
27 2007-10-10 Juraj Skripsky <js@hotfeet.ch>
29 * Dictionary.cs (Enumerator.MoveNext): Handle the case where we
30 had already reached the end. Fixes bug #332534.
32 2007-08-20 Jb Evain <jbevain@novell.com>
34 * List.cs (AddCollection): return early if the collection
37 2007-08-08 Atsushi Enomoto <atsushi@ximian.com>
39 * Dictionary.cs : [Comvisible(true)]->[ComVisible(false)].
41 2007-06-23 Marek Safar <marek.safar@gmail.com>
43 * List.cs: Make CheckMatch static.
45 2007-06-20 Juraj Skripsky <js@hotfeet.ch>
47 * Dictionary.cs: Optimize and add implementation notes. Use a "mini-heap"
48 to store the linked lists instead of the regular heap. Split arrays of
49 structs into separate arrays to make the GC's life simpler (see bug 81879
50 for details). Make class serialization compatible with MS.NET.
52 * EqualityComparer.cs: Rename IEquatableOfTEqualityComparer<T> to
53 GenericEqualityComparer<T> to fix binary serialization compatibility
56 2006-04-16 Jonathan Chambers <joncham@gmail.com>
58 * List.cs: Clear entry in RemoveAt after removing item.
61 2007-03-27 Alan McGovern <alan.mcgovern@gmail.com>
63 * List.cs: Optimized several methods to increase performance
65 2007-03-21 Juraj Skripsky <js@hotfeet.ch>
67 * List.cs (FindAllStackBits): Small optimization to the new code.
68 Built resulting List<T> directly as an array, wrap it in a List<T>
69 afterwards. Stop the filling of the result array as soon as all
70 matching items have been processed.
72 2007-03-20 Juan Cristóbal Olivares <juancri@gmail.com>
74 * List.cs (FindAll): Optimize FindAll using a bitmask to determine
75 the number of positive matches, this increases the performance in
76 all cases below 10,000,000 elements extensively:
79 old method: 00:00:00.0126610 (26x)
80 stackalloc bit method: 00:00:00.0004750 (1x)
81 array bit method: 00:00:00.0010700 (2x)
82 heap bit method: 00:00:00.0038830 (8x)
85 old method: 00:00:00.0139250 (24x)
86 stackalloc bit method: 00:00:00.0005670 (1x)
87 array bit method: 00:00:00.0010890 (2x)
88 heap bit method: 00:00:00.0034920 (6x)
91 old method: 00:00:00.0136110 (12x)
92 stackalloc bit method: 00:00:00.0011240 (1x)
93 array bit method: 00:00:00.0016450 (1.4x)
94 heap bit method: 00:00:00.0043110 (3x)
97 old method: 00:00:00.0175970 (3x)
98 stackalloc bit method: 00:00:00.0085630 (1.5x)
99 array bit method: 00:00:00.0055010 (1x)
100 heap bit method: 00:00:00.0099590 (1.8x)
103 old method: 00:00:00.0210330 (2x)
104 array bit method: 00:00:00.0100430 (1x)
105 heap bit method: 00:00:00.0154150 (1.5x)
108 old method: 00:00:00.1243730 (1.2x)
109 array bit method: 00:00:00.0973110 (1x)
110 heap bit method: 00:00:00.1285650 (1.3x)
113 old method: 00:00:00.9252570 (1x)
114 array bit method: 00:00:00.9632300 ( 1.05x)
115 heap bit method: 00:00:01.1098490 (1.20x)
117 2007-03-08 David Mitchell <dmitchell@logos.com>
119 * List.cs: Fix the case where List.set_Item(int index) throws
120 inappropriate exception when index is equal to List.Count
122 List.IndexOf(object item) and IList.Contains(object item) throw
123 exceptions when given invalid types.
125 IList.Add(object item) throws InvalidCastException when item is
126 not of the correct type.
128 2007-03-08 Gert Driesen <drieseng@users.sourceforge.net>
130 * Comparer.cs: Renamed IComparableOfTComparer<T> to GenericComparer<T>
131 to fix binary serialization compatibility with MS.
133 2007-03-05 David Mitchell <dmitchell@logos.com>
135 * Dictionary.cs: An instance of Dictionary<TKey,TValue> is
136 supposed to throw a KeyNotFoundException when
137 the user attempts to retrieve the value associated with a key that
138 is not in the dictionary.
140 On the other hand, an instance of IDictionary is supposed to
141 return null in similar circumstances.
143 2007-03-05 David Mitchell <dmitchell@logos.com>
145 * List.cs: Fix InsertRange bug (80930).
147 2006-09-15 Gert Driesen <drieseng@users.sourceforge.net>
149 * List.cs: Fixed binary serialization compatibility with MS.NET.
150 Increment version whenever _items is modified; this fixes version
151 checks in Enumerator.
153 2006-09-06 Zoltan Varga <vargaz@gmail.com>
155 * Dictionary.cs: Speed up get_Item/set_Item/GetPrev () a bit. Increase capacity
156 specified by the user so 'capacity' elements can really be added without resizing.
158 2006-07-12 Zoltan Varga <vargaz@gmail.com>
160 * Dictionary.cs: Swap order of parameters to cmp.Equals () to improve
161 compatibility with MS.NET and strange Equals () implementations.
163 2006-05-17 Kazuki Oikawa <kazuki@panicode.com>
165 * List.cs : implemented Sort(Comparison <T>).
167 2006-05-08 Atsushi Enomoto <atsushi@ximian.com>
169 * List.cs : use proper comparer in Contains(), IndexOf() and
170 LastIndexOf(). Patch by Kazuki Oikawa. Fixed bug #77277.
172 2006-03-16 Ankit Jain <jankit@novell.com>
174 * List.cs (CheckIndex): Check for -ve indices and allow index == size.
175 (Insert): Use CheckIndex.
177 2006-03-12 Zoltan Varga <vargaz@gmail.com>
179 * List.cs: Applied patch from <kazuki@panicode.com>. Fixes #77504.
181 2006-02-10 Martin Baulig <martin@ximian.com>
184 (IComparableOfTComparer): `T' must implement `IComparable<T>' and
187 Tue Jan 24 18:22:54 CET 2006 Paolo Molaro <lupus@ximian.com>
189 * Dictionary.cs: avoid long reminder operations.
191 2006-01-23 Raja R Harinath <rharinath@novell.com>
193 Speed up remove. Use 'dict[k]=v' as a self-tuning hint.
194 * Dictionary.cs (GetSlot): Move data-structure traversal to ...
195 (GetPrev): ... this. Returns the slot prior to the place we're
196 looking for, or null if that place is the head of the chain.
198 (this.set): Use it. Implement move-to-front on set.
200 * Dictionary.cs (ToTKey, ToTValue): New helpers to convert from
202 (IDictionary.this, IDictionary.Add): Use them.
203 (IDictionary.Contains, IDictionary.Remove): If the types don't
206 2006-01-19 Raja R Harinath <rharinath@novell.com>
208 Fix to pass new nunit tests.
209 * Dictionary.cs (ShimEnumerator): New class. Implement the
210 requirement that ((IDictionary) foo).GetEnumerator ().Current has
211 type DictionaryEntry.
212 (IDictionary.GetEnumerator): Use ShimEnumerator.
213 (Enumerator.Current): Now has type KeyValuePair<TKey, TValue>.
214 (Enumerator.MoveNext): Use VerifyState.
215 (Enumerator.VerifyState): Move validation of 'current' field to ...
216 (Enumerator.CurrentSlot): ... this.
217 (Enumerator.Current, Enumerator.IDictionaryEnumerator.Entry):
219 (CopyTo, ICollection.CopyTo): Use subtle reasoning to replace a
220 '>=' with a '>'. Don't throw an ArgumentException when
221 index==array.Length && Count==0.
222 (KeyCollection.CopyTo, ValueCollection.CopyTo): Likewise, and thus
223 obviate the need to check (dictionary.Count == 0).
225 2005-12-20 Sebastien Pouliot <sebastien@ximian.com>
227 * List.cs: Applied Atsushi's patch for Sort (bug 76361) now that the
228 generic versions of Array.Sort are implemented.
230 2005-12-19 Sebastien Pouliot <sebastien@ximian.com>
232 * Dictionary.cs: Added [Serializable] attribute to both inner
233 Enumerator struct in Key and Value inner collection classes.
234 * EqualityComparer.cs: Added missing IEqualityComparer interface.
235 * List.cs: Added [Serializable] attribute to both inner Enumerator
238 2005-12-19 Sebastien Pouliot <sebastien@ximian.com>
240 * Dictionary.cs: Fixed ICollection.CopyTo to use DictionaryEntry. Fixed
241 Key and Value CopyTo not to throw exception if the dictionary is empty
243 * List.cs: Fix exception reporting to match MS behaviour (2.0 final).
245 2005-11-19 Zoltan Varga <vargaz@gmail.com>
247 * KeyNotFoundException.cs: Add default message.
249 2005-09-18 Miguel de Icaza <miguel@novell.com>
251 * Dictionary.cs: Change style for internal fields.
253 If the capacity is zero, set the capacity to our default size as 0
254 is an allowed parameter in .NET
256 2005-08-10 Kamil Skalski <nazgul@nemerle.org>
258 * KeyValuePair.cs, Dictionary.cs: Change Key and Value to properties to match
259 .NET 2.0 July CTP. Update its use in Dictionary, since now we
260 cannot write to them.
262 2005-07-10 Kamil Skalski <nazgul@nemerle.org>
264 * Comparer.cs, EqualityComparer.cs: Use MakeGenericType instead of BindGenericParameters.
267 2005-06-27 Raja R Harinath <rharinath@novell.com>
269 Introduce some thread-safety by removing the modify-on-read
270 move-to-front heuristic.
271 * Dictionary.cs (_enumeratorGeneration, _enumerators): Remove.
272 (Count): Add internal property set. Invalidate enumerators when
273 Count is changed. Change all references of _usedSlots to Count.
274 (this): Invalidate enumerators when the value of some slot is
275 changed, even if the layout of the data-structure isn't modified.
276 (DoHash): Remove null-key check. All codepaths leading to this
277 function already have the check.
278 (GetSlot): Remove move-to-front heuristic.
281 2005-06-24 Martin Baulig <martin@ximian.com>
283 * IDictionary.cs: Use the same type parameter names than on MS.
285 * IDictionary.cs, Dictionary.cs: We don't need the `CLSCompliant'
288 2005-06-23 Martin Baulig <martin@ximian.com>
290 * *.cs: Removed the `[ComVisible(false)]' attributes everywhere.
292 2005-06-22 Raja R Harinath <rharinath@novell.com>
294 * Dictionary.cs (_generation, _enumeratorGeneration, _enumerators):
295 New fields to implement fail-fast semantics. All code that
296 modifies the table increment _generation.
297 (GetSlot): Use _hcp to compare keys. Return the slot containing
298 the key, rather than the index. Avoid move-to-front heuristic
299 when there's an enumerator coursing through the table.
300 (this, Add, TryGetValue, ContainsKey, Remove): Update to change.
301 (Enumerator.Enumerator): Save the generation of the dictionary.
302 (Enumerator.Dispose): Inform dictionary that the enumerator is no more.
303 (Enumerator.MoveNext, Enumerator.VerifyState): Fail if the
304 dictionary has been modified.
306 2005-06-20 David waite <mass@akuma.org>
308 * List.cs : substantial changes and optimizations
309 (AddCollection, AddEnumerable): new internal specializations of AddRange
310 (AsReadOnly): returns specific IList<T> to match ms.net 2.0b2 api.
311 (Clear): reset size to zero on clear
312 (ConvertAll): catch null converter, use Add to prevent OutOfBounds
314 (FindAll, FindIndex, FindLast, FindLastIndex, RemoveAll, TrueForAll):
316 (FindLastIndex): correct index parameters based on ms.net 2005b2 behavior
317 (ForEach): catch null action
318 (CheckIndex): new internal function similar to CheckRange for functions
319 which only provide a starting index
320 (InsertCollection, InsertEnumerable): new internal specializations of
322 (ReadOnlyList): removed, ReadOnlyCollection in
323 System.Collections.ObjectModel is used instead now
325 2005-06-16 David Waite <mass@akuma.org>
327 * Dictionary.cs (EnumerationMode): Remove.
328 (Enumerator): Remove return type flag - legacy return is expected to
329 always return a DictionaryEntry
330 (Enumerator): Make constructor internal, it is not public on ms.net
332 (VerifyState): Added method to check state preconditions and throw
333 appropriate exceptions.
334 (KeyCollection,ValueCollection): Mark sealed to match ms.net beta 2
335 (KeyCollection.Enumerator._hostEnumerator): make exact struct type,
336 rather than boxing and using by interface
337 (KeyCollection.Enumerator.Dispose): Call _hostEnumerator.Dispose.
338 (ValueCollection.Enumerator._hostEnumerator): make exact struct type,
339 rather than boxing and using by interface
340 (ValueCollection.Enumerator.Dispose): Call _hostEnumerator.Dispose.
341 * EqualityComparer.cs (DefaultComparer, IEquatableOfTEqualityComparer):
342 Mark as serializable.
344 2005-06-16 Raja R Harinath <rharinath@novell.com>
346 * Dictionary.cs (GetKeys, GetValues): Remove.
347 (SetThreshold): New function to calculate the resize threshold.
348 (CopyTo): Don't use foreach syntax.
349 (ContainsValue): Likewise. Use default equality comparer of the
351 (GetObjectData): Use CopyTo to copy into temporary array. Don't
352 save redundant _usedSlots and _threshold.
353 (OnDeserialization): Rewrite.
354 (ICollection<>.CopyTo): Forward to CopyTo.
355 (Enumerator._nextIndex): Rename to from _index.
356 (Enumerator._next, Enumerator.FixNext): Remove.
357 (Enumerator.Current): Rewrite to avoid need for _next.
358 (Enumerator.IEnumerator.Reset): Update.
359 (KeyCollection): Is also IEnumerable<TKey> and IEnumerable.
360 Update methods to conform to standard.
361 (KeyCollection.GetEnumerator): Restore. Return the correct type.
362 (KeyCollection.Enumerator): Rename from KeyEnumerator. Simple
363 wrapper that forwards to Dictionary<,>.Enumerator.
364 (ValueCollection): Likewise.
366 2005-06-12 David Waite <dwaite@gmail.com>
368 * IKeyComparer.cs: removed
369 * KeyValuePair.cs: add same-style ToString as ms.net Beta2 impl,
370 make Serializable, use correct field names.
371 * Dictionary.cs: Miscelaneus clean-ups, added serialization
372 support, use Hashtable prime functions
374 2005-06-12 Ben Maurer <bmaurer@ximian.com>
376 * Comparer.cs, EqualityComparer.cs: Important performance hack:
377 make sure that we don't box stuff and do reflection on every
378 comparison. We use reflection at cctor time rather than on every
381 2005-06-09 Raja R Harinath <rharinath@novell.com>
383 Simplify Enumerator.MoveNext to make it "obviously correct", rather
384 than require subtle reasoning about the state of various variables.
385 * Dictionary.cs (Enumerator._isValid): Remove. Replace all uses
386 with "_current == null".
387 (Enumerator._validNodeVisited): Remove.
388 (Enumerator._next): New. Holds the the next position.
389 (Enumerator.FixNest): New helper function that ensures that _next
391 (Enumerator.MoveNext): Simplify. Now, copies _next to _current
392 and advances _next if possible.
394 2005-06-08 Martin Baulig <martin@ximian.com>
396 * Dictionary.cs (Dictionary.KeyEnumerator): Removed the public
397 GetEnumerator() function since it's returning the wrong type.
398 (Dictionary.ValueEnumerator): Likewise. Fix #75073.
400 2005-06-08 Ankit Jain <ankit@corewars.org>
402 * Dictionary.cs (Dictionary<TKey, TValue>.MoveNext): Allow traversal of chain in last slot
403 of the table. Fixes #75168.
405 2005-06-04 Ben Maurer <bmaurer@ximian.com>
407 * *.cs: 2.0 api fixups
409 2005-05-26 Miguel de Icaza <miguel@novell.com>
411 * Dictionary.cs: Remove the `Hash' name from the Dictionary
412 internal classes, make them public.
414 2005-05-26 Zoltan Varga <vargaz@freemail.hu>
416 * Dictionary.cs: Fix a warning.
418 * IDictionary.cs: Add missing TryGetValue method.
420 2005-05-19 Geoff Norton <gnorton@customerdna.com>
422 * List.cs (Insert): Resize the array before the shift if needed
424 2005-05-18 Miguel de Icaza <miguel@novell.com>
426 * List.cs (GetRange): Implement.
428 Do not do lazy loading of data. Not worth adding an
429 extra check, and not worth the bugs.
431 This decision wont be discussed until: a) a full List regression
432 test suite exists and b) performance benchmarks are created. (b)
433 depends on (a) or the argument wont even be heard.
435 2005-05-13 Atsushi Enomoto <atsushi@ximian.com>
437 * Queue.cs, Stack.cs: moved to System.dll
439 2005-05-06 Martin Baulig <martin@ximian.com>
441 * *.cs: Add CLSCompliant(true) where missing.
443 2005-05-06 Zoltan Varga <vargaz@freemail.hu>
445 * *.cs: Remove CLSCompliant(false) attributes.
447 2005-05-05 Zoltan Varga <vargaz@freemail.hu>
449 * List.cs: Applied patch from Mart Roosmaa (roosmaa@gmail.com).
450 Fix Insert method. Fixes #74824.
452 2005-04-29 Martin Baulig <martin@ximian.com>
454 Reflect latest spec changes.
456 * IEnumerable.cs (IEnumerable<T>): Implement IEnumerable.
457 * IEnumerator.cs (IEnumerator<T>): Implement IEnumerator.
459 2005-04-29 Raja R Harinath <rharinath@novell.com>
462 * Dictionary.cs (Slot<K,V>): Move to ...
463 (Dictionary<K,V>.Slot): ... here.
465 2005-04-28 Martin Baulig <martin@ximian.com>
467 * Dictionary.cs, Queue.cs, Stack.cs, List.cs, Comparer.cs: Don't
468 duplicate type parameters in the nested classes.
470 2005-04-20 Zoltan Varga <vargaz@freemail.hu>
472 * List.cs: Fix ToArray () method. Fixes #74675.
474 2005-04-04 Raja R Harinath <rharinath@novell.com>
476 * Dictionary.cs: Update to draft of Feb 27. Add some argument checks.
477 (GetSlot): Don't throw KeyNotFoundException. Unify all list
478 traversals in here. Move found key to head of chain, and return
479 the index of the chain suitable for/containing the key.
480 (Item, Add, Remove): Simplify, and remove FIXMEs.
481 (Resize): Reuse linked list nodes from old table.
482 (Dictionary.CopyTo, HashKeyCollection.CopyTo, HashValueCollection.CopyTo):
483 Add some argument checks.
485 2005-04-02 Ben Maurer <bmaurer@ximian.com>
487 * Dictionary.cs: Real impl.
489 2005-02-21 Martin Baulig <martin@ximian.com>
491 * IComparer.cs: Reverted the last change here, Equals() and
492 GetHashCode() have been removed a long time ago.
494 2005-02-21 Kazuki Oikawa <kazuki@panicode.com>
496 * IComparer.cs, IDictionary.cs: Corrected the wrong declaration.
498 2005-02-11 Carlos Alberto Cortez <calberto.cortez@gmail.com>
500 * List.cs: Added internal ReadOnlyCollection class,
501 which is a wrapper for a read only IList<T> version of the List<T>.
502 Used in AsReadOnly () method.
504 2005-02-07 Ben Maurer <bmaurer@ximian.com>
506 * List.cs (CheckRange): Comparison error. Duh!
507 (Shift): really deal with neg. delta. Also, adjust the `size'.
509 Based on a patch from Marc Denty (marc.denty@libertysurf.fr).
513 2005-01-29 Ben Maurer <bmaurer@ximian.com>
515 * Queue.cs: `duh' bugs.
517 2004-12-27 Ben Maurer <bmaurer@ximian.com>
519 * Stack.cs: Stupid bug fixes.
521 * List.cs: My new (mostly untested ;-) impl of List
522 <T>. Implements most of the API.
524 2004-12-26 Ben Maurer <bmaurer@ximian.com>
526 * Queue.cs: New, non-linked-list based impl.
528 2004-11-29 Ben Maurer <bmaurer@ximian.com>
530 * Comparer.cs: Update this class.
532 2004-11-25 Carlos Alberto Cortez <calberto.cortez@gmail.com>
534 * List.cs: Enumerator changed to behave like the MS impl.
536 2004-11-25 Ben Maurer <bmaurer@ximian.com>
538 * Stack.cs: New, list based impl. Waiting for some gmcs fixes.
540 2004-11-10 Martin Baulig <martin@ximian.com>
542 * IDictionary.cs (IDictionary): `IsReadOnly' and `Clear' are
543 inherited from ICollection.
545 2004-09-20 Gert Driesen <drieseng@users.sourceforge.net>
547 * ReadOnlyCollection.cs: Moved to System assembly
548 * Collection.cs: Moved to System assembly
550 2004-09-07 Carlos Alberto Cortez <carlos@unixmexico.org>
552 * ReadOnlyCollection.cs: New file and changes to
553 Collection.cs tu support it.
555 2004-09-05 Marek Safar <marek.safar@seznam.cz>
557 * Dictionary.cs: Added new file (no implementation).
559 2004-09-03 Carlos Alberto Cortez <carlos@unixmexico.org>
561 * Collection.cs: Small improvements related to
562 style, resizing, and type checking.
564 2004-09-01 Carlos Alberto Cortez <carlos@unixmexico.org>
566 * Collection.cs: New file.
568 2004-08-04 Martin Baulig <martin@ximian.com>
570 * List.cs (List<T>.Enumerator): Made this a struct.
571 (List<T>.GetEnumerator): The public method now returns the
574 2004-08-02 Martin Baulig <martin@ximian.com>
576 Started to do some API review.
578 * ICollection.cs (ICollection<T>): Added IsReadOnly, Add, Clear,
581 * IList.cs (IList<T>): Removed Add, Clear, Constains, Remove,
582 IsReadOnly and IsFixedSize.
584 2004-08-02 Martin Baulig <martin@ximian.com>
586 * IList.cs (IList.Add): Changed return type to void.
588 * List.cs (List.Add): Likewise.
590 2004-07-16 Martin Baulig <martin@ximian.com>
592 * IComparable.cs: Removed, it's in System.
594 2004-07-12 Duncan Mak <duncan@ximian.com>
596 * KeyNotFoundException.cs: Added.
598 2004-06-18 Ben Maurer <bmaurer@ximian.com>
600 * Comparer.cs: v2 impl. Some workarounds for gmcs are enabled.
602 2004-05-26 Sebastien Pouliot <sebastien@ximian.com>
604 * Queue.cs: Fixed possible integer overflow in CopyTo methods.
605 * Stack.cs: Fixed possible integer overflow in CopyTo methods.
607 2004-03-13 Martin Baulig <martin@ximian.com>
609 * Stack.cs, Queue.cs, List.cs: Implement the non-generic interfaces.
611 2004-03-11 Martin Baulig <martin@ximian.com>
615 2004-03-11 Martin Baulig <martin@ximian.com>
617 * Stack.cs, Queue.cs: Just use `Node' for the nested class, not
618 `Node<T>' (which would create another type parameter `T'
619 overriding `T' from the outer class).
621 2004-02-23 Martin Baulig <martin@ximian.com>
623 * Stack.cs, Queue.cs: New files. Hmm, looks like I forgot to add
624 them to CVS; they're already on my hard disk since December or so.
626 2003-12-08 Martin Baulig <martin@ximian.com>
628 * *.cs: require GENERICS.
630 2003-11-08 Ben Maurer <bmaurer@users.sourceforge.net>
632 * *.cs: require NET_2_0 and GENERICS
634 2003-11-07 Ben Maurer <bmaurer@users.sourceforge.net>
636 * IComparable.cs, IComparer.cs, IDictionary.cs, IKeyComparer.cs, KeyValuePair.cs
639 2003-11-06 Martin Baulig <martin@ximian.com>
641 * ICollection.cs, IList.cs, IEnumerator.cs, IEnumerable.cs:
642 Started to implement the System.Collections.Generic classes.