X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fclass%2FSystem%2FSystem.Net%2FCookieCollection.cs;h=a8fec602f23aa5488cc80b4dc6203ef298b392b7;hb=9cb87907d7629f7dddc9d27a757446b73071822f;hp=2303ac7891fd241baf5c2038a3e3a86adc909cfe;hpb=04d1b4116331e3813b8f75304f714a5d61ba1214;p=mono.git diff --git a/mcs/class/System/System.Net/CookieCollection.cs b/mcs/class/System/System.Net/CookieCollection.cs index 2303ac7891f..a8fec602f23 100644 --- a/mcs/class/System/System.Net/CookieCollection.cs +++ b/mcs/class/System/System.Net/CookieCollection.cs @@ -4,8 +4,9 @@ // Authors: // Lawrence Pit (loz@cable.a2000.nl) // Gonzalo Paniagua Javier (gonzalo@ximian.com) +// Sebastien Pouliot // -// (c) Copyright 2004 Novell, Inc. (http://www.novell.com) +// Copyright (C) 2004,2009 Novell, Inc (http://www.novell.com) // // @@ -29,19 +30,38 @@ // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // -using System; using System.Collections; +using System.Collections.Generic; using System.Globalization; using System.Runtime.Serialization; namespace System.Net { [Serializable] - public class CookieCollection : ICollection, IEnumerable - { - ArrayList list = new ArrayList (4); +#if NET_2_1 + public sealed class CookieCollection : ICollection, IEnumerable { +#else + public class CookieCollection : ICollection, IEnumerable { +#endif + // not 100% identical to MS implementation + sealed class CookieCollectionComparer : IComparer { + public int Compare (Cookie x, Cookie y) + { + if (x == null || y == null) + return 0; + + int c1 = x.Name.Length + x.Value.Length; + int c2 = y.Name.Length + y.Value.Length; + + return (c1 - c2); + } + } + + static CookieCollectionComparer Comparer = new CookieCollectionComparer (); - internal ArrayList List { + List list = new List (); + + internal IList List { get { return list; } } // ICollection @@ -57,9 +77,14 @@ namespace System.Net get { return this; } } - public void CopyTo (Array array, int arrayIndex) + public void CopyTo (Array array, int index) { - list.CopyTo (array, arrayIndex); + (list as IList).CopyTo (array, index); + } + + public void CopyTo (Cookie [] array, int index) + { + list.CopyTo (array, index); } // IEnumerable @@ -89,6 +114,12 @@ namespace System.Net list [pos] = cookie; } + internal void Sort () + { + if (list.Count > 0) + list.Sort (Comparer); + } + int SearchCookie (Cookie cookie) { string name = cookie.Name; @@ -96,7 +127,7 @@ namespace System.Net string path = cookie.Path; for (int i = list.Count - 1; i >= 0; i--) { - Cookie c = (Cookie) list [i]; + Cookie c = list [i]; if (c.Version != cookie.Version) continue; @@ -129,7 +160,7 @@ namespace System.Net if (index < 0 || index >= list.Count) throw new ArgumentOutOfRangeException ("index"); - return (Cookie) list [index]; + return list [index]; } }