return str [0];
}
+ [MonoTODO ("Fix FIXME")]
public static char ToLower (char c)
+ {
+ // FIXME: needs to call line below, but that would probably break a lot of things right now
+ // return InternalToLower (c, CultureInfo.CurrentCulture);
+ return ToLowerInvariant (c);
+ }
+
+ internal static char ToLowerInvariant (char c)
{
unsafe {
if (c <= ((char)0x24cf))
return c;
}
+ public static char ToLower (char c, CultureInfo culture)
+ {
+ if (culture == null)
+ throw new ArgumentNullException ("culture");
+ if (culture.LCID == 0x007F) // Invariant
+ return ToLowerInvariant (c);
+
+ return InternalToLower (c, culture);
+ }
+
[MethodImplAttribute (MethodImplOptions.InternalCall)]
- public static extern char ToLower (char c, CultureInfo culture);
+ private static extern char InternalToLower (char c, CultureInfo culture);
+ [MonoTODO ("Fix FIXME")]
public static char ToUpper (char c)
+ {
+ // FIXME: needs to call line below, but that would probably break a lot of things right now
+ // return InternalToUpper (c, CultureInfo.CurrentCulture);
+ return ToUpperInvariant (c);
+ }
+
+ internal static char ToUpperInvariant (char c)
{
unsafe {
if (c <= ((char)0x24cf))
return c;
}
+ public static char ToUpper (char c, CultureInfo culture)
+ {
+ if (culture == null)
+ throw new ArgumentNullException ("culture");
+ if (culture.LCID == 0x007F) // Invariant
+ return ToUpperInvariant (c);
+
+ return InternalToUpper (c, culture);
+ }
+
[MethodImplAttribute (MethodImplOptions.InternalCall)]
- public static extern char ToUpper (char c, CultureInfo culture);
+ private static extern char InternalToUpper (char c, CultureInfo culture);
public override string ToString ()
{
public String ToLower ()
{
+ // CurrentCulture can never be invariant or null
return InternalToLower (CultureInfo.CurrentCulture);
}
- public String ToLower (CultureInfo culture)
+ public unsafe String ToLower (CultureInfo culture)
{
if (culture == null)
throw new ArgumentNullException ("culture");
+ if (culture.LCID == 0x007F) { // Invariant
+ string tmp = InternalAllocateStr (length);
+ fixed (char* source = &start_char, dest = tmp) {
+
+ char* destPtr = (char*)dest;
+ char* sourcePtr = (char*)source;
+
+ for (int n = 0; n < length; n++) {
+ *destPtr = Char.ToLower (*sourcePtr);
+ sourcePtr++;
+ destPtr++;
+ }
+ }
+ return tmp;
+ }
return InternalToLower (culture);
}
public String ToUpper ()
{
+ // CurrentCulture can never be invariant or null
return InternalToUpper (CultureInfo.CurrentCulture);
}
- public String ToUpper (CultureInfo culture)
+ public unsafe String ToUpper (CultureInfo culture)
{
if (culture == null)
throw new ArgumentNullException ("culture");
+ if (culture.LCID == 0x007F) { // Invariant
+ string tmp = InternalAllocateStr (length);
+ fixed (char* source = &start_char, dest = tmp) {
+
+ char* destPtr = (char*)dest;
+ char* sourcePtr = (char*)source;
+
+ for (int n = 0; n < length; n++) {
+ *destPtr = Char.ToUpper (*sourcePtr);
+ sourcePtr++;
+ destPtr++;
+ }
+ }
+ return tmp;
+ }
return InternalToUpper (culture);
}