public void Write(string value) { using (var memoryOwner = _bufferPool.Rent(_encoding.Value.GetMaxByteCount(value.Length))) { int length = _encoding.Value.GetBytes(value.AsSpan(), memoryOwner.Memory.Span); Varint.SetUInt32((uint)length, _bufferWriter); _bufferWriter.Write(memoryOwner.Memory.Span.Slice(0, length)); } }
public long GetInt64() { if (!Varint.TryGetInt64(_sequence, out long result, out var consumed)) { throw new FormatException(); } _sequence = _sequence.Slice(consumed); return(result); }
public int GetInt32() { if (!Varint.TryGetInt32(_sequence, out int result, out var consumed)) { throw new FormatException(); } _sequence = _sequence.Slice(consumed); return(result); }
public sbyte GetInt8() { if (!Varint.TryGetInt8(_sequence, out sbyte result, out var consumed)) { throw new FormatException(); } _sequence = _sequence.Slice(consumed); return(result); }
public ushort GetUInt16() { if (!Varint.TryGetUInt16(_sequence, out ushort result, out var consumed)) { throw new FormatException(); } _sequence = _sequence.Slice(consumed); return(result); }
public bool GetBoolean() { if (!Varint.TryGetUInt64(_sequence, out ulong result, out var consumed)) { throw new FormatException(); } _sequence = _sequence.Slice(consumed); return(result != 0); }
public ReadOnlyMemory <byte> GetMemory(int limit) { if (!Varint.TryGetUInt32(_sequence, out uint length, out var consumed)) { throw new FormatException(); } _sequence = _sequence.Slice(consumed); if (length > limit) { throw new FormatException(); } var result = new byte[(int)length]; _sequence.Slice(0, length).CopyTo(result.AsSpan()); _sequence = _sequence.Slice(length); return(new ReadOnlyMemory <byte>(result)); }
public IMemoryOwner <byte> GetRecyclableMemory(int limit) { if (!Varint.TryGetUInt32(_sequence, out uint length, out var consumed)) { throw new FormatException(); } _sequence = _sequence.Slice(consumed); if (length > limit) { throw new FormatException(); } var memoryOwner = _bufferPool.Rent((int)length); _sequence.Slice(0, length).CopyTo(memoryOwner.Memory.Span); _sequence = _sequence.Slice(length); return(memoryOwner); }
public string GetString(int limit) { if (!Varint.TryGetUInt32(_sequence, out uint length, out var consumed)) { throw new FormatException(); } _sequence = _sequence.Slice(consumed); if (length > limit) { throw new FormatException(); } using (var memoryOwner = _bufferPool.Rent((int)length)) { _sequence.Slice(0, length).CopyTo(memoryOwner.Memory.Span); _sequence = _sequence.Slice(length); return(_encoding.Value.GetString(memoryOwner.Memory.Span)); } }
public void Write(int value) { Varint.SetInt64(value, _bufferWriter); }
public void Write(ulong value) { Varint.SetUInt64(value, _bufferWriter); }
public void Write(ReadOnlySpan <byte> value) { Varint.SetUInt32((uint)value.Length, _bufferWriter); _bufferWriter.Write(value); }