2006-02-10 Martin Baulig * Comparer.cs (IComparableOfTComparer): `T' must implement `IComparable' and not `IComparable'. Tue Jan 24 18:22:54 CET 2006 Paolo Molaro * Dictionary.cs: avoid long reminder operations. 2006-01-23 Raja R Harinath Speed up remove. Use 'dict[k]=v' as a self-tuning hint. * Dictionary.cs (GetSlot): Move data-structure traversal to ... (GetPrev): ... this. Returns the slot prior to the place we're looking for, or null if that place is the head of the chain. (Remove): Use it. (this.set): Use it. Implement move-to-front on set. * Dictionary.cs (ToTKey, ToTValue): New helpers to convert from type 'object'. (IDictionary.this, IDictionary.Add): Use them. (IDictionary.Contains, IDictionary.Remove): If the types don't match, do nothing. 2006-01-19 Raja R Harinath Fix to pass new nunit tests. * Dictionary.cs (ShimEnumerator): New class. Implement the requirement that ((IDictionary) foo).GetEnumerator ().Current has type DictionaryEntry. (IDictionary.GetEnumerator): Use ShimEnumerator. (Enumerator.Current): Now has type KeyValuePair. (Enumerator.MoveNext): Use VerifyState. (Enumerator.VerifyState): Move validation of 'current' field to ... (Enumerator.CurrentSlot): ... this. (Enumerator.Current, Enumerator.IDictionaryEnumerator.Entry): Use CurrentSlot. (CopyTo, ICollection.CopyTo): Use subtle reasoning to replace a '>=' with a '>'. Don't throw an ArgumentException when index==array.Length && Count==0. (KeyCollection.CopyTo, ValueCollection.CopyTo): Likewise, and thus obviate the need to check (dictionary.Count == 0). 2005-12-20 Sebastien Pouliot * List.cs: Applied Atsushi's patch for Sort (bug 76361) now that the generic versions of Array.Sort are implemented. 2005-12-19 Sebastien Pouliot * Dictionary.cs: Added [Serializable] attribute to both inner Enumerator struct in Key and Value inner collection classes. * EqualityComparer.cs: Added missing IEqualityComparer interface. * List.cs: Added [Serializable] attribute to both inner Enumerator struct. 2005-12-19 Sebastien Pouliot * Dictionary.cs: Fixed ICollection.CopyTo to use DictionaryEntry. Fixed Key and Value CopyTo not to throw exception if the dictionary is empty (fix bug #77019). * List.cs: Fix exception reporting to match MS behaviour (2.0 final). 2005-11-19 Zoltan Varga * KeyNotFoundException.cs: Add default message. 2005-09-18 Miguel de Icaza * Dictionary.cs: Change style for internal fields. If the capacity is zero, set the capacity to our default size as 0 is an allowed parameter in .NET 2005-08-10 Kamil Skalski * KeyValuePair.cs, Dictionary.cs: Change Key and Value to properties to match .NET 2.0 July CTP. Update its use in Dictionary, since now we cannot write to them. 2005-07-10 Kamil Skalski * Comparer.cs, EqualityComparer.cs: Use MakeGenericType instead of BindGenericParameters. 2005-06-27 Raja R Harinath Introduce some thread-safety by removing the modify-on-read move-to-front heuristic. * Dictionary.cs (_enumeratorGeneration, _enumerators): Remove. (Count): Add internal property set. Invalidate enumerators when Count is changed. Change all references of _usedSlots to Count. (this): Invalidate enumerators when the value of some slot is changed, even if the layout of the data-structure isn't modified. (DoHash): Remove null-key check. All codepaths leading to this function already have the check. (GetSlot): Remove move-to-front heuristic. (Remove): Update. 2005-06-24 Martin Baulig * IDictionary.cs: Use the same type parameter names than on MS. * IDictionary.cs, Dictionary.cs: We don't need the `CLSCompliant' attribute here. 2005-06-23 Martin Baulig * *.cs: Removed the `[ComVisible(false)]' attributes everywhere. 2005-06-22 Raja R Harinath * Dictionary.cs (_generation, _enumeratorGeneration, _enumerators): New fields to implement fail-fast semantics. All code that modifies the table increment _generation. (GetSlot): Use _hcp to compare keys. Return the slot containing the key, rather than the index. Avoid move-to-front heuristic when there's an enumerator coursing through the table. (this, Add, TryGetValue, ContainsKey, Remove): Update to change. (Enumerator.Enumerator): Save the generation of the dictionary. (Enumerator.Dispose): Inform dictionary that the enumerator is no more. (Enumerator.MoveNext, Enumerator.VerifyState): Fail if the dictionary has been modified. 2005-06-20 David waite * List.cs : substantial changes and optimizations (AddCollection, AddEnumerable): new internal specializations of AddRange (AsReadOnly): returns specific IList to match ms.net 2.0b2 api. (Clear): reset size to zero on clear (ConvertAll): catch null converter, use Add to prevent OutOfBounds exception (FindAll, FindIndex, FindLast, FindLastIndex, RemoveAll, TrueForAll): check for null match (FindLastIndex): correct index parameters based on ms.net 2005b2 behavior (ForEach): catch null action (CheckIndex): new internal function similar to CheckRange for functions which only provide a starting index (InsertCollection, InsertEnumerable): new internal specializations of InsertRange (ReadOnlyList): removed, ReadOnlyCollection in System.Collections.ObjectModel is used instead now 2005-06-16 David Waite * Dictionary.cs (EnumerationMode): Remove. (Enumerator): Remove return type flag - legacy return is expected to always return a DictionaryEntry (Enumerator): Make constructor internal, it is not public on ms.net beta 2 (VerifyState): Added method to check state preconditions and throw appropriate exceptions. (KeyCollection,ValueCollection): Mark sealed to match ms.net beta 2 (KeyCollection.Enumerator._hostEnumerator): make exact struct type, rather than boxing and using by interface (KeyCollection.Enumerator.Dispose): Call _hostEnumerator.Dispose. (ValueCollection.Enumerator._hostEnumerator): make exact struct type, rather than boxing and using by interface (ValueCollection.Enumerator.Dispose): Call _hostEnumerator.Dispose. * EqualityComparer.cs (DefaultComparer, IEquatableOfTEqualityComparer): Mark as serializable. 2005-06-16 Raja R Harinath * Dictionary.cs (GetKeys, GetValues): Remove. (SetThreshold): New function to calculate the resize threshold. (CopyTo): Don't use foreach syntax. (ContainsValue): Likewise. Use default equality comparer of the value type. (GetObjectData): Use CopyTo to copy into temporary array. Don't save redundant _usedSlots and _threshold. (OnDeserialization): Rewrite. (ICollection<>.CopyTo): Forward to CopyTo. (Enumerator._nextIndex): Rename to from _index. (Enumerator._next, Enumerator.FixNext): Remove. (Enumerator.Current): Rewrite to avoid need for _next. (Enumerator.IEnumerator.Reset): Update. (KeyCollection): Is also IEnumerable and IEnumerable. Update methods to conform to standard. (KeyCollection.GetEnumerator): Restore. Return the correct type. (KeyCollection.Enumerator): Rename from KeyEnumerator. Simple wrapper that forwards to Dictionary<,>.Enumerator. (ValueCollection): Likewise. 2005-06-12 David Waite * IKeyComparer.cs: removed * KeyValuePair.cs: add same-style ToString as ms.net Beta2 impl, make Serializable, use correct field names. * Dictionary.cs: Miscelaneus clean-ups, added serialization support, use Hashtable prime functions 2005-06-12 Ben Maurer * Comparer.cs, EqualityComparer.cs: Important performance hack: make sure that we don't box stuff and do reflection on every comparison. We use reflection at cctor time rather than on every request. 2005-06-09 Raja R Harinath Simplify Enumerator.MoveNext to make it "obviously correct", rather than require subtle reasoning about the state of various variables. * Dictionary.cs (Enumerator._isValid): Remove. Replace all uses with "_current == null". (Enumerator._validNodeVisited): Remove. (Enumerator._next): New. Holds the the next position. (Enumerator.FixNest): New helper function that ensures that _next has the right value. (Enumerator.MoveNext): Simplify. Now, copies _next to _current and advances _next if possible. 2005-06-08 Martin Baulig * Dictionary.cs (Dictionary.KeyEnumerator): Removed the public GetEnumerator() function since it's returning the wrong type. (Dictionary.ValueEnumerator): Likewise. Fix #75073. 2005-06-08 Ankit Jain * Dictionary.cs (Dictionary.MoveNext): Allow traversal of chain in last slot of the table. Fixes #75168. 2005-06-04 Ben Maurer * *.cs: 2.0 api fixups 2005-05-26 Miguel de Icaza * Dictionary.cs: Remove the `Hash' name from the Dictionary internal classes, make them public. 2005-05-26 Zoltan Varga * Dictionary.cs: Fix a warning. * IDictionary.cs: Add missing TryGetValue method. 2005-05-19 Geoff Norton * List.cs (Insert): Resize the array before the shift if needed 2005-05-18 Miguel de Icaza * List.cs (GetRange): Implement. Do not do lazy loading of data. Not worth adding an extra check, and not worth the bugs. This decision wont be discussed until: a) a full List regression test suite exists and b) performance benchmarks are created. (b) depends on (a) or the argument wont even be heard. 2005-05-13 Atsushi Enomoto * Queue.cs, Stack.cs: moved to System.dll 2005-05-06 Martin Baulig * *.cs: Add CLSCompliant(true) where missing. 2005-05-06 Zoltan Varga * *.cs: Remove CLSCompliant(false) attributes. 2005-05-05 Zoltan Varga * List.cs: Applied patch from Mart Roosmaa (roosmaa@gmail.com). Fix Insert method. Fixes #74824. 2005-04-29 Martin Baulig Reflect latest spec changes. * IEnumerable.cs (IEnumerable): Implement IEnumerable. * IEnumerator.cs (IEnumerator): Implement IEnumerator. 2005-04-29 Raja R Harinath Remove FIXME. * Dictionary.cs (Slot): Move to ... (Dictionary.Slot): ... here. 2005-04-28 Martin Baulig * Dictionary.cs, Queue.cs, Stack.cs, List.cs, Comparer.cs: Don't duplicate type parameters in the nested classes. 2005-04-20 Zoltan Varga * List.cs: Fix ToArray () method. Fixes #74675. 2005-04-04 Raja R Harinath * Dictionary.cs: Update to draft of Feb 27. Add some argument checks. (GetSlot): Don't throw KeyNotFoundException. Unify all list traversals in here. Move found key to head of chain, and return the index of the chain suitable for/containing the key. (Item, Add, Remove): Simplify, and remove FIXMEs. (Resize): Reuse linked list nodes from old table. (Dictionary.CopyTo, HashKeyCollection.CopyTo, HashValueCollection.CopyTo): Add some argument checks. 2005-04-02 Ben Maurer * Dictionary.cs: Real impl. 2005-02-21 Martin Baulig * IComparer.cs: Reverted the last change here, Equals() and GetHashCode() have been removed a long time ago. 2005-02-21 Kazuki Oikawa * IComparer.cs, IDictionary.cs: Corrected the wrong declaration. 2005-02-11 Carlos Alberto Cortez * List.cs: Added internal ReadOnlyCollection class, which is a wrapper for a read only IList version of the List. Used in AsReadOnly () method. 2005-02-07 Ben Maurer * List.cs (CheckRange): Comparison error. Duh! (Shift): really deal with neg. delta. Also, adjust the `size'. Based on a patch from Marc Denty (marc.denty@libertysurf.fr). Fixes #72258. 2005-01-29 Ben Maurer * Queue.cs: `duh' bugs. 2004-12-27 Ben Maurer * Stack.cs: Stupid bug fixes. * List.cs: My new (mostly untested ;-) impl of List . Implements most of the API. 2004-12-26 Ben Maurer * Queue.cs: New, non-linked-list based impl. 2004-11-29 Ben Maurer * Comparer.cs: Update this class. 2004-11-25 Carlos Alberto Cortez * List.cs: Enumerator changed to behave like the MS impl. 2004-11-25 Ben Maurer * Stack.cs: New, list based impl. Waiting for some gmcs fixes. 2004-11-10 Martin Baulig * IDictionary.cs (IDictionary): `IsReadOnly' and `Clear' are inherited from ICollection. 2004-09-20 Gert Driesen * ReadOnlyCollection.cs: Moved to System assembly * Collection.cs: Moved to System assembly 2004-09-07 Carlos Alberto Cortez * ReadOnlyCollection.cs: New file and changes to Collection.cs tu support it. 2004-09-05 Marek Safar * Dictionary.cs: Added new file (no implementation). 2004-09-03 Carlos Alberto Cortez * Collection.cs: Small improvements related to style, resizing, and type checking. 2004-09-01 Carlos Alberto Cortez * Collection.cs: New file. 2004-08-04 Martin Baulig * List.cs (List.Enumerator): Made this a struct. (List.GetEnumerator): The public method now returns the `Enumerator' struct. 2004-08-02 Martin Baulig Started to do some API review. * ICollection.cs (ICollection): Added IsReadOnly, Add, Clear, Contains and Remove. * IList.cs (IList): Removed Add, Clear, Constains, Remove, IsReadOnly and IsFixedSize. 2004-08-02 Martin Baulig * IList.cs (IList.Add): Changed return type to void. * List.cs (List.Add): Likewise. 2004-07-16 Martin Baulig * IComparable.cs: Removed, it's in System. 2004-07-12 Duncan Mak * KeyNotFoundException.cs: Added. 2004-06-18 Ben Maurer * Comparer.cs: v2 impl. Some workarounds for gmcs are enabled. 2004-05-26 Sebastien Pouliot * Queue.cs: Fixed possible integer overflow in CopyTo methods. * Stack.cs: Fixed possible integer overflow in CopyTo methods. 2004-03-13 Martin Baulig * Stack.cs, Queue.cs, List.cs: Implement the non-generic interfaces. 2004-03-11 Martin Baulig * List.cs: New file. 2004-03-11 Martin Baulig * Stack.cs, Queue.cs: Just use `Node' for the nested class, not `Node' (which would create another type parameter `T' overriding `T' from the outer class). 2004-02-23 Martin Baulig * Stack.cs, Queue.cs: New files. Hmm, looks like I forgot to add them to CVS; they're already on my hard disk since December or so. 2003-12-08 Martin Baulig * *.cs: require GENERICS. 2003-11-08 Ben Maurer * *.cs: require NET_2_0 and GENERICS 2003-11-07 Ben Maurer * IComparable.cs, IComparer.cs, IDictionary.cs, IKeyComparer.cs, KeyValuePair.cs Added. 2003-11-06 Martin Baulig * ICollection.cs, IList.cs, IEnumerator.cs, IEnumerable.cs: Started to implement the System.Collections.Generic classes.