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 public struct Int16
: IFormattable
, IConvertible
,
37 IComparable
, IComparable
<Int16
>
43 public const short MaxValue
= 32767;
44 public const short MinValue
= -32768;
46 internal short m_value
;
48 public int CompareTo (object v
)
53 if (!(v
is System
.Int16
))
54 throw new ArgumentException (Locale
.GetText ("Value is not a System.Int16"));
65 public override bool Equals (object o
)
67 if (!(o
is System
.Int16
))
70 return ((short) o
) == m_value
;
73 public override int GetHashCode ()
79 public int CompareTo (short value)
89 public bool Equals (short value)
91 return value == m_value
;
95 internal static bool Parse (string s
, bool tryParse
, out short result
)
100 bool digits_seen
= false;
108 throw new ArgumentNullException ("s");
113 for (i
= 0; i
< len
; i
++){
115 if (!Char
.IsWhiteSpace (c
))
123 throw new FormatException ();
133 for (; i
< len
; i
++){
136 if (c
>= '0' && c
<= '9'){
137 val
= checked ((short) (val
* 10 + (c
- '0') * sign
));
140 if (Char
.IsWhiteSpace (c
)){
141 for (i
++; i
< len
; i
++){
142 if (!Char
.IsWhiteSpace (s
[i
]))
146 throw new FormatException ();
153 throw new FormatException ();
160 throw new FormatException ();
166 public static short Parse (string s
, IFormatProvider fp
)
168 return Parse (s
, NumberStyles
.Integer
, fp
);
171 public static short Parse (string s
, NumberStyles style
)
173 return Parse (s
, style
, null);
176 public static short Parse (string s
, NumberStyles style
, IFormatProvider fp
)
178 int tmpResult
= Int32
.Parse (s
, style
, fp
);
179 if (tmpResult
> Int16
.MaxValue
|| tmpResult
< Int16
.MinValue
)
180 throw new OverflowException ("Value too large or too small.");
182 return (short) tmpResult
;
185 public static short Parse (string s
) {
188 Parse (s
, false, out res
);
194 public static bool TryParse (string s
, out short result
) {
196 return Parse (s
, true, out result
);
204 public static bool TryParse (string s
, NumberStyles style
, IFormatProvider provider
, out short result
) {
208 if (!Int32
.TryParse (s
, style
, provider
, out tmpResult
))
210 if (tmpResult
> Int16
.MaxValue
|| tmpResult
< Int16
.MinValue
)
212 result
= (short)tmpResult
;
222 public override string ToString ()
224 return ToString (null, null);
227 public string ToString (IFormatProvider fp
)
229 return ToString (null, fp
);
232 public string ToString (string format
)
234 return ToString (format
, null);
237 public string ToString (string format
, IFormatProvider fp
)
239 NumberFormatInfo nfi
= NumberFormatInfo
.GetInstance( fp
);
241 // use "G" when format is null or String.Empty
242 if ((format
== null) || (format
.Length
== 0))
245 return IntegerFormatter
.NumberToString(format
, nfi
, m_value
);
248 // =========== IConvertible Methods =========== //
250 public TypeCode
GetTypeCode ()
252 return TypeCode
.Int16
;
255 bool IConvertible
.ToBoolean (IFormatProvider provider
)
257 return System
.Convert
.ToBoolean (m_value
);
260 byte IConvertible
.ToByte (IFormatProvider provider
)
262 return System
.Convert
.ToByte (m_value
);
265 char IConvertible
.ToChar (IFormatProvider provider
)
267 return System
.Convert
.ToChar (m_value
);
270 DateTime IConvertible
.ToDateTime (IFormatProvider provider
)
272 return System
.Convert
.ToDateTime (m_value
);
275 decimal IConvertible
.ToDecimal (IFormatProvider provider
)
277 return System
.Convert
.ToDecimal (m_value
);
280 double IConvertible
.ToDouble (IFormatProvider provider
)
282 return System
.Convert
.ToDouble (m_value
);
285 short IConvertible
.ToInt16 (IFormatProvider provider
)
287 return System
.Convert
.ToInt16 (m_value
);
290 int IConvertible
.ToInt32 (IFormatProvider provider
)
292 return System
.Convert
.ToInt32 (m_value
);
295 long IConvertible
.ToInt64 (IFormatProvider provider
)
297 return System
.Convert
.ToInt64 (m_value
);
300 sbyte IConvertible
.ToSByte (IFormatProvider provider
)
302 return System
.Convert
.ToSByte (m_value
);
305 float IConvertible
.ToSingle (IFormatProvider provider
)
307 return System
.Convert
.ToSingle (m_value
);
310 object IConvertible
.ToType (Type conversionType
, IFormatProvider provider
)
312 return System
.Convert
.ToType (m_value
, conversionType
, provider
);
315 ushort IConvertible
.ToUInt16 (IFormatProvider provider
)
317 return System
.Convert
.ToUInt16 (m_value
);
320 uint IConvertible
.ToUInt32 (IFormatProvider provider
)
322 return System
.Convert
.ToUInt32 (m_value
);
325 ulong IConvertible
.ToUInt64 (IFormatProvider provider
)
327 return System
.Convert
.ToUInt64 (m_value
);