2 // Mono.Data.TdsTypes.TdsBoolean
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 TdsBoolean : INullable, IComparable
25 public static readonly TdsBoolean False = new TdsBoolean (false);
26 public static readonly TdsBoolean Null;
27 public static readonly TdsBoolean One = new TdsBoolean (1);
28 public static readonly TdsBoolean True = new TdsBoolean (true);
29 public static readonly TdsBoolean Zero = new TdsBoolean (0);
35 public TdsBoolean (bool value)
37 this.value = (byte) (value ? 1 : 0);
41 public TdsBoolean (int value)
43 this.value = (byte) (value != 0 ? 1 : 0);
47 #endregion // Constructors
51 public byte ByteValue {
54 throw new TdsNullValueException(Locale.GetText("The property is set to null."));
87 throw new TdsNullValueException(Locale.GetText("The property is set to null."));
93 #endregion // Properties
95 public static TdsBoolean And (TdsBoolean x, TdsBoolean y)
100 public int CompareTo (object value)
104 else if (!(value is TdsBoolean))
105 throw new ArgumentException (Locale.GetText ("Value is not a System.Data.TdsTypes.TdsBoolean"));
106 else if (((TdsBoolean)value).IsNull)
109 return this.value.CompareTo (((TdsBoolean)value).ByteValue);
112 public override bool Equals(object value)
114 if (!(value is TdsByte))
117 return (bool) (this == (TdsBoolean)value);
120 public static TdsBoolean Equals(TdsBoolean x, TdsBoolean y)
125 public override int GetHashCode()
130 public static TdsBoolean NotEquals(TdsBoolean x, TdsBoolean y)
135 public static TdsBoolean OnesComplement(TdsBoolean x)
140 public static TdsBoolean Or(TdsBoolean x, TdsBoolean y)
145 public static TdsBoolean Parse(string s)
147 return new TdsBoolean (Boolean.Parse (s));
150 public TdsByte ToTdsByte()
152 return new TdsByte (value);
155 // **************************************************
156 // Conversion from TdsBoolean to other TdsTypes
157 // **************************************************
159 public TdsDecimal ToTdsDecimal()
161 return ((TdsDecimal)this);
164 public TdsDouble ToTdsDouble()
166 return ((TdsDouble)this);
169 public TdsInt16 ToTdsInt16()
171 return ((TdsInt16)this);
174 public TdsInt32 ToTdsInt32()
176 return ((TdsInt32)this);
179 public TdsInt64 ToTdsInt64()
181 return ((TdsInt64)this);
184 public TdsMoney ToTdsMoney()
186 return ((TdsMoney)this);
189 public TdsSingle ToTdsSingle()
191 return ((TdsSingle)this);
194 public TdsString ToTdsString()
197 return new TdsString ("Null");
199 return new TdsString ("True");
201 return new TdsString ("False");
204 public override string ToString()
214 // Bitwise exclusive-OR (XOR)
215 public static TdsBoolean Xor(TdsBoolean x, TdsBoolean y)
220 // **************************************************
222 // **************************************************
225 public static TdsBoolean operator & (TdsBoolean x, TdsBoolean y)
227 return new TdsBoolean (x.Value & y.Value);
231 public static TdsBoolean operator | (TdsBoolean x, TdsBoolean y)
233 return new TdsBoolean (x.Value | y.Value);
237 // Compares two instances for equality
238 public static TdsBoolean operator == (TdsBoolean x, TdsBoolean y)
240 if (x.IsNull || y.IsNull)
241 return TdsBoolean.Null;
243 return new TdsBoolean (x.Value == y.Value);
246 // Bitwize exclusive-OR (XOR)
247 public static TdsBoolean operator ^ (TdsBoolean x, TdsBoolean y)
249 return new TdsBoolean (x.Value ^ y.Value);
252 // test Value of TdsBoolean to determine it is false.
253 public static bool operator false (TdsBoolean x)
259 public static TdsBoolean operator != (TdsBoolean x, TdsBoolean y)
261 if (x.IsNull || y.IsNull)
262 return TdsBoolean.Null;
264 return new TdsBoolean (x.Value != y.Value);
268 public static TdsBoolean operator ! (TdsBoolean x)
271 return TdsBoolean.Null;
273 return new TdsBoolean (!x.Value);
277 public static TdsBoolean operator ~ (TdsBoolean x)
279 return new TdsBoolean (~x.ByteValue);
282 // test to see if value is true
283 public static bool operator true (TdsBoolean x)
288 // ****************************************
290 // ****************************************
293 // TdsBoolean to Boolean
294 public static explicit operator bool (TdsBoolean x)
300 // TdsByte to TdsBoolean
301 public static explicit operator TdsBoolean (TdsByte x)
306 return new TdsBoolean ((int)x.Value);
309 // TdsDecimal to TdsBoolean
310 public static explicit operator TdsBoolean (TdsDecimal x)
315 return new TdsBoolean ((int)x.Value);
318 // TdsDouble to TdsBoolean
319 public static explicit operator TdsBoolean (TdsDouble x)
324 return new TdsBoolean ((int)x.Value);
327 // TdsInt16 to TdsBoolean
328 public static explicit operator TdsBoolean (TdsInt16 x)
333 return new TdsBoolean ((int)x.Value);
336 // TdsInt32 to TdsBoolean
337 public static explicit operator TdsBoolean (TdsInt32 x)
342 return new TdsBoolean (x.Value);
345 // TdsInt64 to TdsBoolean
346 public static explicit operator TdsBoolean (TdsInt64 x)
351 return new TdsBoolean ((int)x.Value);
354 // TdsMoney to TdsBoolean
355 public static explicit operator TdsBoolean (TdsMoney x)
360 return new TdsBoolean ((int)x.Value);
363 // TdsSingle to TdsBoolean
364 public static explicit operator TdsBoolean (TdsSingle x)
369 return new TdsBoolean ((int)x.Value);
372 // TdsString to TdsBoolean
373 public static explicit operator TdsBoolean (TdsString x)
375 return TdsBoolean.Parse (x.Value);
378 // Boolean to TdsBoolean
379 public static implicit operator TdsBoolean (bool x)
381 return new TdsBoolean (x);