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