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; }
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; } } }
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)) { ; } }
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 }