public void WriteUInt8(byte value) { if (Buf.IsEmpty) { Resize(1); } PackUnpack.UnsafeGetAndAdvance(ref Buf, 1) = value; }
public void WriteInt8Ordered(sbyte value) { if (Buf.IsEmpty) { Resize(1); } PackUnpack.UnsafeGetAndAdvance(ref Buf, 1) = (byte)(value + 128); }
public void WriteByteZero() { if (Buf.IsEmpty) { Resize(1); } PackUnpack.UnsafeGetAndAdvance(ref Buf, 1) = 0; }
public unsafe void WriteBool(bool value) { if (Buf.IsEmpty) { Resize(1); } PackUnpack.UnsafeGetAndAdvance(ref Buf, 1) = *(byte *)&value; }
public void WriteInt8(sbyte value) { if (_buf.IsEmpty) { Resize(1); } PackUnpack.UnsafeGetAndAdvance(ref _buf, 1) = (byte)value; }
public void WriteInt32LE(int value) { if ((uint)_buf.Length < 4u) { Resize(4); } Unsafe.As <byte, uint>(ref PackUnpack.UnsafeGetAndAdvance(ref _buf, 4)) = PackUnpack.AsLittleEndian((uint)value); }
public void WriteInt64(long value) { if ((uint)_buf.Length < 8u) { Resize(8); } Unsafe.As <byte, ulong>(ref PackUnpack.UnsafeGetAndAdvance(ref _buf, 8)) = PackUnpack.AsBigEndian((ulong)value); }
public unsafe void WriteString(string?value) { if (value == null) { WriteByteZero(); return; } var l = value.Length; if (l == 0) { WriteUInt8(1); return; } fixed(char *strPtrStart = value) { var strPtr = strPtrStart; var strPtrEnd = strPtrStart + l; var toEncode = (uint)(l + 1); doEncode: WriteVUInt32(toEncode); while (strPtr != strPtrEnd) { var c = *strPtr++; if (c < 0x80) { if (_buf.IsEmpty) { Resize(1); } PackUnpack.UnsafeGetAndAdvance(ref _buf, 1) = (byte)c; } else { if (char.IsHighSurrogate(c) && strPtr != strPtrEnd) { var c2 = *strPtr; if (char.IsLowSurrogate(c2)) { toEncode = (uint)((c - 0xD800) * 0x400 + (c2 - 0xDC00) + 0x10000); strPtr++; goto doEncode; } } toEncode = c; goto doEncode; } } } }
public void WriteVUInt64(ulong value) { var len = PackUnpack.LengthVUInt(value); if ((uint)_buf.Length < (uint)len) { Resize(len); } PackUnpack.UnsafePackVUInt(ref PackUnpack.UnsafeGetAndAdvance(ref _buf, len), value, len); }
public bool ReadBlock(ref SpanReader spanReader, ref byte buffer, uint length) { while (length > 0) { if (FillBufAndCheckForEof(ref spanReader)) { return(true); } var lenTillEnd = (uint)Math.Min(length, spanReader.Buf.Length); Unsafe.CopyBlockUnaligned(ref buffer, ref PackUnpack.UnsafeGetAndAdvance(ref spanReader.Buf, (int)lenTillEnd), lenTillEnd); length -= lenTillEnd; } return(false); }
public bool ReadBlock(ref SpanReader spanReader, ref byte buffer, uint length) { if (length < BufLength) { if (FillBufAndCheckForEof(ref spanReader) || length > (uint)spanReader.Buf.Length) { return(true); } Unsafe.CopyBlockUnaligned(ref buffer, ref PackUnpack.UnsafeGetAndAdvance(ref spanReader.Buf, (int)length), length); return(false); } var read = PlatformMethods.Instance.PRead(_owner._handle, MemoryMarshal.CreateSpan(ref buffer, (int)length), _ofs); _ofs += read; return(read < length); }