2 // Mono.Data.TdsTypes.TdsDouble
5 // Tim Coleman <tim@timcoleman.com>
7 // (C) Copyright Tim Coleman, 2002
10 using Mono.Data.TdsClient;
12 using System.Data.SqlTypes;
13 using System.Globalization;
15 namespace Mono.Data.TdsTypes {
16 public struct TdsDouble : INullable, IComparable
23 public static readonly TdsDouble MaxValue = new TdsDouble (1.7976931348623157e308);
24 public static readonly TdsDouble MinValue = new TdsDouble (-1.7976931348623157e308);
25 public static readonly TdsDouble Null;
26 public static readonly TdsDouble Zero = new TdsDouble (0);
32 public TdsDouble (double value)
43 get { return !notNull; }
49 throw new TdsNullValueException ();
59 public static TdsDouble Add (TdsDouble x, TdsDouble y)
64 public int CompareTo (object value)
68 else if (!(value is TdsDouble))
69 throw new ArgumentException (Locale.GetText ("Value is not a System.Data.TdsTypes.TdsDouble"));
70 else if (((TdsDouble)value).IsNull)
73 return this.value.CompareTo (((TdsDouble)value).Value);
76 public static TdsDouble Divide (TdsDouble x, TdsDouble y)
81 public override bool Equals (object value)
83 if (!(value is TdsDouble))
86 return (bool) (this == (TdsDouble)value);
89 public static TdsBoolean Equals (TdsDouble x, TdsDouble y)
94 public override int GetHashCode ()
96 long LongValue = (long)value;
97 return (int)(LongValue ^ (LongValue >> 32));
101 public static TdsBoolean GreaterThan (TdsDouble x, TdsDouble y)
106 public static TdsBoolean GreaterThanOrEqual (TdsDouble x, TdsDouble y)
111 public static TdsBoolean LessThan (TdsDouble x, TdsDouble y)
116 public static TdsBoolean LessThanOrEqual (TdsDouble x, TdsDouble y)
121 public static TdsDouble Multiply (TdsDouble x, TdsDouble y)
126 public static TdsBoolean NotEquals (TdsDouble x, TdsDouble y)
131 public static TdsDouble Parse (string s)
133 return new TdsDouble (Double.Parse (s));
136 public static TdsDouble Subtract (TdsDouble x, TdsDouble y)
141 public TdsBoolean ToTdsBoolean ()
143 return ((TdsBoolean)this);
146 public TdsByte ToTdsByte ()
148 return ((TdsByte)this);
151 public TdsDecimal ToTdsDecimal ()
153 return ((TdsDecimal)this);
156 public TdsInt16 ToTdsInt16 ()
158 return ((TdsInt16)this);
161 public TdsInt32 ToTdsInt32 ()
163 return ((TdsInt32)this);
166 public TdsInt64 ToTdsInt64 ()
168 return ((TdsInt64)this);
171 public TdsMoney ToTdsMoney ()
173 return ((TdsMoney)this);
176 public TdsSingle ToTdsSingle ()
178 return ((TdsSingle)this);
181 public TdsString ToTdsString ()
183 return ((TdsString)this);
186 public override string ToString ()
191 return value.ToString ();
194 public static TdsDouble operator + (TdsDouble x, TdsDouble y)
196 return new TdsDouble (x.Value + y.Value);
199 public static TdsDouble operator / (TdsDouble x, TdsDouble y)
201 return new TdsDouble (x.Value / y.Value);
204 public static TdsBoolean operator == (TdsDouble x, TdsDouble y)
206 if (x.IsNull || y.IsNull)
207 return TdsBoolean.Null;
209 return new TdsBoolean (x.Value == y.Value);
212 public static TdsBoolean operator > (TdsDouble x, TdsDouble y)
214 if (x.IsNull || y.IsNull)
215 return TdsBoolean.Null;
217 return new TdsBoolean (x.Value > y.Value);
220 public static TdsBoolean operator >= (TdsDouble x, TdsDouble y)
222 if (x.IsNull || y.IsNull)
223 return TdsBoolean.Null;
225 return new TdsBoolean (x.Value >= y.Value);
228 public static TdsBoolean operator != (TdsDouble x, TdsDouble y)
230 if (x.IsNull || y.IsNull)
231 return TdsBoolean.Null;
233 return new TdsBoolean (!(x.Value == y.Value));
236 public static TdsBoolean operator < (TdsDouble x, TdsDouble y)
238 if (x.IsNull || y.IsNull)
239 return TdsBoolean.Null;
241 return new TdsBoolean (x.Value < y.Value);
244 public static TdsBoolean operator <= (TdsDouble x, TdsDouble y)
246 if (x.IsNull || y.IsNull)
247 return TdsBoolean.Null;
249 return new TdsBoolean (x.Value <= y.Value);
252 public static TdsDouble operator * (TdsDouble x, TdsDouble y)
254 return new TdsDouble (x.Value * y.Value);
257 public static TdsDouble operator - (TdsDouble x, TdsDouble y)
259 return new TdsDouble (x.Value - y.Value);
262 public static TdsDouble operator - (TdsDouble n)
264 return new TdsDouble (-(n.Value));
267 public static explicit operator TdsDouble (TdsBoolean x)
272 return new TdsDouble ((double)x.ByteValue);
275 public static explicit operator double (TdsDouble x)
280 public static explicit operator TdsDouble (TdsString x)
282 return TdsDouble.Parse (x.Value);
285 public static implicit operator TdsDouble (double x)
287 return new TdsDouble (x);
290 public static implicit operator TdsDouble (TdsByte x)
295 return new TdsDouble ((double)x.Value);
298 public static implicit operator TdsDouble (TdsDecimal x)
303 return new TdsDouble ((double)x.Value);
306 public static implicit operator TdsDouble (TdsInt16 x)
311 return new TdsDouble ((double)x.Value);
314 public static implicit operator TdsDouble (TdsInt32 x)
319 return new TdsDouble ((double)x.Value);
322 public static implicit operator TdsDouble (TdsInt64 x)
327 return new TdsDouble ((double)x.Value);
330 public static implicit operator TdsDouble (TdsMoney x)
335 return new TdsDouble ((double)x.Value);
338 public static implicit operator TdsDouble (TdsSingle x)
343 return new TdsDouble ((double)x.Value);