5 // Miguel de Icaza (miguel@ximian.com)
7 // (C) Ximian, Inc. http://www.ximian.com
8 // Copyright (C) 2004 Novell (http://www.novell.com)
10 // Permission is hereby granted, free of charge, to any person obtaining
11 // a copy of this software and associated documentation files (the
12 // "Software"), to deal in the Software without restriction, including
13 // without limitation the rights to use, copy, modify, merge, publish,
14 // distribute, sublicense, and/or sell copies of the Software, and to
15 // permit persons to whom the Software is furnished to do so, subject to
16 // the following conditions:
18 // The above copyright notice and this permission notice shall be
19 // included in all copies or substantial portions of the Software.
21 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
22 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
23 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
24 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
25 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
26 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
27 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
30 using System
.Globalization
;
35 [CLSCompliant (false)]
36 public struct UInt16
: IFormattable
, IConvertible
,
38 IComparable
, IComparable
<UInt16
>
43 public const ushort MaxValue
= 0xffff;
44 public const ushort MinValue
= 0;
46 internal ushort m_value
;
48 public int CompareTo (object value)
53 if(!(value is System
.UInt16
))
54 throw new ArgumentException (Locale
.GetText ("Value is not a System.UInt16."));
56 return this.m_value
- ((ushort) value);
59 public override bool Equals (object obj
)
61 if (!(obj
is System
.UInt16
))
64 return ((ushort) obj
) == m_value
;
67 public override int GetHashCode ()
73 public int CompareTo (ushort value)
83 public bool Equals (ushort value)
85 return value == m_value
;
89 internal static bool Parse (string s
, bool tryParse
, out ushort result
)
94 bool digits_seen
= false;
95 bool has_negative_sign
= false;
103 throw new ArgumentNullException ("s");
108 for (i
= 0; i
< len
; i
++) {
110 if (!Char
.IsWhiteSpace (c
))
118 throw new FormatException ();
125 has_negative_sign
= true;
128 for (; i
< len
; i
++) {
131 if (c
>= '0' && c
<= '9') {
132 ushort d
= (ushort) (c
- '0');
134 val
= checked ((ushort) (val
* 10 + d
));
138 if (Char
.IsWhiteSpace (c
)) {
139 for (i
++; i
< len
; i
++) {
140 if (!Char
.IsWhiteSpace (s
[i
]))
144 throw new FormatException ();
152 throw new FormatException ();
159 throw new FormatException ();
161 // -0 is legal but other negative values are not
162 if (has_negative_sign
&& (val
> 0)) {
166 throw new OverflowException (
167 Locale
.GetText ("Negative number"));
174 [CLSCompliant (false)]
175 public static ushort Parse (string s
, IFormatProvider provider
)
177 return Parse (s
, NumberStyles
.Integer
, provider
);
180 [CLSCompliant (false)]
181 public static ushort Parse (string s
, NumberStyles style
)
183 return Parse (s
, style
, null);
186 [CLSCompliant (false)]
187 public static ushort Parse (string s
, NumberStyles style
, IFormatProvider provider
)
189 uint tmpResult
= UInt32
.Parse (s
, style
, provider
);
190 if (tmpResult
> UInt16
.MaxValue
|| tmpResult
< UInt16
.MinValue
)
191 throw new OverflowException (Locale
.GetText ("Value too large or too small."));
193 return (ushort) tmpResult
;
196 [CLSCompliant(false)]
197 public static ushort Parse (string s
) {
200 Parse (s
, false, out res
);
206 [CLSCompliant(false)]
207 public static bool TryParse (string s
, out ushort result
) {
209 return Parse (s
, true, out result
);
217 [CLSCompliant(false)]
218 public static bool TryParse (string s
, NumberStyles style
, IFormatProvider provider
, out ushort result
) {
222 if (!UInt32
.TryParse (s
, style
, provider
, out tmpResult
))
224 if (tmpResult
> UInt16
.MaxValue
|| tmpResult
< UInt16
.MinValue
)
226 result
= (ushort)tmpResult
;
236 public override string ToString ()
238 return ToString (null, null);
241 public string ToString (IFormatProvider provider
)
243 return ToString (null, provider
);
246 public string ToString (string format
)
248 return ToString (format
, null);
251 public string ToString (string format
, IFormatProvider provider
)
253 NumberFormatInfo nfi
= NumberFormatInfo
.GetInstance (provider
);
255 // use "G" when format is null or String.Empty
256 if ((format
== null) || (format
.Length
== 0))
259 return IntegerFormatter
.NumberToString (format
, nfi
, m_value
);
262 // =========== IConvertible Methods =========== //
263 public TypeCode
GetTypeCode ()
265 return TypeCode
.UInt16
;
268 bool IConvertible
.ToBoolean (IFormatProvider provider
)
270 return System
.Convert
.ToBoolean (m_value
);
273 byte IConvertible
.ToByte (IFormatProvider provider
)
275 return System
.Convert
.ToByte (m_value
);
278 char IConvertible
.ToChar (IFormatProvider provider
)
280 return System
.Convert
.ToChar (m_value
);
283 DateTime IConvertible
.ToDateTime (IFormatProvider provider
)
285 return System
.Convert
.ToDateTime (m_value
);
288 decimal IConvertible
.ToDecimal (IFormatProvider provider
)
290 return System
.Convert
.ToDecimal (m_value
);
293 double IConvertible
.ToDouble (IFormatProvider provider
)
295 return System
.Convert
.ToDouble (m_value
);
298 short IConvertible
.ToInt16 (IFormatProvider provider
)
300 return System
.Convert
.ToInt16 (m_value
);
303 int IConvertible
.ToInt32 (IFormatProvider provider
)
305 return System
.Convert
.ToInt32 (m_value
);
308 long IConvertible
.ToInt64 (IFormatProvider provider
)
310 return System
.Convert
.ToInt64 (m_value
);
313 sbyte IConvertible
.ToSByte (IFormatProvider provider
)
315 return System
.Convert
.ToSByte (m_value
);
318 float IConvertible
.ToSingle (IFormatProvider provider
)
320 return System
.Convert
.ToSingle (m_value
);
323 object IConvertible
.ToType (Type conversionType
, IFormatProvider provider
)
325 return System
.Convert
.ToType (m_value
, conversionType
, provider
);
328 ushort IConvertible
.ToUInt16 (IFormatProvider provider
)
333 uint IConvertible
.ToUInt32 (IFormatProvider provider
)
335 return System
.Convert
.ToUInt32 (m_value
);
338 ulong IConvertible
.ToUInt64 (IFormatProvider provider
)
340 return System
.Convert
.ToUInt64 (m_value
);