예제 #1
0
        private void WriteControl(byte value)
        {
            if (UseFastUtf8)
            {
                EnsureBuffer(1).DangerousGetPinnableReference() = value;
                _output.Advance(1);
            }
            else if (UseFastUtf16)
            {
                var buffer = EnsureBuffer(2);
                Unsafe.As <byte, char>(ref buffer.DangerousGetPinnableReference()) = (char)value;
                _output.Advance(2);
            }
            else
            {
                var buffer = _output.GetSpan();
                int written;
                while (!_output.SymbolTable.TryEncode(value, buffer, out written))
                {
                    buffer = EnsureBuffer();
                }

                _output.Advance(written);
            }
        }
예제 #2
0
        private void WriteControl(byte value)
        {
            if (UseFastUtf8)
            {
                MemoryMarshal.GetReference(EnsureBuffer(1)) = value;
                _output.Advance(1);
            }
            else if (UseFastUtf16)
            {
                var buffer = EnsureBuffer(2);
                Unsafe.As <byte, char>(ref MemoryMarshal.GetReference(buffer)) = (char)value;
                _output.Advance(2);
            }
            else
            {
                var buffer = _output.GetSpan();
                int written;
                while (!_output.SymbolTable.TryEncode(value, buffer, out written))
                {
                    buffer = EnsureBuffer();
                }

                _output.Advance(written);
            }
        }