// doesn't list this class as implementing IFormattable.
using System.Globalization;
+using System.Runtime.CompilerServices;
namespace System {
- public struct Char : IComparable { //, IFormattable, IConvertible {
+ [Serializable]
+ public struct Char : IComparable, IConvertible { //, IFormattable {
public const char MaxValue = (char) 0xffff;
public const char MinValue = (char) 0;
// VES needs to know about value. public is workaround
// so source will compile
- public byte value;
+ public char value;
public int CompareTo (object v)
{
- if (!(v is System.Byte))
- throw new ArgumentException ("Value is not a System.Byte");
+ if (v == null)
+ return 1;
+
+ if (!(v is System.Char))
+ throw new ArgumentException (Locale.GetText ("Value is not a System.Char"));
+
+ char xv = (char) v;
+ if (value == xv)
+ return 0;
- return value - ((byte) v);
+ if (value > xv)
+ return 1;
+ else
+ return -1;
}
public override bool Equals (object o)
{
- if (!(o is System.Byte))
+ if (!(o is System.Char))
return false;
- return ((byte) o) == value;
+ return ((Char) o) == value;
}
public override int GetHashCode ()
return value;
}
- public static double GetNumericValue (char c)
- {
- if ((c >= 48) && (c <= 57))
- return (double) (c - '0');
- return -1;
- }
+ [MethodImplAttribute(System.Runtime.CompilerServices.MethodImplOptions.InternalCall)]
+ public static extern double GetNumericValue (char c);
public static double GetNumericValue (string str, int index)
{
if (str == null)
- throw new ArgumentNullException ("Str is a null reference");
+ throw new ArgumentNullException (Locale.GetText ("str is a null reference"));
if (index < 0 || index >= str.Length)
- throw new ArgumentOutOfRangeException
- ("The value of index is less than zero, or greater than or equal to the length of str");
+ throw new ArgumentOutOfRangeException (Locale.GetText (
+ "The value of index is less than zero, or greater than or equal to the length of str"));
+
return GetNumericValue (str[index]);
}
- public static UnicodeCategory GetUnicodeCategory (char c)
- {
- // TODO: Implement me
- return UnicodeCategory.OtherSymbol;
- }
+ [MethodImplAttribute(System.Runtime.CompilerServices.MethodImplOptions.InternalCall)]
+ public static extern UnicodeCategory GetUnicodeCategory (char c);
public static UnicodeCategory GetUnicodeCategory (string str, int index) {
if (str == null)
- throw new ArgumentNullException ("Str is a null reference");
+ throw new ArgumentNullException (Locale.GetText ("str is a null reference"));
if (index < 0 || index >= str.Length)
- throw new ArgumentOutOfRangeException
- ("The value of index is less than zero, or greater than or equal to the length of str");
+ throw new ArgumentOutOfRangeException (Locale.GetText ("The value of index is less "+
+ "than zero, or greater than or equal to the length of str"));
return GetUnicodeCategory (str[index]);
}
- public static bool IsControl (char c)
- {
- // TODO: Make me Unicode aware
- return ((c > 1) && (c < 32));
- }
+ [MethodImplAttribute(System.Runtime.CompilerServices.MethodImplOptions.InternalCall)]
+ public static extern bool IsControl (char c);
public static bool IsControl (string str, int index)
{
if (str == null)
- throw new ArgumentNullException ("Str is a null reference");
+ throw new ArgumentNullException (Locale.GetText ("Str is a null reference"));
if (index < 0 || index >= str.Length)
- throw new ArgumentOutOfRangeException
- ("The value of index is less than zero, or greater than or equal to the length of str");
+ throw new ArgumentOutOfRangeException (Locale.GetText (
+ "The value of index is less than zero, or greater than or equal to the length of str"));
return IsControl (str[index]);
}
- public static bool IsDigit (char c)
- {
- return ((c >= '0') && (c <= '9'));
- }
+ [MethodImplAttribute(System.Runtime.CompilerServices.MethodImplOptions.InternalCall)]
+ public static extern bool IsDigit (char c);
public static bool IsDigit (string str, int index)
{
if (str == null)
- throw new ArgumentNullException ("Str is a null reference");
+ throw new ArgumentNullException (Locale.GetText ("Str is a null reference"));
if (index < 0 || index >= str.Length)
- throw new ArgumentOutOfRangeException
- ("The value of index is less than zero, or greater than or equal to the length of str");
+ throw new ArgumentOutOfRangeException (Locale.GetText (
+ "The value of index is less than zero, or greater than or equal to the length of str"));
return IsDigit (str[index]);
}
- public static bool IsLetter (char c)
- {
- // TODO: Make me Unicode aware
- return ((c >= 65) && (c <= 126));
- }
+ [MethodImplAttribute(System.Runtime.CompilerServices.MethodImplOptions.InternalCall)]
+ public static extern bool IsLetter (char c);
public static bool IsLetter (string str, int index)
{
if (str == null)
- throw new ArgumentNullException ("Str is a null reference");
+ throw new ArgumentNullException (Locale.GetText ("str is a null reference"));
if (index < 0 || index >= str.Length)
- throw new ArgumentOutOfRangeException
- ("The value of index is less than zero, or greater than or equal to the length of str");
+ throw new ArgumentOutOfRangeException (Locale.GetText (
+ "The value of index is less than zero, or greater than or equal to the length of str"));
return IsLetter (str[index]);
}
public static bool IsLetterOrDigit (char c)
{
- // TODO: Implement me
- return false;
+ if (IsLetter (c) == false && IsDigit (c) == false)
+ return false;
+ else
+ return true;
}
public static bool IsLetterOrDigit (string str, int index)
{
if (str == null)
- throw new ArgumentNullException ("Str is a null reference");
+ throw new ArgumentNullException (Locale.GetText ("str is a null reference"));
if (index < 0 || index >= str.Length)
- throw new ArgumentOutOfRangeException
- ("The value of index is less than zero, or greater than or equal to the length of str");
+ throw new ArgumentOutOfRangeException (Locale.GetText (
+ "The value of index is less than zero, or greater than or equal to the length of str"));
return IsLetterOrDigit (str[index]);
}
-
- public static bool IsLower (char c)
- {
- // TODO: Implement me
- return false;
- }
+
+ [MethodImplAttribute(System.Runtime.CompilerServices.MethodImplOptions.InternalCall)]
+ public static extern bool IsLower (char c);
public static bool IsLower (string str, int index)
{
if (str == null)
- throw new ArgumentNullException ("Str is a null reference");
+ throw new ArgumentNullException (Locale.GetText ("str is a null reference"));
if (index < 0 || index >= str.Length)
- throw new ArgumentOutOfRangeException
- ("The value of index is less than zero, or greater than or equal to the length of str");
+ throw new ArgumentOutOfRangeException (Locale.GetText (
+ "The value of index is less than zero, or greater than or equal to the length of str"));
return IsLower (str[index]);
}
- public static bool IsNumber (char c)
- {
- // TODO: Implement me
- return false;
- }
+ [MethodImplAttribute(System.Runtime.CompilerServices.MethodImplOptions.InternalCall)]
+ public static extern bool IsNumber (char c);
public static bool IsNumber (string str, int index)
{
if (str == null)
- throw new ArgumentNullException ("Str is a null reference");
+ throw new ArgumentNullException (Locale.GetText ("str is a null reference"));
if (index < 0 || index >= str.Length)
- throw new ArgumentOutOfRangeException
- ("The value of index is less than zero, or greater than or equal to the length of str");
+ throw new ArgumentOutOfRangeException (Locale.GetText (
+ "The value of index is less than zero, or greater than or equal to the length of str"));
return IsNumber (str[index]);
}
- public static bool IsPunctuation (char c)
- {
- // TODO: Implement me
- return false;
- }
+ [MethodImplAttribute(System.Runtime.CompilerServices.MethodImplOptions.InternalCall)]
+ public static extern bool IsPunctuation (char c);
public static bool IsPunctuation (string str, int index)
{
if (str == null)
- throw new ArgumentNullException ("Str is a null reference");
+ throw new ArgumentNullException (Locale.GetText ("str is a null reference"));
if (index < 0 || index >= str.Length)
- throw new ArgumentOutOfRangeException
- ("The value of index is less than zero, or greater than or equal to the length of str");
+ throw new ArgumentOutOfRangeException (Locale.GetText (
+ "The value of index is less than zero, or greater than or equal to the length of str"));
return IsPunctuation (str[index]);
}
- public static bool IsSeparator (char c)
- {
- // TODO: Implement me
- return false;
- }
+ [MethodImplAttribute(System.Runtime.CompilerServices.MethodImplOptions.InternalCall)]
+ public static extern bool IsSeparator (char c);
public static bool IsSeparator (string str, int index)
{
if (str == null)
- throw new ArgumentNullException ("Str is a null reference");
+ throw new ArgumentNullException (Locale.GetText ("str is a null reference"));
if (index < 0 || index >= str.Length)
- throw new ArgumentOutOfRangeException
- ("The value of index is less than zero, or greater than or equal to the length of str");
+ throw new ArgumentOutOfRangeException (Locale.GetText (
+ "The value of index is less than zero, or greater than or equal to the length of str"));
return IsSeparator (str[index]);
}
- public static bool IsSurrogate (char c)
- {
- // TODO: Implement me
- return false;
- }
+ [MethodImplAttribute(System.Runtime.CompilerServices.MethodImplOptions.InternalCall)]
+ public static extern bool IsSurrogate (char c);
public static bool IsSurrogate (string str, int index)
{
if (str == null)
- throw new ArgumentNullException ("Str is a null reference");
+ throw new ArgumentNullException (Locale.GetText ("str is a null reference"));
if (index < 0 || index >= str.Length)
- throw new ArgumentOutOfRangeException
- ("The value of index is less than zero, or greater than or equal to the length of str");
+ throw new ArgumentOutOfRangeException (Locale.GetText (
+ "The value of index is less than zero, or greater than or equal to the length of str"));
return IsSurrogate (str[index]);
}
- public static bool IsSymbol (char c)
- {
- // TODO: Implement me
- return false;
- }
+ [MethodImplAttribute(System.Runtime.CompilerServices.MethodImplOptions.InternalCall)]
+ public static extern bool IsSymbol (char c);
public static bool IsSymbol (string str, int index)
{
if (str == null)
- throw new ArgumentNullException ("Str is a null reference");
+ throw new ArgumentNullException (Locale.GetText ("str is a null reference"));
if (index < 0 || index >= str.Length)
- throw new ArgumentOutOfRangeException
- ("The value of index is less than zero, or greater than or equal to the length of str");
+ throw new ArgumentOutOfRangeException (Locale.GetText (
+ "The value of index is less than zero, or greater than or equal to the length of str"));
return IsSymbol (str[index]);
}
- public static bool IsUpper (char c)
- {
- // TODO: Implement me
- return false;
- }
+ [MethodImplAttribute(System.Runtime.CompilerServices.MethodImplOptions.InternalCall)]
+ public static extern bool IsUpper (char c);
public static bool IsUpper (string str, int index)
{
if (str == null)
- throw new ArgumentNullException ("Str is a null reference");
+ throw new ArgumentNullException (Locale.GetText ("str is a null reference"));
if (index < 0 || index >= str.Length)
- throw new ArgumentOutOfRangeException
- ("The value of index is less than zero, or greater than or equal to the length of str");
+ throw new ArgumentOutOfRangeException (Locale.GetText (
+ "The value of index is less than zero, or greater than or equal to the length of str"));
return IsUpper (str[index]);
}
- public static bool IsWhiteSpace (char c)
- {
- // TODO: Implement me
- return false;
- }
+ [MethodImplAttribute(System.Runtime.CompilerServices.MethodImplOptions.InternalCall)]
+ public static extern bool IsWhiteSpace (char c);
public static bool IsWhiteSpace (string str, int index)
{
if (str == null)
- throw new ArgumentNullException ("Str is a null reference");
+ throw new ArgumentNullException (Locale.GetText ("str is a null reference"));
if (index < 0 || index >= str.Length)
- throw new ArgumentOutOfRangeException
- ("The value of index is less than zero, or greater than or equal to the length of str");
+ throw new ArgumentOutOfRangeException (Locale.GetText (
+ "The value of index is less than zero, or greater than or equal to the length of str"));
return IsWhiteSpace (str[index]);
}
public static char Parse (string str)
{
- // TODO: Implement me
- return (char) 0;
- }
+ if (str == null)
+ throw new ArgumentNullException (Locale.GetText ("str is a null reference"));
- public static char ToLower (char c)
- {
- // TODO: make me unicode aware
- return (c >= 'A' && c <= 'Z') ? (char) (c + 33) : c;
+ if (str.Length != 1)
+ throw new FormatException ("string contains more than one character.");
+
+ return str [0];
}
- public static char ToUpper (char c)
- {
- // TODO: make me unicode aware
- return (char) ((c >= 'a' && c <= 'z') ? c - 33 : c);
- }
+ [MethodImplAttribute(System.Runtime.CompilerServices.MethodImplOptions.InternalCall)]
+ public static extern char ToLower (char c);
+
+ [MethodImplAttribute(System.Runtime.CompilerServices.MethodImplOptions.InternalCall)]
+ public static extern char ToUpper (char c);
public override string ToString ()
{
// LAMESPEC: ECMA draft lists this as returning ToString (null),
// However it doesn't list another ToString() method.
- return ToString (null);
+ return new String (value, 1);
}
public string ToString (IFormatProvider fp)
{
// LAMESPEC: ECMA draft doesn't say Char implements IFormattable
- return "";
+ return new String (value, 1);
}
// =========== IConvertible Methods =========== //
public TypeCode GetTypeCode ()
{
- return TypeCode.Byte;
+ return TypeCode.Char;
}
+
+ object IConvertible.ToType (Type conversionType, IFormatProvider provider)
+ {
+ return System.Convert.ToType(value, conversionType, provider);
+ }
+
+ bool IConvertible.ToBoolean (IFormatProvider provider)
+ {
+ throw new InvalidCastException();
+ }
+
+ byte IConvertible.ToByte (IFormatProvider provider)
+ {
+ return System.Convert.ToByte(value);
+ }
+
+ char IConvertible.ToChar (IFormatProvider provider)
+ {
+ return value;
+ }
+
+ [CLSCompliant(false)]
+ DateTime IConvertible.ToDateTime (IFormatProvider provider)
+ {
+ throw new InvalidCastException();
+ }
+
+ decimal IConvertible.ToDecimal (IFormatProvider provider)
+ {
+ throw new InvalidCastException();
+ }
+
+ double IConvertible.ToDouble (IFormatProvider provider)
+ {
+ throw new InvalidCastException();
+ }
+
+ short IConvertible.ToInt16 (IFormatProvider provider)
+ {
+ return System.Convert.ToInt16(value);
+ }
+
+ int IConvertible.ToInt32 (IFormatProvider provider)
+ {
+ return System.Convert.ToInt32(value);
+ }
+
+ long IConvertible.ToInt64 (IFormatProvider provider)
+ {
+ return System.Convert.ToInt64(value);
+ }
+
+ [CLSCompliant(false)]
+ sbyte IConvertible.ToSByte (IFormatProvider provider)
+ {
+ return System.Convert.ToSByte(value);
+ }
+
+ float IConvertible.ToSingle (IFormatProvider provider)
+ {
+ throw new InvalidCastException();
+ }
+
+ string IConvertible.ToString (IFormatProvider provider)
+ {
+ return ToString(provider);
+ }
+
+ [CLSCompliant(false)]
+ ushort IConvertible.ToUInt16 (IFormatProvider provider)
+ {
+ return System.Convert.ToUInt16(value);
+ }
+
+ [CLSCompliant(false)]
+ uint IConvertible.ToUInt32 (IFormatProvider provider)
+ {
+ return System.Convert.ToUInt32(value);
+ }
+
+ [CLSCompliant(false)]
+ ulong IConvertible.ToUInt64 (IFormatProvider provider)
+ {
+ return System.Convert.ToUInt64(value);
+ }
}
}