public static Type GetNumericTypeFromDataTypeCode(DataAggregate.DataTypeCode typeCode)
        {
            switch (typeCode)
            {
            case DataAggregate.DataTypeCode.Int32:
                return(typeof(int));

            case DataAggregate.DataTypeCode.Int64:
                return(typeof(long));

            case DataAggregate.DataTypeCode.UInt32:
                return(typeof(uint));

            case DataAggregate.DataTypeCode.UInt64:
                return(typeof(ulong));

            case DataAggregate.DataTypeCode.Single:
                return(typeof(float));

            case DataAggregate.DataTypeCode.Double:
                return(typeof(double));

            case DataAggregate.DataTypeCode.Decimal:
                return(typeof(decimal));

            case DataAggregate.DataTypeCode.Int16:
                return(typeof(short));

            case DataAggregate.DataTypeCode.UInt16:
                return(typeof(ushort));

            default:
                return(null);
            }
        }
 internal static bool IsNumeric(DataAggregate.DataTypeCode typeCode)
 {
     if ((uint)(typeCode - 4) <= 8u || (uint)(typeCode - 14) <= 2u)
     {
         return(true);
     }
     return(false);
 }
 internal static bool IsUnsigned(DataAggregate.DataTypeCode typeCode)
 {
     if ((uint)(typeCode - 7) <= 3u)
     {
         return(true);
     }
     return(false);
 }
 internal static bool Is64BitOrLess(DataAggregate.DataTypeCode typeCode)
 {
     if ((uint)(typeCode - 4) <= 7u)
     {
         return(true);
     }
     return(false);
 }
 internal static bool IsSigned(DataAggregate.DataTypeCode typeCode)
 {
     if ((uint)(typeCode - 4) <= 2u || typeCode == DataAggregate.DataTypeCode.SByte)
     {
         return(true);
     }
     return(false);
 }
 internal static bool IsFloat(DataAggregate.DataTypeCode typeCode)
 {
     if ((uint)(typeCode - 14) <= 1u)
     {
         return(true);
     }
     return(false);
 }
 public static bool IsSpatial(DataAggregate.DataTypeCode typeCode)
 {
     if (typeCode != DataAggregate.DataTypeCode.SqlGeography)
     {
         return(typeCode == DataAggregate.DataTypeCode.SqlGeometry);
     }
     return(true);
 }
        public static bool IsFloat(DataAggregate.DataTypeCode typeCode)
        {
            switch (typeCode)
            {
            case DataAggregate.DataTypeCode.Single:
            case DataAggregate.DataTypeCode.Double:
                return(true);

            default:
                return(false);
            }
        }
        public static bool IsUnsigned(DataAggregate.DataTypeCode typeCode)
        {
            switch (typeCode)
            {
            case DataAggregate.DataTypeCode.UInt16:
            case DataAggregate.DataTypeCode.UInt32:
            case DataAggregate.DataTypeCode.UInt64:
            case DataAggregate.DataTypeCode.Byte:
                return(true);

            default:
                return(false);
            }
        }
        public static int ConvertToInt32(DataAggregate.DataTypeCode typeCode, object data, out bool valid)
        {
            valid = true;
            switch (typeCode)
            {
            case DataAggregate.DataTypeCode.Int16:
                return((short)data);

            case DataAggregate.DataTypeCode.Int32:
                return((int)data);

            case DataAggregate.DataTypeCode.UInt16:
                return((ushort)data);

            case DataAggregate.DataTypeCode.UInt32:
                if ((uint)data > 2147483647)
                {
                    break;
                }
                return((int)data);

            case DataAggregate.DataTypeCode.UInt64:
                if ((ulong)data > 2147483647)
                {
                    break;
                }
                return((int)data);

            case DataAggregate.DataTypeCode.Int64:
                if ((long)data > 2147483647)
                {
                    break;
                }
                if ((long)data < -2147483648)
                {
                    break;
                }
                return((int)data);

            case DataAggregate.DataTypeCode.Byte:
                return((byte)data);

            case DataAggregate.DataTypeCode.SByte:
                return((sbyte)data);
            }
            valid = false;
            return(0);
        }
 internal static DataAggregate.DataTypeCode CommonNumericDenominator(DataAggregate.DataTypeCode x, DataAggregate.DataTypeCode y)
 {
     if (!IsNumeric(x) || !IsNumeric(y))
     {
         return(DataAggregate.DataTypeCode.Null);
     }
     if (x == y)
     {
         return(x);
     }
     if (IsSigned(x) && IsSigned(y))
     {
         if (DataAggregate.DataTypeCode.Int64 == x || DataAggregate.DataTypeCode.Int64 == y)
         {
             return(DataAggregate.DataTypeCode.Int64);
         }
         return(DataAggregate.DataTypeCode.Int32);
     }
     if (IsUnsigned(x) && IsUnsigned(y))
     {
         if (DataAggregate.DataTypeCode.UInt64 == x || DataAggregate.DataTypeCode.UInt64 == y)
         {
             return(DataAggregate.DataTypeCode.UInt64);
         }
         return(DataAggregate.DataTypeCode.UInt32);
     }
     if (IsFloat(x) && IsFloat(y))
     {
         return(DataAggregate.DataTypeCode.Double);
     }
     if (IsSigned(x) && IsUnsigned(y))
     {
         return(CommonDataTypeSignedUnsigned(x, y));
     }
     if (IsUnsigned(x) && IsSigned(y))
     {
         return(CommonDataTypeSignedUnsigned(y, x));
     }
     if ((Is32BitOrLess(x) && IsFloat(y)) || (Is32BitOrLess(y) && IsFloat(x)))
     {
         return(DataAggregate.DataTypeCode.Double);
     }
     if ((Is64BitOrLess(x) && DataAggregate.DataTypeCode.Decimal == y) || (Is64BitOrLess(y) && DataAggregate.DataTypeCode.Decimal == x))
     {
         return(DataAggregate.DataTypeCode.Decimal);
     }
     return(DataAggregate.DataTypeCode.Null);
 }
        public static bool Is32BitOrLess(DataAggregate.DataTypeCode typeCode)
        {
            switch (typeCode)
            {
            case DataAggregate.DataTypeCode.Int16:
            case DataAggregate.DataTypeCode.Int32:
            case DataAggregate.DataTypeCode.UInt16:
            case DataAggregate.DataTypeCode.UInt32:
            case DataAggregate.DataTypeCode.Byte:
            case DataAggregate.DataTypeCode.SByte:
                return(true);

            default:
                return(false);
            }
        }
 private static DataAggregate.DataTypeCode CommonDataTypeSignedUnsigned(DataAggregate.DataTypeCode signed, DataAggregate.DataTypeCode unsigned)
 {
     Global.Tracer.Assert(DataTypeUtility.IsSigned(signed) && DataTypeUtility.IsUnsigned(unsigned), "(IsSigned(signed) && IsUnsigned(unsigned))");
     if (DataAggregate.DataTypeCode.UInt64 == unsigned)
     {
         return(DataAggregate.DataTypeCode.Null);
     }
     if (DataAggregate.DataTypeCode.UInt32 == unsigned)
     {
         return(DataAggregate.DataTypeCode.Int64);
     }
     if (DataAggregate.DataTypeCode.Int64 == signed)
     {
         return(DataAggregate.DataTypeCode.Int64);
     }
     return(DataAggregate.DataTypeCode.Int32);
 }
        public static double ConvertToDouble(DataAggregate.DataTypeCode typeCode, object data)
        {
            switch (typeCode)
            {
            case DataAggregate.DataTypeCode.Double:
                return((double)data);

            case DataAggregate.DataTypeCode.Int16:
                return((double)(short)data);

            case DataAggregate.DataTypeCode.Int32:
                return((double)(int)data);

            case DataAggregate.DataTypeCode.Int64:
                return((double)(long)data);

            case DataAggregate.DataTypeCode.UInt16:
                return((double)(int)(ushort)data);

            case DataAggregate.DataTypeCode.UInt32:
                return((double)(uint)data);

            case DataAggregate.DataTypeCode.UInt64:
                return((double)(ulong)data);

            case DataAggregate.DataTypeCode.Byte:
                return((double)(int)(byte)data);

            case DataAggregate.DataTypeCode.SByte:
                return((double)(sbyte)data);

            case DataAggregate.DataTypeCode.TimeSpan:
                return((double)((TimeSpan)data).Ticks);

            case DataAggregate.DataTypeCode.Single:
                return((double)(float)data);

            case DataAggregate.DataTypeCode.Decimal:
                return(Convert.ToDouble((decimal)data));

            default:
                Global.Tracer.Assert(false);
                throw new ReportProcessingException(ErrorCode.rsInvalidOperation);
            }
        }
        internal static int ConvertToInt32(DataAggregate.DataTypeCode typeCode, object data, out bool valid)
        {
            valid = true;
            switch (typeCode)
            {
            case DataAggregate.DataTypeCode.Int16:
                return((short)data);

            case DataAggregate.DataTypeCode.Int32:
                return((int)data);

            case DataAggregate.DataTypeCode.UInt16:
                return((ushort)data);

            case DataAggregate.DataTypeCode.UInt32:
                if ((uint)data <= int.MaxValue)
                {
                    return((int)data);
                }
                break;

            case DataAggregate.DataTypeCode.UInt64:
                if ((ulong)data <= int.MaxValue)
                {
                    return((int)data);
                }
                break;

            case DataAggregate.DataTypeCode.Int64:
                if ((long)data <= int.MaxValue && (long)data >= int.MinValue)
                {
                    return((int)data);
                }
                break;

            case DataAggregate.DataTypeCode.Byte:
                return((byte)data);

            case DataAggregate.DataTypeCode.SByte:
                return((sbyte)data);
            }
            valid = false;
            return(0);
        }
        public static bool IsNumericLessThanZero(object value, DataAggregate.DataTypeCode dataType)
        {
            switch (dataType)
            {
            case DataAggregate.DataTypeCode.Int32:
                return((int)value < 0);

            case DataAggregate.DataTypeCode.Double:
                return((double)value < 0.0);

            case DataAggregate.DataTypeCode.Single:
                return((float)value < 0.0);

            case DataAggregate.DataTypeCode.Decimal:
                return((decimal)value < 0m);

            case DataAggregate.DataTypeCode.Int16:
                return((short)value < 0);

            case DataAggregate.DataTypeCode.Int64:
                return((long)value < 0);

            case DataAggregate.DataTypeCode.UInt16:
                return((ushort)value < 0);

            case DataAggregate.DataTypeCode.UInt32:
                return((uint)value < 0);

            case DataAggregate.DataTypeCode.UInt64:
                return((ulong)value < 0);

            case DataAggregate.DataTypeCode.Byte:
                return((byte)value < 0);

            case DataAggregate.DataTypeCode.SByte:
                return((sbyte)value < 0);

            default:
                return(false);
            }
        }
        public static bool IsNumeric(DataAggregate.DataTypeCode typeCode)
        {
            switch (typeCode)
            {
            case DataAggregate.DataTypeCode.Int16:
            case DataAggregate.DataTypeCode.Int32:
            case DataAggregate.DataTypeCode.Int64:
            case DataAggregate.DataTypeCode.UInt16:
            case DataAggregate.DataTypeCode.UInt32:
            case DataAggregate.DataTypeCode.UInt64:
            case DataAggregate.DataTypeCode.Byte:
            case DataAggregate.DataTypeCode.SByte:
            case DataAggregate.DataTypeCode.TimeSpan:
            case DataAggregate.DataTypeCode.Single:
            case DataAggregate.DataTypeCode.Double:
            case DataAggregate.DataTypeCode.Decimal:
                return(true);

            default:
                return(false);
            }
        }
        public static DataAggregate.DataTypeCode CommonNumericDenominator(DataAggregate.DataTypeCode x, DataAggregate.DataTypeCode y)
        {
            if (DataTypeUtility.IsNumeric(x) && DataTypeUtility.IsNumeric(y))
            {
                if (x == y)
                {
                    return(x);
                }
                if (DataTypeUtility.IsSigned(x) && DataTypeUtility.IsSigned(y))
                {
                    if (DataAggregate.DataTypeCode.Int64 != x && DataAggregate.DataTypeCode.Int64 != y)
                    {
                        return(DataAggregate.DataTypeCode.Int32);
                    }
                    return(DataAggregate.DataTypeCode.Int64);
                }
                if (DataTypeUtility.IsUnsigned(x) && DataTypeUtility.IsUnsigned(y))
                {
                    if (DataAggregate.DataTypeCode.UInt64 != x && DataAggregate.DataTypeCode.UInt64 != y)
                    {
                        return(DataAggregate.DataTypeCode.UInt32);
                    }
                    return(DataAggregate.DataTypeCode.UInt64);
                }
                if (DataTypeUtility.IsFloat(x) && DataTypeUtility.IsFloat(y))
                {
                    return(DataAggregate.DataTypeCode.Double);
                }
                if (DataTypeUtility.IsSigned(x) && DataTypeUtility.IsUnsigned(y))
                {
                    return(DataTypeUtility.CommonDataTypeSignedUnsigned(x, y));
                }
                if (DataTypeUtility.IsUnsigned(x) && DataTypeUtility.IsSigned(y))
                {
                    return(DataTypeUtility.CommonDataTypeSignedUnsigned(y, x));
                }
                if (DataTypeUtility.Is32BitOrLess(x) && DataTypeUtility.IsFloat(y))
                {
                    goto IL_00b6;
                }
                if (DataTypeUtility.Is32BitOrLess(y) && DataTypeUtility.IsFloat(x))
                {
                    goto IL_00b6;
                }
                if (DataTypeUtility.Is64BitOrLess(x) && DataAggregate.DataTypeCode.Decimal == y)
                {
                    goto IL_00d3;
                }
                if (DataTypeUtility.Is64BitOrLess(y) && DataAggregate.DataTypeCode.Decimal == x)
                {
                    goto IL_00d3;
                }
                return(DataAggregate.DataTypeCode.Null);
            }
            return(DataAggregate.DataTypeCode.Null);

IL_00b6:
            return(DataAggregate.DataTypeCode.Double);

IL_00d3:
            return(DataAggregate.DataTypeCode.Decimal);
        }