Exemple #1
0
 /// <summary>
 /// 数字转换成字符串
 /// </summary>
 /// <param name="value">数字值</param>
 /// <param name="jsonStream">JSON输出流</param>
 public unsafe static void ToString(sbyte value, charStream jsonStream)
 {
     if (value == 0)
     {
         jsonStream.Write('0');
     }
     else
     {
         if (value < 0)
         {
             char *chars   = jsonStream.GetPrepLengthCurrent(5);
             uint  value32 = (uint)-(int)value;
             *(int *)chars = '-' + ('0' << 16);
             *(chars + 2)  = 'x';
             *(chars + 3)  = (char)((value32 >> 4) + '0');
             *(chars + 4)  = (char)number.ToHex(value32 & 15);
             jsonStream.UnsafeAddLength(5);
         }
         else
         {
             char *chars   = jsonStream.GetPrepLengthCurrent(4);
             uint  value32 = (uint)(int)value;
             *(int *)chars = '0' + ('x' << 16);
             *(chars + 2)  = (char)((value32 >> 4) + '0');
             *(chars + 3)  = (char)number.ToHex(value32 & 15);
             jsonStream.UnsafeAddLength(4);
         }
     }
 }
Exemple #2
0
 /// <summary>
 /// 数字转换成字符串
 /// </summary>
 /// <param name="value"></param>
 /// <param name="jsonStream"></param>
 private unsafe static void toString(ulong value, charStream jsonStream)
 {
     if (value <= uint.MaxValue)
     {
         ToString((uint)value, jsonStream);
     }
     else
     {
         char *chars = jsonStream.GetPrepLengthCurrent(18), next;
         uint  value32 = (uint)(value >> 32);
         *(int *)chars = '0' + ('x' << 16);
         if (value32 >= 0x10000)
         {
             next = getToHex(value32 >> 16, chars + 2);
             toHex16(value32 & 0xffff, next);
             next += 4;
         }
         else
         {
             next = getToHex(value32, chars + 2);
         }
         toHex16((value32 = (uint)value) >> 16, next);
         toHex16(value32 & 0xffff, next + 4);
         jsonStream.UnsafeAddLength((int)(next - chars) + 8);
     }
 }
Exemple #3
0
        /// <summary>
        /// 字符
        /// </summary>
        /// <param name="value">字符</param>
        /// <param name="jsonStream">JSON输出流</param>
        public unsafe static void ToString(char value, charStream jsonStream)
        {
            char *chars = jsonStream.GetPrepLengthCurrent(3);

            *chars = Quote;
            *(chars + 1) = value;
            *(chars + 2) = Quote;
            jsonStream.UnsafeAddLength(3);
        }
Exemple #4
0
        /// <summary>
        /// Guid转换成字符串
        /// </summary>
        /// <param name="value">Guid</param>
        /// <param name="jsonStream">JSON输出流</param>
        public unsafe static void ToString(ref Guid value, charStream jsonStream)
        {
            byte *data = (byte *)jsonStream.GetPrepLengthCurrent(38);

            *(char *)data = fastCSharp.web.ajax.Quote;
            new guid {
                Value = value
            }.ToString((char *)(data + sizeof(char)));
            *(char *)(data + sizeof(char) * 37) = fastCSharp.web.ajax.Quote;
            jsonStream.UnsafeAddLength(38);
        }
Exemple #5
0
        /// <summary>
        /// 数字转换成字符串
        /// </summary>
        /// <param name="value">数字值</param>
        /// <param name="jsonStream">JSON输出流</param>
        public unsafe static void ToString(ushort value, charStream jsonStream)
        {
            char *chars;

            if (value < 10000)
            {
                if (value < 10)
                {
                    jsonStream.Write((char)(value + '0'));
                    return;
                }
                int div10 = (value * (int)fastCSharp.number.Div10_16Mul) >> fastCSharp.number.Div10_16Shift;
                if (div10 < 10)
                {
                    *(chars = jsonStream.GetPrepLengthCurrent(2)) = (char)(div10 + '0');
                    *(chars + 1) = (char)((value - div10 * 10) + '0');
                    jsonStream.UnsafeAddLength(2);
                    return;
                }
                int div100 = (div10 * (int)fastCSharp.number.Div10_16Mul) >> fastCSharp.number.Div10_16Shift;
                if (div100 < 10)
                {
                    *(chars = jsonStream.GetPrepLengthCurrent(3)) = (char)(div100 + '0');
                    *(chars + 1) = (char)((div10 - div100 * 10) + '0');
                    *(chars + 2) = (char)((value - div10 * 10) + '0');
                    jsonStream.UnsafeAddLength(3);
                    return;
                }
                int div1000 = (div100 * (int)fastCSharp.number.Div10_16Mul) >> fastCSharp.number.Div10_16Shift;
                *(chars = jsonStream.GetPrepLengthCurrent(4)) = (char)(div1000 + '0');
                *(chars + 1) = (char)((div100 - div1000 * 10) + '0');
                *(chars + 2) = (char)((div10 - div100 * 10) + '0');
                *(chars + 3) = (char)((value - div10 * 10) + '0');
                jsonStream.UnsafeAddLength(4);
                return;
            }
            *(int *)(chars = jsonStream.GetPrepLengthCurrent(6)) = '0' + ('x' << 16);
            toHex16(value, chars + 2);
            jsonStream.UnsafeAddLength(6);
        }
Exemple #6
0
 /// <summary>
 /// 数字转换成字符串
 /// </summary>
 /// <param name="value">数字值</param>
 /// <param name="jsonStream">JSON输出流</param>
 public unsafe static void ToString(byte value, charStream jsonStream)
 {
     if (value == 0)
     {
         jsonStream.Write('0');
     }
     else
     {
         byte *chars = (byte *)jsonStream.GetPrepLengthCurrent(4);
         *(int *)chars = '0' + ('x' << 16);
         *(char *)(chars + sizeof(char) * 2) = (char)number.ToHex((uint)value >> 4);
         *(char *)(chars + sizeof(char) * 3) = (char)number.ToHex((uint)value & 15);
         jsonStream.UnsafeAddLength(4);
     }
 }
Exemple #7
0
 /// <summary>
 /// 数字转换成字符串
 /// </summary>
 /// <param name="value">数字值</param>
 /// <param name="jsonStream">JSON输出流</param>
 public unsafe static void ToString(uint value, charStream jsonStream)
 {
     if (value <= ushort.MaxValue)
     {
         ToString((ushort)value, jsonStream);
     }
     else
     {
         char *chars = jsonStream.GetPrepLengthCurrent(10);
         *(int *)chars = '0' + ('x' << 16);
         char *next = getToHex(value >> 16, chars + 2);
         toHex16(value & 0xffff, next);
         jsonStream.UnsafeAddLength((int)(next - chars) + 4);
     }
 }
Exemple #8
0
 /// <summary>
 /// 输出非数字值
 /// </summary>
 public unsafe static void WriteNaN(charStream jsonStream)
 {
     *(long *)jsonStream.GetPrepLengthCurrent(4) = 'N' + ('a' << 16) + ((long)'N' << 32);
     jsonStream.UnsafeAddLength(3);
 }
Exemple #9
0
 /// <summary>
 /// 输出null值
 /// </summary>
 public unsafe static void WriteNull(charStream jsonStream)
 {
     *(long *)jsonStream.GetPrepLengthCurrent(4) = 'n' + ('u' << 16) + ((long)'l' << 32) + ((long)'l' << 48);
     jsonStream.UnsafeAddLength(4);
 }
Exemple #10
0
 /// <summary>
 /// 输出空数组
 /// </summary>
 public unsafe static void WriteArray(charStream jsonStream)
 {
     *(int *)jsonStream.GetPrepLengthCurrent(2) = '[' + (']' << 16);
     jsonStream.UnsafeAddLength(2);
 }
Exemple #11
0
 /// <summary>
 /// 输出空对象
 /// </summary>
 public unsafe static void WriteObject(charStream jsonStream)
 {
     *(int *)jsonStream.GetPrepLengthCurrent(2) = '{' + ('}' << 16);
     jsonStream.UnsafeAddLength(2);
 }