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
;
36 public struct SByte
: IFormattable
, IConvertible
, IComparable
38 , IComparable
<SByte
>, IEquatable
<SByte
>
41 public const sbyte MinValue
= -128;
42 public const sbyte MaxValue
= 127;
44 internal sbyte m_value
;
46 public int CompareTo (object v
)
51 if (!(v
is System
.SByte
))
52 throw new ArgumentException (Locale
.GetText ("Value is not a System.SByte."));
63 public override bool Equals (object o
)
65 if (!(o
is System
.SByte
))
68 return ((sbyte) o
) == m_value
;
71 public override int GetHashCode ()
77 public int CompareTo (sbyte value)
87 public bool Equals (sbyte value)
89 return value == m_value
;
93 internal static bool Parse (string s
, bool tryParse
, out sbyte result
, out Exception exc
)
99 bool digits_seen
= false;
106 exc
= new ArgumentNullException ("s");
113 for (i
= 0; i
< len
; i
++) {
115 if (!Char
.IsWhiteSpace (c
))
121 exc
= Int32
.GetFormatException ();
133 for (; i
< len
; i
++) {
136 if (c
>= '0' && c
<= '9') {
137 ival
= checked (ival
* 10 - (int) (c
- '0'));
140 if (Char
.IsWhiteSpace (c
)) {
141 for (i
++; i
< len
; i
++) {
142 if (!Char
.IsWhiteSpace (s
[i
])) {
144 exc
= Int32
.GetFormatException ();
151 exc
= Int32
.GetFormatException ();
158 exc
= Int32
.GetFormatException ();
162 ival
= neg
? ival
: -ival
;
163 if (ival
< SByte
.MinValue
|| ival
> SByte
.MaxValue
) {
165 exc
= new OverflowException ();
169 result
= (sbyte)ival
;
173 [CLSCompliant(false)]
174 public static sbyte Parse (string s
, IFormatProvider provider
)
176 return Parse (s
, NumberStyles
.Integer
, provider
);
179 [CLSCompliant(false)]
180 public static sbyte Parse (string s
, NumberStyles style
)
182 return Parse (s
, style
, null);
185 [CLSCompliant(false)]
186 public static sbyte Parse (string s
, NumberStyles style
, IFormatProvider provider
)
188 int tmpResult
= Int32
.Parse (s
, style
, provider
);
189 if (tmpResult
> SByte
.MaxValue
|| tmpResult
< SByte
.MinValue
)
190 throw new OverflowException (Locale
.GetText ("Value too large or too small."));
192 return (sbyte) tmpResult
;
195 [CLSCompliant(false)]
196 public static sbyte Parse (string s
)
201 if (!Parse (s
, false, out res
, out exc
))
208 [CLSCompliant(false)]
209 public static bool TryParse (string s
, out sbyte result
)
212 if (!Parse (s
, true, out result
, out exc
)) {
220 [CLSCompliant(false)]
221 public static bool TryParse (string s
, NumberStyles style
, IFormatProvider provider
, out sbyte result
)
226 if (!Int32
.TryParse (s
, style
, provider
, out tmpResult
))
228 if (tmpResult
> SByte
.MaxValue
|| tmpResult
< SByte
.MinValue
)
231 result
= (sbyte)tmpResult
;
236 public override string ToString ()
238 return NumberFormatter
.FormatGeneral (new NumberFormatter
.NumberStore (m_value
));
241 public string ToString (IFormatProvider provider
)
243 return NumberFormatter
.FormatGeneral (new NumberFormatter
.NumberStore (m_value
), 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
);
254 return NumberFormatter
.NumberToString (format
, m_value
, nfi
);
257 // =========== ICovnertible Methods =========== //
258 public TypeCode
GetTypeCode ()
260 return TypeCode
.SByte
;
263 bool IConvertible
.ToBoolean (IFormatProvider provider
)
265 return System
.Convert
.ToBoolean (m_value
);
268 byte IConvertible
.ToByte (IFormatProvider provider
)
270 return System
.Convert
.ToByte (m_value
);
273 char IConvertible
.ToChar (IFormatProvider provider
)
275 return System
.Convert
.ToChar (m_value
);
278 DateTime IConvertible
.ToDateTime (IFormatProvider provider
)
280 return System
.Convert
.ToDateTime (m_value
);
283 decimal IConvertible
.ToDecimal (IFormatProvider provider
)
285 return System
.Convert
.ToDecimal (m_value
);
288 double IConvertible
.ToDouble (IFormatProvider provider
)
290 return System
.Convert
.ToDouble (m_value
);
293 short IConvertible
.ToInt16 (IFormatProvider provider
)
295 return System
.Convert
.ToInt16 (m_value
);
298 int IConvertible
.ToInt32 (IFormatProvider provider
)
300 return System
.Convert
.ToInt32 (m_value
);
303 long IConvertible
.ToInt64 (IFormatProvider provider
)
305 return System
.Convert
.ToInt64 (m_value
);
308 sbyte IConvertible
.ToSByte (IFormatProvider provider
)
313 float IConvertible
.ToSingle (IFormatProvider provider
)
315 return System
.Convert
.ToSingle (m_value
);
318 object IConvertible
.ToType (Type conversionType
, IFormatProvider provider
)
320 return System
.Convert
.ToType (m_value
, conversionType
, provider
);
323 ushort IConvertible
.ToUInt16 (IFormatProvider provider
)
325 return System
.Convert
.ToUInt16 (m_value
);
328 uint IConvertible
.ToUInt32 (IFormatProvider provider
)
330 return System
.Convert
.ToUInt32 (m_value
);
333 ulong IConvertible
.ToUInt64 (IFormatProvider provider
)
335 return System
.Convert
.ToUInt64 (m_value
);