Author: spouliot
Date: 2005-11-25 10:32:19 -0500 (Fri, 25 Nov 2005)
New Revision: 53478

Modified:
   trunk/mcs/class/corlib/System/ChangeLog
   trunk/mcs/class/corlib/System/String.cs
Log:
2005-11-25  Sebastien Pouliot  <[EMAIL PROTECTED]>

        * String.cs: Added support for Compare(... StringComparison) in 2.0.



Modified: trunk/mcs/class/corlib/System/ChangeLog
===================================================================
--- trunk/mcs/class/corlib/System/ChangeLog     2005-11-25 13:11:43 UTC (rev 
53477)
+++ trunk/mcs/class/corlib/System/ChangeLog     2005-11-25 15:32:19 UTC (rev 
53478)
@@ -1,3 +1,7 @@
+2005-11-25  Sebastien Pouliot  <[EMAIL PROTECTED]>
+
+       * String.cs: Added support for Compare(... StringComparison) in 2.0.
+
 2005-11-25  Alp Toker  <[EMAIL PROTECTED]>
 
        * Type.cs (IsVisible): New 2.0 property, implemented recursively.

Modified: trunk/mcs/class/corlib/System/String.cs
===================================================================
--- trunk/mcs/class/corlib/System/String.cs     2005-11-25 13:11:43 UTC (rev 
53477)
+++ trunk/mcs/class/corlib/System/String.cs     2005-11-25 15:32:19 UTC (rev 
53478)
@@ -474,7 +474,49 @@
 
                        return culture.CompareInfo.Compare (strA, indexA, len1, 
strB, indexB, len2, compopts);
                }
+#if NET_2_0
+               public static int Compare (string strA, string strB, 
StringComparison comparisonType)
+               {
+                       switch (comparisonType) {
+                       case StringComparison.CurrentCulture:
+                               return Compare (strA, strB, false, 
CultureInfo.CurrentCulture);
+                       case StringComparison.CurrentCultureIgnoreCase:
+                               return Compare (strA, strB, true, 
CultureInfo.CurrentCulture);
+                       case StringComparison.InvariantCulture:
+                               return Compare (strA, strB, false, 
CultureInfo.InvariantCulture);
+                       case StringComparison.InvariantCultureIgnoreCase:
+                               return Compare (strA, strB, true, 
CultureInfo.InvariantCulture);
+                       case StringComparison.Ordinal:
+                               return CompareOrdinal (strA, strB, 
CompareOptions.Ordinal);
+                       case StringComparison.OrdinalIgnoreCase:
+                               return CompareOrdinal (strA, strB, 
CompareOptions.Ordinal | CompareOptions.IgnoreCase);
+                       default:
+                               string msg = Locale.GetText ("Invalid value 
'{0}' for StringComparison", comparisonType);
+                               throw new ArgumentException ("comparisonType", 
msg);
+                       }
+               }
 
+               public static int Compare (string strA, int indexA, string 
strB, int indexB, int length, StringComparison comparisonType)
+               {
+                       switch (comparisonType) {
+                       case StringComparison.CurrentCulture:
+                               return Compare (strA, indexA, strB, indexB, 
length, false, CultureInfo.CurrentCulture);
+                       case StringComparison.CurrentCultureIgnoreCase:
+                               return Compare (strA, indexA, strB, indexB, 
length, true, CultureInfo.CurrentCulture);
+                       case StringComparison.InvariantCulture:
+                               return Compare (strA, indexA, strB, indexB, 
length, false, CultureInfo.InvariantCulture);
+                       case StringComparison.InvariantCultureIgnoreCase:
+                               return Compare (strA, indexA, strB, indexB, 
length, true, CultureInfo.InvariantCulture);
+                       case StringComparison.Ordinal:
+                               return CompareOrdinal (strA, indexA, strB, 
indexB, length, CompareOptions.Ordinal);
+                       case StringComparison.OrdinalIgnoreCase:
+                               return CompareOrdinal (strA, indexA, strB, 
indexB, length, CompareOptions.Ordinal | CompareOptions.IgnoreCase);
+                       default:
+                               string msg = Locale.GetText ("Invalid value 
'{0}' for StringComparison", comparisonType);
+                               throw new ArgumentException ("comparisonType", 
msg);
+                       }
+               }
+#endif
                public int CompareTo (Object value)
                {
                        if (value == null)
@@ -496,6 +538,11 @@
 
                public static int CompareOrdinal (String strA, String strB)
                {
+                       return CompareOrdinal (strA, strB, 
CompareOptions.Ordinal);
+               }
+
+               internal static int CompareOrdinal (String strA, String strB, 
CompareOptions options)
+               {
                        if (strA == null) {
                                if (strB == null)
                                        return 0;
@@ -510,11 +557,16 @@
                         * instantiate (and chances are it already has
                         * been.)
                         */
-                       return CultureInfo.InvariantCulture.CompareInfo.Compare 
(strA, strB, CompareOptions.Ordinal);
+                       return CultureInfo.InvariantCulture.CompareInfo.Compare 
(strA, strB, options);
                }
 
                public static int CompareOrdinal (String strA, int indexA, 
String strB, int indexB, int length)
                {
+                       return CompareOrdinal (strA, indexA, strB, indexB, 
length, CompareOptions.Ordinal);
+               }
+
+               internal static int CompareOrdinal (String strA, int indexA, 
String strB, int indexB, int length, CompareOptions options)
+               {
                        if ((indexA > strA.Length) || (indexB > strB.Length) || 
(indexA < 0) || (indexB < 0) || (length < 0))
                                throw new ArgumentOutOfRangeException ();
 
@@ -544,7 +596,7 @@
                                len2 = strB.Length - indexB;
                        }
 
-                       return CultureInfo.InvariantCulture.CompareInfo.Compare 
(strA, indexA, len1, strB, indexB, len2, CompareOptions.Ordinal);
+                       return CultureInfo.InvariantCulture.CompareInfo.Compare 
(strA, indexA, len1, strB, indexB, len2, options);
                }
 
                public bool EndsWith (String value)

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to