5 // Miguel de Icaza (miguel@ximian.com)
7 // (C) Ximian, Inc. http://www.ximian.com
10 using System.Globalization;
16 public struct UInt16 : IComparable, IFormattable, IConvertible {
18 public const ushort MaxValue = 0xffff;
19 public const ushort MinValue = 0;
23 public int CompareTo (object v)
28 if(!(v is System.UInt16))
29 throw new ArgumentException (Locale.GetText ("Value is not a System.UInt16"));
31 return value - ((ushort) v);
34 public override bool Equals (object o)
36 if (!(o is System.UInt16))
39 return ((ushort) o) == value;
42 public override int GetHashCode ()
48 public static ushort Parse (string s)
53 bool digits_seen = false;
54 bool has_negative_sign = false;
57 throw new ArgumentNullException (Locale.GetText ("s is null"));
62 for (i = 0; i < len; i++){
64 if (!Char.IsWhiteSpace (c))
69 throw new FormatException ();
76 has_negative_sign = true;
82 if (c >= '0' && c <= '9'){
83 ushort d = (ushort) (c - '0');
85 val = checked ((ushort) (val * 10 + d));
88 if (Char.IsWhiteSpace (c)){
89 for (i++; i < len; i++){
90 if (!Char.IsWhiteSpace (s [i]))
91 throw new FormatException ();
95 throw new FormatException ();
99 throw new FormatException ();
101 if (has_negative_sign)
102 throw new OverflowException ();
108 [CLSCompliant(false)]
109 public static ushort Parse (string s, IFormatProvider fp)
111 return Parse (s, NumberStyles.Integer, fp);
114 [CLSCompliant(false)]
115 public static ushort Parse (string s, NumberStyles style)
117 return Parse (s, style, null);
120 [CLSCompliant(false)]
121 public static ushort Parse (string s, NumberStyles style, IFormatProvider fp)
123 uint tmpResult = UInt32.Parse (s, style, fp);
124 if (tmpResult > UInt16.MaxValue || tmpResult < UInt16.MinValue)
125 throw new OverflowException ("Value too large or too small.");
127 return (ushort) tmpResult;
130 public override string ToString ()
132 return ToString (null, null);
135 public string ToString (IFormatProvider fp)
137 return ToString (null, fp);
140 public string ToString (string format)
142 return ToString (format, null);
145 public string ToString (string format, IFormatProvider fp)
147 NumberFormatInfo nfi = NumberFormatInfo.GetInstance( fp );
149 if ( format == null )
152 return IntegerFormatter.NumberToString(format, nfi, value);
155 // =========== IConvertible Methods =========== //
157 public TypeCode GetTypeCode ()
159 return TypeCode.UInt16;
162 bool IConvertible.ToBoolean (IFormatProvider provider)
164 return System.Convert.ToBoolean (value);
167 byte IConvertible.ToByte (IFormatProvider provider)
169 return System.Convert.ToByte (value);
172 char IConvertible.ToChar (IFormatProvider provider)
174 return System.Convert.ToChar (value);
177 DateTime IConvertible.ToDateTime (IFormatProvider provider)
179 return System.Convert.ToDateTime (value);
182 decimal IConvertible.ToDecimal (IFormatProvider provider)
184 return System.Convert.ToDecimal (value);
187 double IConvertible.ToDouble (IFormatProvider provider)
189 return System.Convert.ToDouble (value);
192 short IConvertible.ToInt16 (IFormatProvider provider)
194 return System.Convert.ToInt16 (value);
197 int IConvertible.ToInt32 (IFormatProvider provider)
199 return System.Convert.ToInt32 (value);
202 long IConvertible.ToInt64 (IFormatProvider provider)
204 return System.Convert.ToInt64 (value);
207 [CLSCompliant (false)]
208 sbyte IConvertible.ToSByte (IFormatProvider provider)
210 return System.Convert.ToSByte (value);
213 float IConvertible.ToSingle (IFormatProvider provider)
215 return System.Convert.ToSingle (value);
218 object IConvertible.ToType (Type conversionType, IFormatProvider provider)
220 return System.Convert.ToType (value, conversionType, provider);
223 [CLSCompliant (false)]
224 ushort IConvertible.ToUInt16 (IFormatProvider provider)
226 return System.Convert.ToUInt16 (value);
229 [CLSCompliant (false)]
230 uint IConvertible.ToUInt32 (IFormatProvider provider)
232 return System.Convert.ToUInt32 (value);
235 [CLSCompliant (false)]
236 ulong IConvertible.ToUInt64 (IFormatProvider provider)
238 return System.Convert.ToUInt64 (value);