5 // Miguel de Icaza (miguel@ximian.com)
7 // (C) Ximian, Inc. http://www.ximian.com
8 // Copyright (C) 2004 Novell (http://www.novell.com)
11 using System.Globalization;
16 public struct Int16 : IComparable, IFormattable, IConvertible {
18 public const short MaxValue = 32767;
19 public const short MinValue = -32768;
21 internal short m_value;
23 public int CompareTo (object v)
28 if (!(v is System.Int16))
29 throw new ArgumentException (Locale.GetText ("Value is not a System.Int16"));
40 public override bool Equals (object o)
42 if (!(o is System.Int16))
45 return ((short) o) == m_value;
48 public override int GetHashCode ()
53 public static short Parse (string s)
58 bool digits_seen = false;
61 throw new ArgumentNullException ("s");
66 for (i = 0; i < len; i++){
68 if (!Char.IsWhiteSpace (c))
73 throw new FormatException ();
86 if (c >= '0' && c <= '9'){
87 val = checked ((short) (val * 10 + (c - '0') * sign));
90 if (Char.IsWhiteSpace (c)){
91 for (i++; i < len; i++){
92 if (!Char.IsWhiteSpace (s [i]))
93 throw new FormatException ();
97 throw new FormatException ();
101 throw new FormatException ();
106 public static short Parse (string s, IFormatProvider fp)
108 return Parse (s, NumberStyles.Integer, fp);
111 public static short Parse (string s, NumberStyles style)
113 return Parse (s, style, null);
116 public static short Parse (string s, NumberStyles style, IFormatProvider fp)
118 int tmpResult = Int32.Parse (s, style, fp);
119 if (tmpResult > Int16.MaxValue || tmpResult < Int16.MinValue)
120 throw new OverflowException ("Value too large or too small.");
122 return (short) tmpResult;
125 public override string ToString ()
127 return ToString (null, null);
130 public string ToString (IFormatProvider fp)
132 return ToString (null, fp);
135 public string ToString (string format)
137 return ToString (format, null);
140 public string ToString (string format, IFormatProvider fp)
142 NumberFormatInfo nfi = NumberFormatInfo.GetInstance( fp );
144 // use "G" when format is null or String.Empty
145 if ((format == null) || (format.Length == 0))
148 return IntegerFormatter.NumberToString(format, nfi, m_value);
151 // =========== IConvertible Methods =========== //
153 public TypeCode GetTypeCode ()
155 return TypeCode.Int16;
158 bool IConvertible.ToBoolean (IFormatProvider provider)
160 return System.Convert.ToBoolean (m_value);
163 byte IConvertible.ToByte (IFormatProvider provider)
165 return System.Convert.ToByte (m_value);
168 char IConvertible.ToChar (IFormatProvider provider)
170 return System.Convert.ToChar (m_value);
173 DateTime IConvertible.ToDateTime (IFormatProvider provider)
175 return System.Convert.ToDateTime (m_value);
178 decimal IConvertible.ToDecimal (IFormatProvider provider)
180 return System.Convert.ToDecimal (m_value);
183 double IConvertible.ToDouble (IFormatProvider provider)
185 return System.Convert.ToDouble (m_value);
188 short IConvertible.ToInt16 (IFormatProvider provider)
190 return System.Convert.ToInt16 (m_value);
193 int IConvertible.ToInt32 (IFormatProvider provider)
195 return System.Convert.ToInt32 (m_value);
198 long IConvertible.ToInt64 (IFormatProvider provider)
200 return System.Convert.ToInt64 (m_value);
203 sbyte IConvertible.ToSByte (IFormatProvider provider)
205 return System.Convert.ToSByte (m_value);
208 float IConvertible.ToSingle (IFormatProvider provider)
210 return System.Convert.ToSingle (m_value);
213 object IConvertible.ToType (Type conversionType, IFormatProvider provider)
215 return System.Convert.ToType (m_value, conversionType, provider);
218 ushort IConvertible.ToUInt16 (IFormatProvider provider)
220 return System.Convert.ToUInt16 (m_value);
223 uint IConvertible.ToUInt32 (IFormatProvider provider)
225 return System.Convert.ToUInt32 (m_value);
228 ulong IConvertible.ToUInt64 (IFormatProvider provider)
230 return System.Convert.ToUInt64 (m_value);