// // System.Single.cs // // Author: // Miguel de Icaza (miguel@ximian.com) // // (C) Ximian, Inc. http://www.ximian.com // using System.Globalization; using System.Runtime.CompilerServices; namespace System { [Serializable] public struct Single : IComparable, IFormattable, IConvertible { public const float Epsilon = 1.4e-45f; public const float MaxValue = 3.40282346638528859e38f; public const float MinValue = -3.40282346638528859e38f; public const float NaN = 0.0f / 0.0f; public const float PositiveInfinity = 1.0f / 0.0f; public const float NegativeInfinity = -1.0f / 0.0f; // VES needs to know about value. public is workaround // so source will compile public float value; public int CompareTo (object v) { if (v == null) return 1; if (!(v is System.Single)) throw new ArgumentException (Locale.GetText ("Value is not a System.Single")); return (int) (value - ((float) v)); } public override bool Equals (object o) { if (!(o is System.Single)) return false; return ((float) o) == value; } public override int GetHashCode () { return (int) value; } public static bool IsInfinity (float f) { return (f == PositiveInfinity || f == NegativeInfinity); } public static bool IsNaN (float f) { return (f != f); } public static bool IsNegativeInfinity (float f) { return (f < 0.0f && (f == NegativeInfinity || f == PositiveInfinity)); } public static bool IsPositiveInfinity (float f) { return (f > 0.0f && (f == NegativeInfinity || f == PositiveInfinity)); } public static float Parse (string s) { return (float) Double.Parse ( s, (NumberStyles.Float | NumberStyles.AllowThousands), null); } public static float Parse (string s, IFormatProvider fp) { return (float) Double.Parse ( s, (NumberStyles.Float | NumberStyles.AllowThousands), fp); } public static float Parse (string s, NumberStyles style) { return (float) Double.Parse (s, style, null); } public static float Parse (string s, NumberStyles style, IFormatProvider fp) { return (float) Double.Parse (s, style, fp); } public override string ToString () { return ToString (null, null); } public string ToString (IFormatProvider fp) { return ToString (null, fp); } public string ToString (string format) { return ToString (format, null); } [MonoTODO] public string ToString (string format, IFormatProvider fp) { // FIXME: Need to pass format and provider info to this call too. return ToStringImpl(value); } [MethodImplAttribute(MethodImplOptions.InternalCall)] private static extern string ToStringImpl (float value); // ============= IConvertible Methods ============ // public TypeCode GetTypeCode () { return TypeCode.Single; } bool IConvertible.ToBoolean (IFormatProvider provider) { return System.Convert.ToBoolean (value); } byte IConvertible.ToByte (IFormatProvider provider) { return System.Convert.ToByte (value); } char IConvertible.ToChar (IFormatProvider provider) { return System.Convert.ToChar (value); } DateTime IConvertible.ToDateTime (IFormatProvider provider) { return System.Convert.ToDateTime (value); } 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); } object IConvertible.ToType (Type conversionType, IFormatProvider provider) { return System.Convert.ToType (value, conversionType, 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); } } }