2004-03-31 Rafael Teixeira <rafaelteixeirabr@hotmail.com>
[mono.git] / mcs / class / Microsoft.VisualBasic / Microsoft.VisualBasic / Microsoft.VisualBasic.CompilerServices / BooleanType.cs
1 //
2 // BooleanType.cs
3 //
4 //      Author:
5 //      Chris J Breisch (cjbreisch@altavista.net) 
6 //      Dennis Hayes    (dennish@raytek.com)
7 //
8 //      (C) 2002 Chris J Breisch
9 //      (C) 2004 Novell
10 //
11  /*
12   * Copyright (c) 2002-2003 Mainsoft Corporation.
13   *
14   * Permission is hereby granted, free of charge, to any person obtaining a
15   * copy of this software and associated documentation files (the "Software"),
16   * to deal in the Software without restriction, including without limitation
17   * the rights to use, copy, modify, merge, publish, distribute, sublicense,
18   * and/or sell copies of the Software, and to permit persons to whom the
19   * Software is furnished to do so, subject to the following conditions:
20   * 
21   * The above copyright notice and this permission notice shall be included in
22   * all copies or substantial portions of the Software.
23   * 
24   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
25   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
26   * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
27   * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
28   * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
29   * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
30   * DEALINGS IN THE SOFTWARE.
31   */
32 using System;
33 using System.Globalization;
34
35 namespace Microsoft.VisualBasic.CompilerServices {
36         [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Never)] 
37         [Microsoft.VisualBasic.CompilerServices.StandardModuleAttribute] 
38         sealed public class BooleanType {
39                 /**
40                  * The method converts given object to boolean by the following logic:
41                  * 1. If input object is null - return null
42                  * 2. If input object is String - run FromString method
43                  * 3. Otherwise run .NET default conversion - Convert.ToBoolean
44                  * @param value - The object that going to be converted
45                  * @return boolean The boolean value that converted from the source object
46                  */
47                 public static System.Boolean FromObject (System.Object Value) {
48                         if ((object)Value == null) return false;
49                         if (Value is string)return FromString((string)Value);
50                         return System.Convert.ToBoolean(Value);
51                 }
52                 /**
53                  * The method try to convert given string to boolean in a following way:
54                  * 1. If input value is True or False string - return corresponding value
55                  * 2. If input string represents number: return true if this number is not 
56                  *    equals to zero, otherwise return false;
57                  * @exception InvalidCastException - in case if number translation failed 
58                  *  due to NumberFormatException.
59                  * @exception All other thrown exceptions from ClrDobule.Parse 
60                  * @param str - The string that converted to boolean
61                  * @return boolean The value that extracted from the input string. 
62                  */
63                 public static System.Boolean FromString (System.String Value) {
64                         if (string.Compare(Value, bool.TrueString, true) == 0)
65                                 return true;
66                         
67                         if (string.Compare(Value, bool.FalseString, true) == 0)
68                                 return false;
69                         
70                         double conv;
71                         if (double.TryParse(Value, NumberStyles.Any, NumberFormatInfo.InvariantInfo, out conv))
72                                 return (conv != 0);
73                          
74                         throw new InvalidCastException (
75                                 string.Format (
76                                 "Cast from string \"{0}\" to type 'Boolean' is not valid.",
77                                 Value));
78                 }       
79         }
80 }
81