2002-08-21 Miguel de Icaza <miguel@ximian.com>
[mono.git] / mcs / class / corlib / System / Boolean.cs
index a75fa9d6a1ee3f62e6ff17b34ba25906bb05b16c..741471bcdb10fdb73654ecbcacd7a2b075f8c0b1 100644 (file)
 // member functions to implement. 
 //
 
+using System.Globalization;
 namespace System {
 
-    /// <summary>
-    /// Represents the boolean values of logical true and false.</summary>
-    /// The .NET Framework SDK lists this as implementing IConvertible,
-    /// though it's not done here or in the ECMA spec.
-    public struct Boolean : IComparable { //, IConvertible {
-
-       /// <value>
-       /// The String representation of Boolean False</value>  
-       public static readonly string FalseString;
+       /// <summary>
+       /// Represents the boolean values of logical true and false.
+       /// </summary>
+       [Serializable]
+       public struct Boolean : IComparable, IConvertible {
+               
+               /// <value>
+               /// The String representation of Boolean False
+               /// </value>    
+               public static readonly string FalseString;
 
-       /// <value>
-       /// The String representation of Boolean True</value>   
-       public static readonly string TrueString;
+               /// <value>
+               /// The String representation of Boolean True
+               /// </value>    
+               public static readonly string TrueString;
       
-       /// <value>
-       /// Internal bool value for for this instance</value>
-       private bool value;
+               /// <value>
+               /// Internal bool value for for this instance
+               /// </value>
+               //
+               // HACK: we tag it as public, so the source will compile.               
+               public bool value;
        
-       static Boolean() {
-           FalseString = "False";
-           TrueString = "True";
-       }
-
-       /// <summary>
-       /// Compares the current Boolean instance against another 
-       /// object.</summary>
-       /// <remarks>
-       /// Throws an ArgumentException if <c>obj</c> isn't null or 
-       // a Boolean.</remarks>
-       /// <param name="obj">The object to compare against</param>
-       /// <returns>
-       /// An int reflecting the sort order of this instance as 
-       /// compared to <c>obj</c>
-       /// -1 if this instance is false and <c>obj</c> is true
-       ///  0 if this instance is equal to <c>obj</c>
-       ///  1 if this instance is true and <c>obj</c> is false, 
-       ///    or <c>obj</c> is null</returns>
-       public int CompareTo(object obj) {
-           if(obj != null && !(obj is System.Boolean))
-               throw new ArgumentException
-                   ("Object is not a Boolean and is not a null reference");
+               static Boolean () 
+               {
+                       FalseString = "False";
+                       TrueString = "True";
+               }
 
-           // for case #3
-           if(obj == null || (value == true && (bool)obj == false))
-               return 1;
+               /// <summary>
+               /// Compares the current Boolean instance against another object.
+               /// </summary>
+               /// <remarks>
+               /// Throws an ArgumentException if <c>obj</c> isn't null or 
+               /// a Boolean.
+               /// </remarks>
+               /// <param name="obj">
+               /// The object to compare against
+               /// </param>
+               /// <returns>
+               /// An int reflecting the sort order of this instance as 
+               /// compared to <c>obj</c>
+               /// -1 if this instance is false and <c>obj</c> is true
+               ///  0 if this instance is equal to <c>obj</c>
+               ///  1 if this instance is true and <c>obj</c> is false, 
+               ///    or <c>obj</c> is null
+               /// </returns>
+               public int CompareTo (object obj) 
+               {
+                       if (obj == null)
+                               return 1;
+                       
+                       if (!(obj is System.Boolean))
+                               throw new ArgumentException
+                               (Locale.GetText ("Object is not a Boolean and is not a null reference"));
+                       
+                       // for case #3
+                       if (obj == null || (value == true && (bool)obj == false))
+                               return 1;
            
-           // for case #2, else it's #1
-           return (value == (bool)obj) ? 0 : -1;
-       }
+                       // for case #2, else it's #1
+                       return (value == (bool)obj) ? 0 : -1;
+               }
        
-       /// <summary>
-       /// Determines whether this instance and another object represent the
-       /// same type and value.</summary>
-       /// <param name="obj">The object to check against</param>
-       /// <returns>
-       /// true if this instnace and <c>obj</c> are same value, 
-       /// otherwise false if it is not or null</returns>
-       public override bool Equals(Object obj) {
-           if(obj == null || !(obj is System.Boolean))
-               return false;
+               /// <summary>
+               /// Determines whether this instance and another object represent the
+               /// same type and value.
+               /// </summary>
+               /// <param name="obj">
+               /// The object to check against
+               /// </param>
+               /// <returns>
+               /// true if this instnace and <c>obj</c> are same value, 
+               /// otherwise false if it is not or null
+               /// </returns>
+               public override bool Equals (Object obj) 
+               {
+                       if (obj == null || !(obj is System.Boolean))
+                               return false;
 
-           return ((bool)obj) == value;
-       }
+                       return ((bool)obj) == value;
+               }
        
-       /// <summary>
-       /// Generates a hashcode for this object.</summary>
-       /// <returns>
-       /// An Int32 value holding the hash code</returns>
-       public override int GetHashCode() {
-           // TODO: Implement Boolean Hashcode
-           return 0;
-       }
+               /// <summary>
+               /// Generates a hashcode for this object.
+               /// </summary>
+               /// <returns>
+               /// An Int32 value holding the hash code
+               /// </returns>
+               public override int GetHashCode () 
+               {
+                       // Guess there's not too many ways to hash a Boolean
+                       return value ? 1 : 0;
+               }
 
-       /// <summary>
-       /// Returns a given string as a boolean value. The string must be 
-       /// equivalent to either TrueString or FalseString, with leading and/or
-       /// trailing spaces, and is parsed case-insensitively.</summary>
-       /// <remarks>
-       /// Throws an ArgumentNullException if <c>val</c> is null, or a 
-       /// FormatException if <c>val</c> doesn't match <c>TrueString</c> 
-       /// or <c>FalseString</c></remarks>
-       /// <param name="val">The string value to parse</param>
-       /// <returns>
-       /// true if <c>val</c> is equivalent to TrueString, 
-       /// otherwise false</returns>
-       public static bool Parse(string val) {
-           if(val == null)
-               throw new ArgumentNullException("Value is a null reference");
+               /// <summary>
+               /// Returns a given string as a boolean value. The string must be 
+               /// equivalent to either TrueString or FalseString, with leading and/or
+               /// trailing spaces, and is parsed case-insensitively.
+               /// </summary>
+               /// <remarks>
+               /// Throws an ArgumentNullException if <c>val</c> is null, or a 
+               /// FormatException if <c>val</c> doesn't match <c>TrueString</c> 
+               /// or <c>FalseString</c>
+               /// </remarks>
+               /// <param name="val">
+               /// The string value to parse
+               /// </param>
+               /// <returns>
+               /// true if <c>val</c> is equivalent to TrueString, 
+               /// otherwise false
+               /// </returns>
+               public static bool Parse (string val) 
+               {
+                       if (val == null)
+                               throw new ArgumentNullException (
+                                       Locale.GetText ("Value is a null reference"));
            
-           val = val.Trim();
+                       val = val.Trim ();
            
-           if(String.Compare(val, TrueString, true) == 0)
-               return true;
+                       if (String.Compare (val, TrueString, true) == 0)
+                               return true;
            
-           if(String.Compare(val, FalseString, true) == 0)
-               return false;
+                       if (String.Compare (val, FalseString, true) == 0)
+                               return false;
            
-           throw new FormatException
-               ("Value is not equivalent to either TrueString or FalseString");
-       }
+                       throw new FormatException (Locale.GetText (
+                               "Value is not equivalent to either TrueString or FalseString"));
+               }
 
-       /// <summary>
-       /// Returns a string representation of this Boolean object.</summary>
-       /// <returns>
-       /// <c>FalseString</c> if the instance value is false, otherwise 
-       /// <c>TrueString</c></returns>
-       public override string ToString() {
-           return value ? TrueString : FalseString;
-       }
-    }
-}
+               /// <summary>
+               /// Returns a string representation of this Boolean object.
+               /// </summary>
+               /// <returns>
+               /// <c>FalseString</c> if the instance value is false, otherwise 
+               /// <c>TrueString</c>
+               /// </returns>
+               public override string ToString () 
+               {
+                       return value ? TrueString : FalseString;
+               }
+               
+               // =========== IConvertible Methods =========== //
+
+               public TypeCode GetTypeCode () 
+               { 
+                       return TypeCode.Boolean;
+               }
+
+               object IConvertible.ToType (Type conversionType, IFormatProvider provider)
+               {
+                       return System.Convert.ToType(value, conversionType, provider);
+               }
+               
+               bool IConvertible.ToBoolean (IFormatProvider provider)
+               {
+                       return value;
+               }
+               
+               byte IConvertible.ToByte (IFormatProvider provider)
+               {
+                       return System.Convert.ToByte(value);
+               }
+               
+               char IConvertible.ToChar (IFormatProvider provider)
+               {
+                       throw new InvalidCastException();
+               }
+               
+               [CLSCompliant(false)]
+               DateTime IConvertible.ToDateTime (IFormatProvider provider)
+               {
+                       throw new InvalidCastException();
+               }
+               
+               decimal IConvertible.ToDecimal (IFormatProvider provider)
+               {
+                       return System.Convert.ToDecimal(value);
+               }
+               
+               double IConvertible.ToDouble (IFormatProvider provider)
+               {
+                       return System.Convert.ToDouble(value);
+               }
+               
+               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)
+               {
+                       return System.Convert.ToSingle(value);
+               }
+               
+               public string ToString (IFormatProvider provider)
+               {
+                       return ToString();
+               }
+               
+               [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);
+               }
+               
+       } // System.Boolean
+
+} // Namespace System