2006-02-02 Gonzalo Paniagua Javier <gonzalo@ximian.com>
authorGonzalo Paniagua Javier <gonzalo.mono@gmail.com>
Thu, 2 Feb 2006 16:36:09 +0000 (16:36 -0000)
committerGonzalo Paniagua Javier <gonzalo.mono@gmail.com>
Thu, 2 Feb 2006 16:36:09 +0000 (16:36 -0000)
* String.cs: implement 2.0 StartsWith and EndsWith new overloads. Based
on a patch by Thong Nguyen.

svn path=/trunk/mcs/; revision=56477

mcs/class/corlib/System/ChangeLog
mcs/class/corlib/System/String.cs

index 6cf75c08b2d3599fdbe6cfc583cc1ce1174e8c94..296714d3c1393fe174282f202ad0dc75b34bcf57 100644 (file)
@@ -1,3 +1,8 @@
+2006-02-02 Gonzalo Paniagua Javier <gonzalo@ximian.com>
+
+       * String.cs: implement 2.0 StartsWith and EndsWith new overloads. Based
+       on a patch by Thong Nguyen.
+
 2006-01-31  Zoltan Varga  <vargaz@gmail.com>
 
        * String.cs: Implement one of the new net 2.0 Split methods.
index 822a6803a6ac776b04638b4ad29414d2501ab99d..4ad0899fac36050a727afbc319004855a72b8e06 100644 (file)
@@ -924,6 +924,63 @@ namespace System
                        return StartsWith (value, false, CultureInfo.CurrentCulture);
                }
 
+#if NET_2_0
+               CompareOptions GetCompareOptions (StringComparison comp)
+               {
+                       switch (comp) {
+                       case StringComparison.InvariantCulture:
+                       case StringComparison.CurrentCulture:
+                               return CompareOptions.None;
+                       case StringComparison.CurrentCultureIgnoreCase:
+                       case StringComparison.InvariantCultureIgnoreCase:
+                               return CompareOptions.IgnoreCase;
+                       case StringComparison.Ordinal:
+                               return CompareOptions.Ordinal;
+                       case StringComparison.OrdinalIgnoreCase:
+                               return CompareOptions.OrdinalIgnoreCase;
+                       default:
+                               return 0; // If GetCultureForOption returns null, we never call this one.
+                       }
+               }
+
+               CultureInfo GetCultureForOption (StringComparison comp)
+               {
+                       switch (comp) {
+                       case StringComparison.InvariantCulture:
+                       case StringComparison.InvariantCultureIgnoreCase:
+                               return CultureInfo.InvariantCulture;
+                       case StringComparison.CurrentCulture:
+                       case StringComparison.CurrentCultureIgnoreCase:
+                       case StringComparison.Ordinal:
+                       case StringComparison.OrdinalIgnoreCase:
+                               return CultureInfo.CurrentCulture;
+                       default:
+                               return null;
+                       }
+               }
+
+               public bool StartsWith (string value, StringComparison comparisonType)
+               {
+                       CultureInfo culture = GetCultureForOption (comparisonType);
+                       if (culture == null)
+                               return false;
+
+                       CompareOptions options = GetCompareOptions (comparisonType);
+                       return culture.CompareInfo.IsPrefix (this, value, options);
+               }
+
+               public bool EndsWith (string value, StringComparison comparisonType)
+               {
+                       CultureInfo culture = GetCultureForOption (comparisonType);
+                       if (culture == null)
+                               return false;
+
+                       CompareOptions options = GetCompareOptions (comparisonType);
+                       return culture.CompareInfo.IsSuffix (this, value, options);
+               }
+
+#endif
+
 #if NET_2_0
                public
 #else