47f5da671194fac289e5ed501ef933c99eed7e1c
[mono.git] / mcs / class / corlib / System / Int16.cs
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
11 using System.Globalization;
12
13 namespace System {
14         
15         [Serializable]
16         public struct Int16 : IComparable, IFormattable, IConvertible {
17
18                 public const short MaxValue =  32767;
19                 public const short MinValue = -32768;
20                 
21                 internal short m_value;
22
23                 public int CompareTo (object v)
24                 {
25                         if (v == null)
26                                 return 1;
27
28                         if (!(v is System.Int16))
29                                 throw new ArgumentException (Locale.GetText ("Value is not a System.Int16"));
30
31                         short xv = (short) v;
32                         if (m_value == xv)
33                                 return 0;
34                         if (m_value > xv)
35                                 return 1;
36                         else
37                                 return -1;
38                 }
39
40                 public override bool Equals (object o)
41                 {
42                         if (!(o is System.Int16))
43                                 return false;
44
45                         return ((short) o) == m_value;
46                 }
47
48                 public override int GetHashCode ()
49                 {
50                         return m_value;
51                 }
52
53                 public static short Parse (string s)
54                 {
55                         short val = 0;
56                         int len;
57                         int i, sign = 1;
58                         bool digits_seen = false;
59
60                         if (s == null)
61                                 throw new ArgumentNullException ("s");
62
63                         len = s.Length;
64
65                         char c;
66                         for (i = 0; i < len; i++){
67                                 c = s [i];
68                                 if (!Char.IsWhiteSpace (c))
69                                         break;
70                         }
71                         
72                         if (i == len)
73                                 throw new FormatException ();
74
75                         c = s [i];
76                         if (c == '+')
77                                 i++;
78                         else if (c == '-'){
79                                 sign = -1;
80                                 i++;
81                         }
82                         
83                         for (; i < len; i++){
84                                 c = s [i];
85
86                                 if (c >= '0' && c <= '9'){
87                                         val = checked ((short) (val * 10 + (c - '0') * sign));
88                                         digits_seen = true;
89                                 } else {
90                                         if (Char.IsWhiteSpace (c)){
91                                                 for (i++; i < len; i++){
92                                                         if (!Char.IsWhiteSpace (s [i]))
93                                                                 throw new FormatException ();
94                                                 }
95                                                 break;
96                                         } else
97                                                 throw new FormatException ();
98                                 }
99                         }
100                         if (!digits_seen)
101                                 throw new FormatException ();
102                         
103                         return val;
104                 }
105
106                 public static short Parse (string s, IFormatProvider fp)
107                 {
108                         return Parse (s, NumberStyles.Integer, fp);
109                 }
110
111                 public static short Parse (string s, NumberStyles style)
112                 {
113                         return Parse (s, style, null);
114                 }
115
116                 public static short Parse (string s, NumberStyles style, IFormatProvider fp)
117                 {
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.");
121
122                         return (short) tmpResult;
123                 }
124
125                 public override string ToString ()
126                 {
127                         return ToString (null, null);
128                 }
129
130                 public string ToString (IFormatProvider fp)
131                 {
132                         return ToString (null, fp);
133                 }
134
135                 public string ToString (string format)
136                 {
137                         return ToString (format, null);
138                 }
139
140                 public string ToString (string format, IFormatProvider fp)
141                 {
142                         NumberFormatInfo nfi = NumberFormatInfo.GetInstance( fp );
143
144                         // use "G" when format is null or String.Empty
145                         if ((format == null) || (format.Length == 0))
146                                 format = "G";
147                         
148                         return IntegerFormatter.NumberToString(format, nfi, m_value);
149                 }
150
151                 // =========== IConvertible Methods =========== //
152
153                 public TypeCode GetTypeCode ()
154                 {
155                         return TypeCode.Int16;
156                 }
157
158                 bool IConvertible.ToBoolean (IFormatProvider provider)
159                 {
160                         return System.Convert.ToBoolean (m_value);
161                 }
162
163                 byte IConvertible.ToByte (IFormatProvider provider)
164                 {
165                         return System.Convert.ToByte (m_value);
166                 }
167
168                 char IConvertible.ToChar (IFormatProvider provider)
169                 {
170                         return System.Convert.ToChar (m_value);
171                 }
172
173                 DateTime IConvertible.ToDateTime (IFormatProvider provider)
174                 {
175                         return System.Convert.ToDateTime (m_value);
176                 }
177
178                 decimal IConvertible.ToDecimal (IFormatProvider provider)
179                 {
180                         return System.Convert.ToDecimal (m_value);
181                 }
182
183                 double IConvertible.ToDouble (IFormatProvider provider)
184                 {
185                         return System.Convert.ToDouble (m_value);
186                 }
187
188                 short IConvertible.ToInt16 (IFormatProvider provider)
189                 {
190                         return System.Convert.ToInt16 (m_value);
191                 }
192
193                 int IConvertible.ToInt32 (IFormatProvider provider)
194                 {
195                         return System.Convert.ToInt32 (m_value);
196                 }
197
198                 long IConvertible.ToInt64 (IFormatProvider provider)
199                 {
200                         return System.Convert.ToInt64 (m_value);
201                 }
202
203                 sbyte IConvertible.ToSByte (IFormatProvider provider)
204                 {
205                         return System.Convert.ToSByte (m_value);
206                 }
207                 
208                 float IConvertible.ToSingle (IFormatProvider provider)
209                 {
210                         return System.Convert.ToSingle (m_value);
211                 }
212
213                 object IConvertible.ToType (Type conversionType, IFormatProvider provider)
214                 {
215                         return System.Convert.ToType (m_value, conversionType, provider);
216                 }
217
218                 ushort IConvertible.ToUInt16 (IFormatProvider provider)
219                 {
220                         return System.Convert.ToUInt16 (m_value);
221                 }
222
223                 uint IConvertible.ToUInt32 (IFormatProvider provider)
224                 {
225                         return System.Convert.ToUInt32 (m_value);
226                 }
227
228                 ulong IConvertible.ToUInt64 (IFormatProvider provider)
229                 {
230                         return System.Convert.ToUInt64 (m_value);
231                 }
232         }
233 }