// (C) Ximian, Inc. http://www.ximian.com
// Copyright (C) 2004 Novell (http://www.novell.com)
//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
using System.Globalization;
namespace System {
[Serializable]
- public struct Int16 : IComparable, IFormattable, IConvertible {
+#if NET_2_0
+ [System.Runtime.InteropServices.ComVisible (true)]
+#endif
+ public struct Int16 : IFormattable, IConvertible, IComparable
+#if NET_2_0
+ , IComparable<Int16>, IEquatable <Int16>
+#endif
+ {
public const short MaxValue = 32767;
public const short MinValue = -32768;
return m_value;
}
- public static short Parse (string s)
+#if NET_2_0
+ public int CompareTo (short value)
+ {
+ if (m_value == value)
+ return 0;
+ if (m_value > value)
+ return 1;
+ else
+ return -1;
+ }
+
+ public bool Equals (short value)
+ {
+ return value == m_value;
+ }
+#endif
+
+ internal static bool Parse (string s, bool tryParse, out short result, out Exception exc)
{
short val = 0;
int len;
int i, sign = 1;
bool digits_seen = false;
- if (s == null)
- throw new ArgumentNullException ("s");
+ result = 0;
+ exc = null;
+
+ if (s == null) {
+ if (!tryParse)
+ exc = new ArgumentNullException ("s");
+ return false;
+ }
len = s.Length;
break;
}
- if (i == len)
- throw new FormatException ();
+ if (i == len) {
+ if (!tryParse)
+ exc = Int32.GetFormatException ();
+ return false;
+ }
c = s [i];
if (c == '+')
} else {
if (Char.IsWhiteSpace (c)){
for (i++; i < len; i++){
- if (!Char.IsWhiteSpace (s [i]))
- throw new FormatException ();
+ if (!Char.IsWhiteSpace (s [i])) {
+ if (!tryParse)
+ exc = Int32.GetFormatException ();
+ return false;
+ }
}
break;
- } else
- throw new FormatException ();
+ } else {
+ if (!tryParse)
+ exc = Int32.GetFormatException ();
+ return false;
+ }
}
}
- if (!digits_seen)
- throw new FormatException ();
+ if (!digits_seen) {
+ if (!tryParse)
+ exc = Int32.GetFormatException ();
+ return false;
+ }
- return val;
+ result = val;
+ return true;
}
public static short Parse (string s, IFormatProvider fp)
return (short) tmpResult;
}
+ public static short Parse (string s)
+ {
+ Exception exc;
+ short res;
+
+ if (!Parse (s, false, out res, out exc))
+ throw exc;
+
+ return res;
+ }
+
+#if NET_2_0
+ public static bool TryParse (string s, out short result)
+ {
+ Exception exc;
+ if (!Parse (s, true, out result, out exc)) {
+ result = 0;
+ return false;
+ }
+
+ return true;
+ }
+
+ public static bool TryParse (string s, NumberStyles style, IFormatProvider provider, out short result)
+ {
+ int tmpResult;
+ result = 0;
+
+ if (!Int32.TryParse (s, style, provider, out tmpResult))
+ return false;
+
+ if (tmpResult > Int16.MaxValue || tmpResult < Int16.MinValue)
+ return false;
+
+ result = (short)tmpResult;
+ return true;
+ }
+#endif
+
public override string ToString ()
{
- return ToString (null, null);
+ return NumberFormatter.FormatGeneral (new NumberFormatter.NumberStore (m_value));
}
public string ToString (IFormatProvider fp)
{
- return ToString (null, fp);
+ return NumberFormatter.FormatGeneral (new NumberFormatter.NumberStore (m_value), fp);
}
public string ToString (string format)
public string ToString (string format, IFormatProvider fp)
{
NumberFormatInfo nfi = NumberFormatInfo.GetInstance( fp );
-
- // use "G" when format is null or String.Empty
- if ((format == null) || (format.Length == 0))
- format = "G";
-
- return IntegerFormatter.NumberToString(format, nfi, m_value);
+ return NumberFormatter.NumberToString(format, m_value, nfi);
}
// =========== IConvertible Methods =========== //