Esempio n. 1
0
 /// <summary>
 /// 写数值
 /// </summary>
 /// <param name="value">数值</param>
 /// <param name="stream"></param>
 internal void Write(ulong value, UnmanagedStream stream)
 {
     if ((Type & EncodingType.Unicode) == 0)
     {
         if ((Type & EncodingType.CompatibleAscii) != 0)
         {
             if (value < 10)
             {
                 stream.Write((byte)((int)value + '0'));
             }
             else
             {
                 byte *      write = stream.GetPrepSizeCurrent(24);
                 RangeLength index = AutoCSer.Extensions.NumberExtension.ToBytes(value, write);
                 if (index.Start != 0)
                 {
                     AutoCSer.Memory.Common.SimpleCopyNotNull64(write + index.Start, write, index.Length);
                 }
                 stream.Data.CurrentIndex += index.Length;
             }
         }
         else
         {
             char *write  = (char *)stream.GetPrepSizeCurrent(20 * sizeof(char));
             int   length = AutoCSer.Extensions.NumberExtension.ToString(value, write);
             int   size   = Encoding.GetByteCount(write, length);
             Encoding.GetBytes(write, length, (byte *)write, size);
             stream.Data.CurrentIndex += size;
         }
     }
     else
     {
         stream.Data.CurrentIndex += AutoCSer.Extensions.NumberExtension.ToString(value, (char *)stream.GetPrepSizeCurrent(20 * sizeof(char))) << 1;
     }
 }
Esempio n. 2
0
 /// <summary>
 /// 写数值
 /// </summary>
 /// <param name="value">数值</param>
 /// <param name="stream"></param>
 internal void Write(int value, UnmanagedStream stream)
 {
     if ((Type & EncodingType.Unicode) == 0)
     {
         if ((Type & EncodingType.CompatibleAscii) != 0)
         {
             if ((uint)value < 10)
             {
                 stream.Write((byte)(value + '0'));
             }
             else
             {
                 stream.Data.CurrentIndex += AutoCSer.Extensions.NumberExtension.ToBytes(value, stream.GetPrepSizeCurrent(11));
             }
         }
         else
         {
             char *write = (char *)stream.GetPrepSizeCurrent(11 * sizeof(char));
             int   count = AutoCSer.Extensions.NumberExtension.ToString(value, write);
             int   size  = Encoding.GetByteCount(write, count);
             Encoding.GetBytes(write, count, (byte *)write, size);
             stream.Data.CurrentIndex += size;
         }
     }
     else
     {
         stream.Data.CurrentIndex += AutoCSer.Extensions.NumberExtension.ToString(value, (char *)stream.GetPrepSizeCurrent(11 * sizeof(char))) * sizeof(char);
     }
 }
Esempio n. 3
0
        internal void Write(short value, UnmanagedStream stream)
        {
            char *write = (char *)stream.GetPrepSizeCurrent(6 * sizeof(char));
            int   count = AutoCSer.Extensions.NumberExtension.ToString(value, write);

            stream.Data.CurrentIndex += (Type & EncodingType.Unicode) == 0 ? writeNumberNotUnicode(write, count) : (count * sizeof(char));
        }
Esempio n. 4
0
        /// <summary>
        /// 写字节数据
        /// </summary>
        /// <param name="start"></param>
        /// <param name="count"></param>
        /// <param name="stream"></param>
        internal void WriteBytes(char *start, int count, UnmanagedStream stream)
        {
            int   size  = GetByteCountNotNull(start, count);
            byte *write = stream.GetPrepSizeCurrent(size);

            if ((Type & (1 | 4)) == 0)
            {
                Encoding.GetBytes(start, count, write, size);
            }
            else if ((Type & 4) != 0)
            {
                Memory.CopyNotNull(start, write, size);
            }
            else
            {
                AutoCSer.Extension.StringExtension.WriteBytes(start, size, write);
            }
            stream.ByteSize += size;
        }
Esempio n. 5
0
        /// <summary>
        /// 写数值
        /// </summary>
        /// <param name="value">数值</param>
        /// <param name="stream"></param>
        internal void Write(long value, UnmanagedStream stream)
        {
            char *write  = (char *)stream.GetPrepSizeCurrent(22 * sizeof(char));
            int   length = AutoCSer.Extensions.NumberExtension.ToString(value, write);

            if ((Type & EncodingType.Unicode) == 0)
            {
                if ((Type & EncodingType.CompatibleAscii) != 0)
                {
                    AutoCSer.Extensions.StringExtension.WriteBytes(write, length, (byte *)write);
                    stream.Data.CurrentIndex += length;
                }
                else
                {
                    int size = Encoding.GetByteCount(write, length);
                    Encoding.GetBytes(write, length, (byte *)write, size);
                    stream.Data.CurrentIndex += size;
                }
            }
            else
            {
                stream.Data.CurrentIndex += length << 1;
            }
        }