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