Пример #1
0
        public override bool TryDecode(ReadOnlySpan <byte> encodedBytes, Span <uint> utf32, out int bytesConsumed, out int codeUnitsWritten)
        {
            int consumed;
            var utf16  = encodedBytes.NonPortableCast <byte, char>();
            var result = Utf16LittleEndianEncoder.TryDecode(utf16, utf32, out consumed, out codeUnitsWritten);

            bytesConsumed = consumed * sizeof(char);
            return(result);
        }
Пример #2
0
        public override bool TryEncode(ReadOnlySpan <uint> utf32, Span <byte> encodedBytes, out int charactersConsumed, out int bytesWritten)
        {
            int written;
            var utf16  = encodedBytes.NonPortableCast <byte, char>();
            var result = Utf16LittleEndianEncoder.TryEncode(utf32, utf16, out charactersConsumed, out written);

            bytesWritten = written * sizeof(char);
            return(result);
        }
Пример #3
0
        public override bool TryEncodeFromUtf8(ReadOnlySpan <byte> utf8, Span <byte> buffer, out int bytesWritten)
        {
            bytesWritten = 0;
            int justWritten;

            foreach (var cp in new Utf8String(utf8).CodePoints)
            {
                if (!Utf16LittleEndianEncoder.TryEncodeCodePoint(cp, buffer.Slice(bytesWritten), out justWritten))
                {
                    bytesWritten = 0;
                    return(false);
                }
                bytesWritten += justWritten;
            }
            return(true);
        }
Пример #4
0
        public override bool TryEncodeFromUnicode(ReadOnlySpan <UnicodeCodePoint> codePoints, Span <byte> buffer, out int bytesWritten)
        {
            var availableBytes           = buffer.Length;
            var inputLength              = codePoints.Length;
            int bytesWrittenForCodePoint = 0;

            bytesWritten = 0;

            for (int i = 0; i < inputLength; i++)
            {
                if (availableBytes <= bytesWritten || !Utf16LittleEndianEncoder.TryEncodeCodePoint(codePoints[i], buffer.Slice(bytesWritten), out bytesWrittenForCodePoint))
                {
                    bytesWritten = 0;
                    return(false);
                }
                bytesWritten += bytesWrittenForCodePoint;
            }

            return(true);
        }
Пример #5
0
 public override bool TryComputeEncodedBytes(ReadOnlySpan <uint> utf32, out int bytesNeeded)
 => Utf16LittleEndianEncoder.TryComputeEncodedBytes(utf32, out bytesNeeded);