**** Merged from MCS ****
[mono-project.git] / mcs / class / corlib / System / Int16.cs
blob5029de2a7db13174d26b74f24619eb3f32aa6442
1 //
2 // System.Int16.cs
3 //
4 // Author:
5 // Miguel de Icaza (miguel@ximian.com)
6 //
7 // (C) Ximian, Inc. http://www.ximian.com
8 // Copyright (C) 2004 Novell (http://www.novell.com)
9 //
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:
17 //
18 // The above copyright notice and this permission notice shall be
19 // included in all copies or substantial portions of the Software.
20 //
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;
32 namespace System {
34 [Serializable]
35 public struct Int16 : IFormattable, IConvertible,
36 #if NET_2_0
37 IComparable, IComparable<Int16>
38 #else
39 IComparable
40 #endif
43 public const short MaxValue = 32767;
44 public const short MinValue = -32768;
46 internal short m_value;
48 public int CompareTo (object v)
50 if (v == null)
51 return 1;
53 if (!(v is System.Int16))
54 throw new ArgumentException (Locale.GetText ("Value is not a System.Int16"));
56 short xv = (short) v;
57 if (m_value == xv)
58 return 0;
59 if (m_value > xv)
60 return 1;
61 else
62 return -1;
65 public override bool Equals (object o)
67 if (!(o is System.Int16))
68 return false;
70 return ((short) o) == m_value;
73 public override int GetHashCode ()
75 return m_value;
78 #if NET_2_0
79 public int CompareTo (short value)
81 if (m_value == value)
82 return 0;
83 if (m_value > value)
84 return 1;
85 else
86 return -1;
89 public bool Equals (short value)
91 return value == m_value;
93 #endif
95 internal static bool Parse (string s, bool tryParse, out short result)
97 short val = 0;
98 int len;
99 int i, sign = 1;
100 bool digits_seen = false;
102 result = 0;
104 if (s == null)
105 if (tryParse)
106 return false;
107 else
108 throw new ArgumentNullException ("s");
110 len = s.Length;
112 char c;
113 for (i = 0; i < len; i++){
114 c = s [i];
115 if (!Char.IsWhiteSpace (c))
116 break;
119 if (i == len)
120 if (tryParse)
121 return false;
122 else
123 throw new FormatException ();
125 c = s [i];
126 if (c == '+')
127 i++;
128 else if (c == '-'){
129 sign = -1;
130 i++;
133 for (; i < len; i++){
134 c = s [i];
136 if (c >= '0' && c <= '9'){
137 val = checked ((short) (val * 10 + (c - '0') * sign));
138 digits_seen = true;
139 } else {
140 if (Char.IsWhiteSpace (c)){
141 for (i++; i < len; i++){
142 if (!Char.IsWhiteSpace (s [i]))
143 if (tryParse)
144 return false;
145 else
146 throw new FormatException ();
148 break;
149 } else
150 if (tryParse)
151 return false;
152 else
153 throw new FormatException ();
156 if (!digits_seen)
157 if (tryParse)
158 return false;
159 else
160 throw new FormatException ();
162 result = val;
163 return true;
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) {
186 short res;
188 Parse (s, false, out res);
190 return res;
193 #if NET_2_0
194 public static bool TryParse (string s, out short result) {
195 try {
196 return Parse (s, true, out result);
198 catch (Exception) {
199 result = 0;
200 return false;
204 public static bool TryParse (string s, NumberStyles style, IFormatProvider provider, out short result) {
205 try {
206 int tmpResult;
208 if (!Int32.TryParse (s, style, provider, out tmpResult))
209 return false;
210 if (tmpResult > Int16.MaxValue || tmpResult < Int16.MinValue)
211 return false;
212 result = (short)tmpResult;
213 return true;
215 catch (Exception) {
216 result = 0;
217 return false;
220 #endif
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))
243 format = "G";
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);