// System.Data.SqlTypes.SqlByte // // Authors: // Konstantin Triger // Boris Kirzner // // (C) 2005 Mainsoft Corporation (http://www.mainsoft.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. // namespace System.Data.SqlTypes { using System; using System.Data; /** * */ public struct SqlByte : INullable, IComparable { private byte _value; // = -1; private bool _isNull; public static readonly SqlByte MaxValue = new SqlByte((byte)0xFF); public static readonly SqlByte MinValue = new SqlByte((byte)0); public static readonly SqlByte Zero = new SqlByte((byte)0); public static readonly SqlByte Null = new SqlByte(true); private SqlByte(bool isNull) { _isNull = isNull; _value = 0; } /** * Initializes a new instance of the SqlByte instance using the specified byte value. * @param value A byte value to be stored in the Value property of the new SqlByte instance. */ public SqlByte(byte value) { _value = value; _isNull = false; } public override int GetHashCode() { if (IsNull) return 0; return _value; } /** * Indicates whether or not Value is null. * @return true if Value is null, otherwise false. */ public bool IsNull { get { return _isNull; } } /** * Gets the value of the SqlByte instance. * @return the value of this instance */ public byte Value { get { if (IsNull) { throw new SqlNullValueException(); } return _value; } } /** * Computes the sum of the two specified SqlByte instances. * @param x A SqlByte instance. * @param y A SqlByte instance. * @return A SqlByte instance whose Value property contains the results of the addition. */ public static SqlByte Add(SqlByte x, SqlByte y) { if (x.IsNull || y.IsNull) return SqlByte.Null; int res = x._value + y._value; if (res > 255) throw new OverflowException("Arithmetic Overflow"); return new SqlByte((byte)res); } /** * Computes the bitwise AND of its SqlByte operands. * @param x A SqlByte instance. * @param y A SqlByte instance. * @return The results of the bitwise AND operation. */ public static SqlByte BitwiseAnd(SqlByte x, SqlByte y) { if (x.IsNull || y.IsNull) return SqlByte.Null; int res = x._value & y._value; return new SqlByte((byte)res); } /** * Computes the bitwise OR of its SqlByte operands. * @param x A SqlByte instance. * @param y A SqlByte instance. * @return The results of the bitwise OR operation. */ public static SqlByte BitwiseOr(SqlByte x, SqlByte y) { if (x.IsNull || y.IsNull) return SqlByte.Null; int res = x._value | y._value; return new SqlByte((byte)res); } /** * Compares this instance to the supplied object and returns an indication of their relative values. * @param obj The object to compare. * @return A signed number indicating the relative values of the instance and the object. * Less than zero This instance is less than object. * Zero This instance is the same as object. * Greater than zero This instance is greater than object -or- * object is a null reference. */ public int CompareTo(Object obj) { if (obj == null) return 1; if ((obj is SqlByte) == false) { throw new ArgumentException("Wrong value type " + obj.GetType().Name + "in SqlByte.CompareTo"); } SqlByte val = (SqlByte)obj; if (IsNull) { if (val.IsNull) return 0; return -1; } else if (val.IsNull) return 1; if (_value > val._value) return 1; if (_value < val._value) return -1; return 0; } /** * The division operator divides the first SqlByte operand by the second. * @param x A SqlByte instance. * @param y A SqlByte instance. * @return A SqlByte instance containing the results of the division operation. * If one of the parameters is null or null value - return SqlDouble.Null. */ public static SqlByte Divide(SqlByte x, SqlByte y) { if (x.IsNull || y.IsNull) return SqlByte.Null; if (y._value == 0) throw new DivideByZeroException("Divide by zero error encountered."); int val = x._value / y._value; return new SqlByte((byte)val); } public override bool Equals(Object obj) { if (obj == null) return false; if (obj is SqlByte) { if (((SqlByte)obj)._value == this._value) return true; } return false; } /** * Performs a logical comparison on two instances of SqlByte to determine if they are equal. * @param x A SqlByte instance. * @param y A SqlByte instance. * @return true if the two values are equal, otherwise false. * If one of the parameters is null or null value return SqlBoolean.Null. */ public static SqlBoolean Equals(SqlByte x, SqlByte y) { if (x.IsNull || y.IsNull) return SqlBoolean.Null; if (x._value == y._value) return SqlBoolean.True; return SqlBoolean.False; } /** * Compares two instances of SqlByte to determine if the first is greater than the second. * @param x A SqlByte instance * @param y A SqlByte instance * @return A SqlBoolean that is True if the first instance is greater than the second instance, otherwise False. * If either instance of SqlByte is null, the Value of the SqlBoolean will be Null. */ public static SqlBoolean GreaterThan(SqlByte x, SqlByte y) { if (x.IsNull || y.IsNull) return SqlBoolean.Null; if (x._value > y._value) return SqlBoolean.True; return SqlBoolean.False; } /** * Compares two instances of SqlByte to determine if the first is greater than or equal to the second. * @param x A SqlByte instance * @param y A SqlByte instance * @return A SqlBoolean that is True if the first instance is greaater than or equal to the second instance, otherwise False. * If either instance of SqlByte is null, the Value of the SqlBoolean will be Null. */ public static SqlBoolean GreaterThanOrEqual(SqlByte x, SqlByte y) { if (x.IsNull || y.IsNull) return SqlBoolean.Null; if (x._value >= y._value) return SqlBoolean.True; return SqlBoolean.False; } /** * Compares two instances of SqlByte to determine if the first is less than the second. * @param x A SqlByte instance * @param y A SqlByte instance * @return A SqlBoolean that is True if the first instance is less than the second instance, otherwise False. * If either instance of SqlByte is null, the Value of the SqlBoolean will be Null. */ public static SqlBoolean LessThan(SqlByte x, SqlByte y) { if (x.IsNull || y.IsNull) return SqlBoolean.Null; if (x._value < y._value) return SqlBoolean.True; return SqlBoolean.False; } /** * Compares two instances of SqlByte to determine if the first is less than or equal to the second. * @param x A SqlByte instance * @param y A SqlByte instance * @return A SqlBoolean that is True if the first instance is less than or equal to the second instance, otherwise False. * If either instance of SqlByte is null, the Value of the SqlBoolean will be Null. */ public static SqlBoolean LessThanOrEqual(SqlByte x, SqlByte y) { if (x.IsNull || y.IsNull) return SqlBoolean.Null; if (x._value <= y._value) return SqlBoolean.True; return SqlBoolean.False; } /** * Computes the remainder after dividing its first SqlByte operand by its second. * @param x A SqlByte instance * @param y A SqlByte instance * @return A SqlByte instance whose Value contains the remainder. */ public static SqlByte Mod(SqlByte x, SqlByte y) { if (x.IsNull || y.IsNull) return SqlByte.Null; if (y._value == 0) throw new DivideByZeroException("Divide by zero error encountered."); int mod = x._value % y._value; return new SqlByte((byte)mod); } /** * The multiplication operator computes the product of the two SqlByte operands. * @param x A SqlByte instance * @param y A SqlByte instance * @return The product of the two SqlByte operands. */ public static SqlByte Multiply(SqlByte x, SqlByte y) { if (x.IsNull || y.IsNull) return SqlByte.Null; int res = x._value * y._value; if (res > 255) throw new OverflowException("Arithmetic Overflow."); return new SqlByte((byte)res); } /** * Compares two instances of SqlByte to determine if they are equal. * @param x A SqlByte instance * @param y A SqlByte instance * @return A SqlBoolean that is True if the two instances are not equal or False if the two instances are equal. * If either instance of SqlByte is null, the Value of the SqlBoolean will be Null. */ public static SqlBoolean NotEquals(SqlByte x, SqlByte y) { if (x.IsNull || y.IsNull) return SqlBoolean.Null; if (x._value != y._value) return SqlBoolean.True; return SqlBoolean.False; } /** * The ones complement operator performs a bitwise one's complement operation on its SqlByte operand. * @param x A SqlByte instance * @return A SqlByte instance whose Value property contains the ones complement of the SqlByte parameter. */ public static SqlByte OnesComplement(SqlByte x) { if (x.IsNull) return SqlByte.Null; int res = x._value ^ 0xFF; /*@TODO Ma ze ??? */ return new SqlByte((byte)res); } /** * Converts the String representation of a number to its byte equivalent. * @param s The String to be parsed. * @return A SqlByte containing the value represented by the String. */ public static SqlByte Parse(String s) { byte val = byte.Parse(s); return new SqlByte(val); } /** * The subtraction operator the second SqlByte operand from the first. * @param x A SqlByte instance * @param y A SqlByte instance * @return The results of the subtraction operation. */ public static SqlByte Subtract(SqlByte x, SqlByte y) { if (x.IsNull || y.IsNull) return SqlByte.Null; int res = x._value - y._value; if (res < 0) throw new OverflowException("Arithmetic Overflow."); return new SqlByte((byte)res); } /** * Converts this SqlByte instance to SqlBoolean. * @return A SqlBoolean instance whose Value will be True if the SqlByte instance's Value is non-zero, * False if the SqlByte is zero * and Null if the SqlByte instance is Null. */ public SqlBoolean ToSqlBoolean() { if (IsNull) return SqlBoolean.Null; return new SqlBoolean(Value); } /** * Converts this SqlByte instance to SqlDecimal. * @return A SqlDecimal instance whose Value equals the Value of this SqlByte instance. */ public SqlDecimal ToSqlDecimal() { if (IsNull) return SqlDecimal.Null; return new SqlDecimal(Value); } /** * Converts this SqlByte instance to SqlDouble. * @return A SqlDouble instance whose Value equals the Value of this SqlByte instance. */ public SqlDouble ToSqlDouble() { if (IsNull) return SqlDouble.Null; return new SqlDouble(Value); } /** * Converts this SqlByte instance to SqlSingle. * @return A SqlSingle instance whose Value equals the Value of this SqlByte instance. */ public SqlSingle ToSqlSingle() { if (IsNull) return SqlSingle.Null; return new SqlSingle(Value); } /** * Converts this SqlByte structure to SqlInt32. * @return A SqlInt32 structure whose Value equals the Value of this SqlByte structure. */ public SqlInt32 ToSqlInt32() { if (IsNull) return SqlInt32.Null; return new SqlInt32(Value); } /** * Converts this SqlByte structure to SqlInt32. * @return A SqlInt32 structure whose Value equals the Value of this SqlByte structure. */ public SqlInt64 ToSqlInt64() { if (IsNull) return SqlInt64.Null; return new SqlInt64(Value); } /** * Converts this SqlByte structure to SqlInt16. * @return A SqlInt16 structure whose Value equals the Value of this SqlByte structure. */ public SqlInt16 ToSqlInt16() { if (IsNull) return SqlInt16.Null; return new SqlInt16(Value); } /** * Converts this SqlByte instance to SqlDecimal. * @return A SqlDecimal instance whose Value equals the Value of this SqlByte instance. */ public SqlMoney ToSqlMoney() { if (IsNull) return SqlMoney.Null; return new SqlMoney(Value); } /** * Converts this SqlByte structure to SqlString. * @return A SqlString structure whose value is a string representing the date and time contained in this SqlByte structure. */ public SqlString ToSqlString() { if (IsNull) return SqlString.Null; return new SqlString(_value.ToString()); } /** * Performs a bitwise exclusive-OR operation on the supplied parameters. * @param x A SqlByte instance * @param y A SqlByte instance * @return The results of the XOR operation. */ public static SqlByte Xor(SqlByte x, SqlByte y) { if (x.IsNull || y.IsNull) return SqlByte.Null; int res = x._value ^ y._value; return new SqlByte((byte)res); } public override String ToString() { if (IsNull) return "null"; return _value.ToString(); } public static SqlByte op_Implicit(byte x) { return new SqlByte(x); } public static int op_Explicit(SqlByte x) { return x.Value; } public static SqlByte op_OnesComplement(SqlByte x) { return OnesComplement(x); } public static SqlByte op_Addition(SqlByte x, SqlByte y) { return Add(x, y); } public static SqlByte op_Subtraction(SqlByte x, SqlByte y) { return Subtract(x, y); } public static SqlByte op_Multiply(SqlByte x, SqlByte y) { return Multiply(x, y); } public static SqlByte op_Division(SqlByte x, SqlByte y) { return Divide(x, y); } public static SqlByte op_Modulus(SqlByte x, SqlByte y) { return Mod(x, y); } public static SqlByte op_BitwiseAnd(SqlByte x, SqlByte y) { return BitwiseAnd(x, y); } public static SqlByte op_BitwiseOr(SqlByte x, SqlByte y) { return BitwiseOr(x, y); } public static SqlByte op_ExclusiveOr(SqlByte x, SqlByte y) { return Xor(x, y); } public static SqlByte op_Explicit(SqlBoolean x) { if(x.IsNull) return SqlByte.Null; return new SqlByte((byte)x.ByteValue); } public static SqlByte op_Explicit(SqlMoney x) { if(x.IsNull) return SqlByte.Null; int val = x.ToSqlInt32().Value; if (val < 0 || val > 255) throw new OverflowException("Arithmetic Overflow."); return new SqlByte((byte)val); } public static SqlByte op_Explicit(SqlInt16 x) { if(x.IsNull) return SqlByte.Null; short val = x.Value; if (val < 0 || val > 255) throw new OverflowException("Arithmetic Overflow."); return new SqlByte((byte)val); } public static SqlByte op_Explicit(SqlInt32 x) { if(x.IsNull) return SqlByte.Null; int val = x.Value; if (val < 0 || val > 255) throw new OverflowException("Arithmetic Overflow."); return new SqlByte((byte)val); } public static SqlByte op_Explicit(SqlInt64 x) { if(x.IsNull) return SqlByte.Null; long val = x.Value; if (val < 0 || val > 255) throw new OverflowException("Arithmetic Overflow."); return new SqlByte((byte)val); } public static SqlByte op_Explicit(SqlSingle x) { if(x.IsNull) return SqlByte.Null; float val = x.Value; if (val < 0 || val > 255) throw new OverflowException("Arithmetic Overflow."); return new SqlByte((byte)val); } public static SqlByte op_Explicit(SqlDouble x) { if(x.IsNull) return SqlByte.Null; double val = x.Value; if (val < 0 || val > 255) throw new OverflowException("Arithmetic Overflow."); return new SqlByte((byte)val); } public static SqlByte op_Explicit(SqlDecimal x) { if(x.IsNull) return SqlByte.Null; double val = x.ToDouble(); if (val < 0 || val > 255) throw new OverflowException("Arithmetic Overflow."); return new SqlByte((byte)val); } public static SqlByte op_Explicit(SqlString x) { if (x.IsNull) return SqlByte.Null; return Parse(x.Value); } public static SqlBoolean op_Equality(SqlByte x, SqlByte y) { return Equals(x, y); } public static SqlBoolean op_Inequality(SqlByte x, SqlByte y) { return NotEquals(x, y); } public static SqlBoolean op_LessThan(SqlByte x, SqlByte y) { return LessThan(x, y); } public static SqlBoolean op_GreaterThan(SqlByte x, SqlByte y) { return GreaterThan(x, y); } public static SqlBoolean op_LessThanOrEqual(SqlByte x, SqlByte y) { return LessThanOrEqual(x, y); } public static SqlBoolean op_GreaterThanOrEqual(SqlByte x, SqlByte y) { return GreaterThanOrEqual(x, y); } public static void main(String[] args) { SqlByte b = new SqlByte((byte)1); Console.WriteLine(b); Console.WriteLine(OnesComplement(b)); } }}