{
[Serializable]
[CLSCompliant (false)]
+#if NET_2_0
+ [System.Runtime.InteropServices.ComVisible (true)]
+#endif
public struct UInt64 : IFormattable, IConvertible, IComparable
#if NET_2_0
, IComparable<UInt64>, IEquatable <UInt64>
if (!(value is System.UInt64))
throw new ArgumentException (Locale.GetText ("Value is not a System.UInt64."));
- if (this.m_value == (ulong) value)
- return 0;
+ ulong int64 = (ulong) value;
- if (this.m_value < (ulong) value)
- return -1;
+ if (m_value == int64)
+ return 0;
- return 1;
+ return (m_value < int64) ? -1 : 1;
}
public override bool Equals (object obj)
return -1;
}
- public bool Equals (ulong value)
+ public bool Equals (ulong obj)
{
- return value == m_value;
+ return obj == m_value;
}
#endif
else
digitValue = (ulong) (hexDigit - 'A' + 10);
- number = checked (number * 16 + digitValue);
+ if (tryParse){
+ // Any number above 32 will do
+ bool can_overflow = number > 0xffff;
+
+ number = number * 16 + digitValue;
+
+ if (can_overflow && number < 16)
+ return false;
+ } else
+ number = checked (number * 16 + digitValue);
}
else if (decimalPointFound) {
nDigits++;
}
[CLSCompliant (false)]
- public static ulong Parse (string s, NumberStyles style, IFormatProvider fp)
+ public static ulong Parse (string s, NumberStyles style, IFormatProvider provider)
{
Exception exc;
ulong res;
- if (!Parse (s, style, fp, false, out res, out exc))
+ if (!Parse (s, style, provider, false, out res, out exc))
throw exc;
return res;
public override string ToString ()
{
- return NumberFormatter.FormatGeneral (new NumberFormatter.NumberStore (m_value));
+ return NumberFormatter.NumberToString (m_value, null);
}
public string ToString (IFormatProvider provider)
{
- return NumberFormatter.FormatGeneral (new NumberFormatter.NumberStore (m_value), provider);
+ return NumberFormatter.NumberToString (m_value, provider);
}
public string ToString (string format)
public string ToString (string format, IFormatProvider provider)
{
- NumberFormatInfo nfi = NumberFormatInfo.GetInstance (provider);
- return NumberFormatter.NumberToString (format, m_value, nfi);
+ return NumberFormatter.NumberToString (format, m_value, provider);
}
// =========== IConvertible Methods =========== //