示例#1
0
        static enumBase()
        {
            Dictionary <string, valueType> values = ((valueType[])System.Enum.GetValues(typeof(valueType))).getDictionary(value => value.ToString());

            enumValues   = values.getArray(value => value.Value);
            enumSearcher = fastCSharp.stateSearcher.charsSearcher.Create(values.getArray(value => value.Key), true).Reference;
        }
示例#2
0
        unsafe static searcher()
        {
            charTypePointer = unmanaged.GetStatic(65536, true).Reference;
            byte *start = charTypePointer.Byte, end = charTypePointer.Byte + 65536;

            for (char code = (char)0; start != end; ++start, ++code)
            {
                UnicodeCategory category = CharUnicodeInfo.GetUnicodeCategory(code);
                if (category == UnicodeCategory.LowercaseLetter || category == UnicodeCategory.UppercaseLetter ||
                    category == UnicodeCategory.TitlecaseLetter || category == UnicodeCategory.ModifierLetter)
                {
                    *start = (byte)charType.Letter;
                }
                else if (category == UnicodeCategory.DecimalDigitNumber ||
                         category == UnicodeCategory.LetterNumber || category == UnicodeCategory.OtherNumber)
                {
                    *start = (byte)charType.Number;
                }
                else if (category == UnicodeCategory.OtherLetter)
                {
                    *start = (byte)charType.OtherLetter;
                }
                else if (code == '&' || code == '.' || code == '+' || code == '#')
                {
                    *start = (byte)charType.Keep;
                }
            }
        }
示例#3
0
        static unsafe ping()
        {
            defaultSendData = unmanaged.GetStatic(packetSize - 12, true).Reference;
            byte *data = defaultSendData.Byte + (packetSize - 13);

            for (int value = packetSize - 12; value != 0; *data-- = (byte)('A' + --value))
            {
                ;
            }
        }
示例#4
0
        unsafe static sqlDbType()
        {
            #region SQL数据类型转C#类型集合
            toCSharpTypes = new Type[fastCSharp.Enum.GetMaxValue <SqlDbType>(-1) + 1];
            toCSharpTypes[(int)SqlDbType.BigInt]           = typeof(long);
            toCSharpTypes[(int)SqlDbType.Binary]           = typeof(byte[]);
            toCSharpTypes[(int)SqlDbType.Bit]              = typeof(bool);
            toCSharpTypes[(int)SqlDbType.Char]             = typeof(string);
            toCSharpTypes[(int)SqlDbType.DateTime]         = typeof(DateTime);
            toCSharpTypes[(int)SqlDbType.Decimal]          = typeof(decimal);
            toCSharpTypes[(int)SqlDbType.Float]            = typeof(double);
            toCSharpTypes[(int)SqlDbType.Image]            = typeof(byte[]);
            toCSharpTypes[(int)SqlDbType.Int]              = typeof(int);
            toCSharpTypes[(int)SqlDbType.Money]            = typeof(decimal);
            toCSharpTypes[(int)SqlDbType.NChar]            = typeof(string);
            toCSharpTypes[(int)SqlDbType.NText]            = typeof(string);
            toCSharpTypes[(int)SqlDbType.NVarChar]         = typeof(string);
            toCSharpTypes[(int)SqlDbType.Real]             = typeof(float);
            toCSharpTypes[(int)SqlDbType.UniqueIdentifier] = typeof(Guid);
            toCSharpTypes[(int)SqlDbType.SmallDateTime]    = typeof(DateTime);
            toCSharpTypes[(int)SqlDbType.SmallInt]         = typeof(short);
            toCSharpTypes[(int)SqlDbType.SmallMoney]       = typeof(decimal);
            toCSharpTypes[(int)SqlDbType.Text]             = typeof(string);
            toCSharpTypes[(int)SqlDbType.Timestamp]        = typeof(byte[]);
            toCSharpTypes[(int)SqlDbType.TinyInt]          = typeof(byte);
            toCSharpTypes[(int)SqlDbType.VarBinary]        = typeof(byte[]);
            toCSharpTypes[(int)SqlDbType.VarChar]          = typeof(string);
            toCSharpTypes[(int)SqlDbType.Variant]          = typeof(object);
            //CSharpType[(int)SqlDbType.Xml] = typeof();
            //CSharpType[(int)SqlDbType.Udt] = typeof();
            //CSharpType[(int)SqlDbType.Structured] = typeof();
            //CSharpType[(int)SqlDbType.Date] = typeof();
            //CSharpType[(int)SqlDbType.Time] = typeof();
            //CSharpType[(int)SqlDbType.DateTime2] = typeof();
            //CSharpType[(int)SqlDbType.DateTimeOffset] = typeof();
            #endregion

            #region C#类型转SQL数据类型集合
            formCSharpTypes = dictionary.CreateOnly <Type, SqlDbType>();
            formCSharpTypes.Add(typeof(bool), SqlDbType.Bit);
            formCSharpTypes.Add(typeof(byte), SqlDbType.TinyInt);
            formCSharpTypes.Add(typeof(sbyte), SqlDbType.TinyInt);
            formCSharpTypes.Add(typeof(short), SqlDbType.SmallInt);
            formCSharpTypes.Add(typeof(ushort), SqlDbType.SmallInt);
            formCSharpTypes.Add(typeof(int), SqlDbType.Int);
            formCSharpTypes.Add(typeof(uint), SqlDbType.Int);
            formCSharpTypes.Add(typeof(long), SqlDbType.BigInt);
            formCSharpTypes.Add(typeof(ulong), SqlDbType.BigInt);
            formCSharpTypes.Add(typeof(decimal), SqlDbType.Decimal);
            formCSharpTypes.Add(typeof(float), SqlDbType.Real);
            formCSharpTypes.Add(typeof(double), SqlDbType.Float);
            formCSharpTypes.Add(typeof(string), SqlDbType.NVarChar);
            formCSharpTypes.Add(typeof(DateTime), SqlDbType.DateTime);
            formCSharpTypes.Add(typeof(Guid), SqlDbType.UniqueIdentifier);
            formCSharpTypes.Add(typeof(byte[]), SqlDbType.VarBinary);
            #endregion

            MaxEnumValue = fastCSharp.Enum.GetMaxValue <SqlDbType>(-1) + 1;
            int       dataIndex = 0, mapSize = ((MaxEnumValue + 31) >> 5) << 2;
            pointer[] datas = unmanaged.GetStatic(true, mapSize, mapSize, MaxEnumValue * sizeof(int));
            stringTypeMap = new structReference <fixedMap.unsafer> {
                Value = new fixedMap(datas[dataIndex++]).Unsafer
            };
            textImageTypeMap = new structReference <fixedMap.unsafer> {
                Value = new fixedMap(datas[dataIndex++]).Unsafer
            };
            sizes = datas[dataIndex++].Reference;

            #region 字符串类型占位集合
            stringTypeMap.Value.Set((int)SqlDbType.Char);
            stringTypeMap.Value.Set((int)SqlDbType.NChar);
            stringTypeMap.Value.Set((int)SqlDbType.VarChar);
            stringTypeMap.Value.Set((int)SqlDbType.NVarChar);
            stringTypeMap.Value.Set((int)SqlDbType.Text);
            stringTypeMap.Value.Set((int)SqlDbType.NText);
            #endregion

            #region 文本类型占位集合
            textImageTypeMap.Value.Set((int)SqlDbType.Text);
            textImageTypeMap.Value.Set((int)SqlDbType.NText);
            textImageTypeMap.Value.Set((int)SqlDbType.Image);
            #endregion

            #region 类型默认长度
            int *sizeData = sizes.Int;
            for (int i = 0; i != MaxEnumValue; i++)
            {
                sizeData[i] = UnknownSize;
            }
            sizeData[(int)SqlDbType.BigInt] = sizeof(long);
            sizeData[(int)SqlDbType.Binary] = 8000;
            sizeData[(int)SqlDbType.Bit]    = sizeof(bool);
            sizeData[(int)SqlDbType.Char]   = 8000;
            //TypeSize[(int)SqlDbType.Date] = sizeof(long);
            sizeData[(int)SqlDbType.DateTime] = sizeof(long);
            //TypeSize[(int)SqlDbType.DateTime2] = sizeof(long);
            //TypeSize[(int)SqlDbType.DateTimeOffset] = sizeof(long);
            sizeData[(int)SqlDbType.Decimal] = sizeof(decimal);
            sizeData[(int)SqlDbType.Float]   = sizeof(double);
            sizeData[(int)SqlDbType.Image]   = int.MaxValue;
            sizeData[(int)SqlDbType.Int]     = sizeof(int);
            sizeData[(int)SqlDbType.Money]   = sizeof(decimal);
            //TypeSize[(int)SqlDbType.NChar] = MaxStringSize;
            sizeData[(int)SqlDbType.NText] = int.MaxValue;
            //TypeSize[(int)SqlDbType.NVarChar] = MaxStringSize;
            sizeData[(int)SqlDbType.Real]             = sizeof(float);
            sizeData[(int)SqlDbType.UniqueIdentifier] = 8;
            sizeData[(int)SqlDbType.SmallDateTime]    = sizeof(long);
            sizeData[(int)SqlDbType.SmallInt]         = sizeof(short);
            sizeData[(int)SqlDbType.SmallMoney]       = sizeof(decimal);
            sizeData[(int)SqlDbType.Text]             = int.MaxValue;
            //TypeSize[(int)SqlDbType.Time] = 8;
            sizeData[(int)SqlDbType.Timestamp] = 8;
            sizeData[(int)SqlDbType.TinyInt]   = sizeof(byte);
            sizeData[(int)SqlDbType.VarBinary] = 8000;
            sizeData[(int)SqlDbType.VarChar]   = 8000;
            //TypeSize[(int)SqlDbType.Xml] = -1;
            #endregion
        }