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); }
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); }
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); }
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); }
public override bool TryComputeEncodedBytes(ReadOnlySpan <uint> utf32, out int bytesNeeded) => Utf16LittleEndianEncoder.TryComputeEncodedBytes(utf32, out bytesNeeded);