diff options
Diffstat (limited to 'src/mscorlib/src/System/Single.cs')
-rw-r--r-- | src/mscorlib/src/System/Single.cs | 220 |
1 files changed, 131 insertions, 89 deletions
diff --git a/src/mscorlib/src/System/Single.cs b/src/mscorlib/src/System/Single.cs index 657d7aef32..1c39df7d94 100644 --- a/src/mscorlib/src/System/Single.cs +++ b/src/mscorlib/src/System/Single.cs @@ -10,19 +10,20 @@ ** ** ===========================================================*/ -namespace System { - using System.Globalization; - using System; - using System.Runtime.InteropServices; - using System.Runtime.CompilerServices; - using System.Runtime.ConstrainedExecution; - using System.Diagnostics.Contracts; - -[Serializable] -[System.Runtime.InteropServices.StructLayout(LayoutKind.Sequential)] +using System.Globalization; +using System; +using System.Runtime.InteropServices; +using System.Runtime.CompilerServices; +using System.Runtime.ConstrainedExecution; +using System.Diagnostics.Contracts; + +namespace System +{ + [Serializable] + [System.Runtime.InteropServices.StructLayout(LayoutKind.Sequential)] public struct Single : IComparable, IFormattable, IConvertible - , IComparable<Single>, IEquatable<Single> + , IComparable<Single>, IEquatable<Single> { internal float m_value; @@ -37,33 +38,38 @@ namespace System { public const float NaN = (float)0.0 / (float)0.0; internal static float NegativeZero = BitConverter.Int32BitsToSingle(unchecked((int)0x80000000)); - + [Pure] [System.Runtime.Versioning.NonVersionable] - public unsafe static bool IsInfinity(float f) { + public unsafe static bool IsInfinity(float f) + { return (*(int*)(&f) & 0x7FFFFFFF) == 0x7F800000; } [Pure] [System.Runtime.Versioning.NonVersionable] - public unsafe static bool IsPositiveInfinity(float f) { + public unsafe static bool IsPositiveInfinity(float f) + { return *(int*)(&f) == 0x7F800000; } [Pure] [System.Runtime.Versioning.NonVersionable] - public unsafe static bool IsNegativeInfinity(float f) { + public unsafe static bool IsNegativeInfinity(float f) + { return *(int*)(&f) == unchecked((int)0xFF800000); } [Pure] [System.Runtime.Versioning.NonVersionable] - public unsafe static bool IsNaN(float f) { + public unsafe static bool IsNaN(float f) + { return (*(int*)(&f) & 0x7FFFFFFF) > 0x7F800000; } - + [Pure] - internal unsafe static bool IsNegative(float f) { + internal unsafe static bool IsNegative(float f) + { return (*(uint*)(&f) & 0x80000000) == 0x80000000; } @@ -73,11 +79,14 @@ namespace System { // null is considered to be less than any instance. // If object is not of type Single, this method throws an ArgumentException. // - public int CompareTo(Object value) { - if (value == null) { + public int CompareTo(Object value) + { + if (value == null) + { return 1; } - if (value is Single) { + if (value is Single) + { float f = (float)value; if (m_value < f) return -1; if (m_value > f) return 1; @@ -89,11 +98,12 @@ namespace System { else // f is NaN. return 1; } - throw new ArgumentException (Environment.GetResourceString("Arg_MustBeSingle")); + throw new ArgumentException(SR.Arg_MustBeSingle); } - public int CompareTo(Single value) { + public int CompareTo(Single value) + { if (m_value < value) return -1; if (m_value > value) return 1; if (m_value == value) return 0; @@ -106,41 +116,50 @@ namespace System { } [System.Runtime.Versioning.NonVersionable] - public static bool operator ==(Single left, Single right) { + public static bool operator ==(Single left, Single right) + { return left == right; } [System.Runtime.Versioning.NonVersionable] - public static bool operator !=(Single left, Single right) { + public static bool operator !=(Single left, Single right) + { return left != right; } [System.Runtime.Versioning.NonVersionable] - public static bool operator <(Single left, Single right) { + public static bool operator <(Single left, Single right) + { return left < right; } [System.Runtime.Versioning.NonVersionable] - public static bool operator >(Single left, Single right) { + public static bool operator >(Single left, Single right) + { return left > right; } [System.Runtime.Versioning.NonVersionable] - public static bool operator <=(Single left, Single right) { + public static bool operator <=(Single left, Single right) + { return left <= right; } [System.Runtime.Versioning.NonVersionable] - public static bool operator >=(Single left, Single right) { + public static bool operator >=(Single left, Single right) + { return left >= right; } - public override bool Equals(Object obj) { - if (!(obj is Single)) { + public override bool Equals(Object obj) + { + if (!(obj is Single)) + { return false; } float temp = ((Single)obj).m_value; - if (temp == m_value) { + if (temp == m_value) + { return true; } @@ -149,16 +168,19 @@ namespace System { public bool Equals(Single obj) { - if (obj == m_value) { + if (obj == m_value) + { return true; } return IsNaN(obj) && IsNaN(m_value); } - public unsafe override int GetHashCode() { + public unsafe override int GetHashCode() + { float f = m_value; - if (f == 0) { + if (f == 0) + { // Ensure that 0 and -0 have the same hash code return 0; } @@ -166,22 +188,26 @@ namespace System { return v; } - public override String ToString() { + public override String ToString() + { Contract.Ensures(Contract.Result<String>() != null); return Number.FormatSingle(m_value, null, NumberFormatInfo.CurrentInfo); } - public String ToString(IFormatProvider provider) { + public String ToString(IFormatProvider provider) + { Contract.Ensures(Contract.Result<String>() != null); return Number.FormatSingle(m_value, null, NumberFormatInfo.GetInstance(provider)); } - public String ToString(String format) { + public String ToString(String format) + { Contract.Ensures(Contract.Result<String>() != null); return Number.FormatSingle(m_value, format, NumberFormatInfo.CurrentInfo); } - public String ToString(String format, IFormatProvider provider) { + public String ToString(String format, IFormatProvider provider) + { Contract.Ensures(Contract.Result<String>() != null); return Number.FormatSingle(m_value, format, NumberFormatInfo.GetInstance(provider)); } @@ -194,139 +220,155 @@ namespace System { // PositiveInfinity or NegativeInfinity for a number that is too // large or too small. // - public static float Parse(String s) { + public static float Parse(String s) + { return Parse(s, NumberStyles.Float | NumberStyles.AllowThousands, NumberFormatInfo.CurrentInfo); } - public static float Parse(String s, NumberStyles style) { + public static float Parse(String s, NumberStyles style) + { NumberFormatInfo.ValidateParseStyleFloatingPoint(style); return Parse(s, style, NumberFormatInfo.CurrentInfo); } - public static float Parse(String s, IFormatProvider provider) { + public static float Parse(String s, IFormatProvider provider) + { return Parse(s, NumberStyles.Float | NumberStyles.AllowThousands, NumberFormatInfo.GetInstance(provider)); } - public static float Parse(String s, NumberStyles style, IFormatProvider provider) { + public static float Parse(String s, NumberStyles style, IFormatProvider provider) + { NumberFormatInfo.ValidateParseStyleFloatingPoint(style); return Parse(s, style, NumberFormatInfo.GetInstance(provider)); } - - private static float Parse(String s, NumberStyles style, NumberFormatInfo info) { + + private static float Parse(String s, NumberStyles style, NumberFormatInfo info) + { return Number.ParseSingle(s, style, info); } - public static Boolean TryParse(String s, out Single result) { + public static Boolean TryParse(String s, out Single result) + { return TryParse(s, NumberStyles.Float | NumberStyles.AllowThousands, NumberFormatInfo.CurrentInfo, out result); } - public static Boolean TryParse(String s, NumberStyles style, IFormatProvider provider, out Single result) { + public static Boolean TryParse(String s, NumberStyles style, IFormatProvider provider, out Single result) + { NumberFormatInfo.ValidateParseStyleFloatingPoint(style); return TryParse(s, style, NumberFormatInfo.GetInstance(provider), out result); } - - private static Boolean TryParse(String s, NumberStyles style, NumberFormatInfo info, out Single result) { - if (s == null) { + + private static Boolean TryParse(String s, NumberStyles style, NumberFormatInfo info, out Single result) + { + if (s == null) + { result = 0; return false; } bool success = Number.TryParseSingle(s, style, info, out result); - if (!success) { + if (!success) + { String sTrim = s.Trim(); - if (sTrim.Equals(info.PositiveInfinitySymbol)) { + if (sTrim.Equals(info.PositiveInfinitySymbol)) + { result = PositiveInfinity; - } else if (sTrim.Equals(info.NegativeInfinitySymbol)) { + } + else if (sTrim.Equals(info.NegativeInfinitySymbol)) + { result = NegativeInfinity; - } else if (sTrim.Equals(info.NaNSymbol)) { + } + else if (sTrim.Equals(info.NaNSymbol)) + { result = NaN; - } else + } + else return false; // We really failed } return true; - } // // IConvertible implementation // - public TypeCode GetTypeCode() { + public TypeCode GetTypeCode() + { return TypeCode.Single; } - /// <internalonly/> - bool IConvertible.ToBoolean(IFormatProvider provider) { + bool IConvertible.ToBoolean(IFormatProvider provider) + { return Convert.ToBoolean(m_value); } - /// <internalonly/> - char IConvertible.ToChar(IFormatProvider provider) { - throw new InvalidCastException(Environment.GetResourceString("InvalidCast_FromTo", "Single", "Char")); + char IConvertible.ToChar(IFormatProvider provider) + { + throw new InvalidCastException(SR.Format(SR.InvalidCast_FromTo, "Single", "Char")); } - /// <internalonly/> - sbyte IConvertible.ToSByte(IFormatProvider provider) { + sbyte IConvertible.ToSByte(IFormatProvider provider) + { return Convert.ToSByte(m_value); } - /// <internalonly/> - byte IConvertible.ToByte(IFormatProvider provider) { + byte IConvertible.ToByte(IFormatProvider provider) + { return Convert.ToByte(m_value); } - /// <internalonly/> - short IConvertible.ToInt16(IFormatProvider provider) { + short IConvertible.ToInt16(IFormatProvider provider) + { return Convert.ToInt16(m_value); } - /// <internalonly/> - ushort IConvertible.ToUInt16(IFormatProvider provider) { + ushort IConvertible.ToUInt16(IFormatProvider provider) + { return Convert.ToUInt16(m_value); } - /// <internalonly/> - int IConvertible.ToInt32(IFormatProvider provider) { + int IConvertible.ToInt32(IFormatProvider provider) + { return Convert.ToInt32(m_value); } - /// <internalonly/> - uint IConvertible.ToUInt32(IFormatProvider provider) { + uint IConvertible.ToUInt32(IFormatProvider provider) + { return Convert.ToUInt32(m_value); } - /// <internalonly/> - long IConvertible.ToInt64(IFormatProvider provider) { + long IConvertible.ToInt64(IFormatProvider provider) + { return Convert.ToInt64(m_value); } - /// <internalonly/> - ulong IConvertible.ToUInt64(IFormatProvider provider) { + ulong IConvertible.ToUInt64(IFormatProvider provider) + { return Convert.ToUInt64(m_value); } - /// <internalonly/> - float IConvertible.ToSingle(IFormatProvider provider) { + float IConvertible.ToSingle(IFormatProvider provider) + { return m_value; } - /// <internalonly/> - double IConvertible.ToDouble(IFormatProvider provider) { + double IConvertible.ToDouble(IFormatProvider provider) + { return Convert.ToDouble(m_value); } - /// <internalonly/> - Decimal IConvertible.ToDecimal(IFormatProvider provider) { + Decimal IConvertible.ToDecimal(IFormatProvider provider) + { return Convert.ToDecimal(m_value); } - /// <internalonly/> - DateTime IConvertible.ToDateTime(IFormatProvider provider) { - throw new InvalidCastException(Environment.GetResourceString("InvalidCast_FromTo", "Single", "DateTime")); + DateTime IConvertible.ToDateTime(IFormatProvider provider) + { + throw new InvalidCastException(SR.Format(SR.InvalidCast_FromTo, "Single", "DateTime")); } - /// <internalonly/> - Object IConvertible.ToType(Type type, IFormatProvider provider) { + Object IConvertible.ToType(Type type, IFormatProvider provider) + { return Convert.DefaultToType((IConvertible)this, type, provider); } } |