Пример #1
0
        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));
            }
        }
Пример #2
0
        public long GetInt64()
        {
            if (!Varint.TryGetInt64(_sequence, out long result, out var consumed))
            {
                throw new FormatException();
            }

            _sequence = _sequence.Slice(consumed);

            return(result);
        }
Пример #3
0
        public int GetInt32()
        {
            if (!Varint.TryGetInt32(_sequence, out int result, out var consumed))
            {
                throw new FormatException();
            }

            _sequence = _sequence.Slice(consumed);

            return(result);
        }
Пример #4
0
        public sbyte GetInt8()
        {
            if (!Varint.TryGetInt8(_sequence, out sbyte result, out var consumed))
            {
                throw new FormatException();
            }

            _sequence = _sequence.Slice(consumed);

            return(result);
        }
Пример #5
0
        public ushort GetUInt16()
        {
            if (!Varint.TryGetUInt16(_sequence, out ushort result, out var consumed))
            {
                throw new FormatException();
            }

            _sequence = _sequence.Slice(consumed);

            return(result);
        }
Пример #6
0
        public bool GetBoolean()
        {
            if (!Varint.TryGetUInt64(_sequence, out ulong result, out var consumed))
            {
                throw new FormatException();
            }

            _sequence = _sequence.Slice(consumed);

            return(result != 0);
        }
Пример #7
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));
        }
Пример #8
0
        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);
        }
Пример #9
0
        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));
            }
        }
Пример #10
0
 public void Write(int value)
 {
     Varint.SetInt64(value, _bufferWriter);
 }
Пример #11
0
 public void Write(ulong value)
 {
     Varint.SetUInt64(value, _bufferWriter);
 }
Пример #12
0
 public void Write(ReadOnlySpan <byte> value)
 {
     Varint.SetUInt32((uint)value.Length, _bufferWriter);
     _bufferWriter.Write(value);
 }