26 : base(encoderShouldEmitUTF8Identifier)
40 if (
s !=
null &&
s.Length <= 32)
44 return base.GetBytes(
s);
49 byte* ptr = stackalloc
byte[96];
52 fixed (
char* pChars =
s)
65 return base.GetString(
bytes);
70 char* ptr = stackalloc
char[32];
73 fixed (
byte* pBytes =
bytes)
116 public UTF8Encoding(
bool encoderShouldEmitUTF8Identifier,
bool throwOnInvalidBytes)
117 : this(encoderShouldEmitUTF8Identifier)
154 fixed (
char* ptr =
chars)
166 fixed (
char* pChars =
chars)
172 [CLSCompliant(
false)]
213 long utf8CodeUnitCountAdjustment;
214 int scalarCountAdjustment;
216 long num = (charsConsumed = (int)(pointerToFirstInvalidChar - pChars)) + utf8CodeUnitCountAdjustment;
217 if ((ulong)num > 2147483647uL)
226 if (
s ==
null ||
bytes ==
null)
242 fixed (
char* ptr2 =
s)
270 fixed (
char* ptr =
chars)
272 fixed (
byte* ptr2 =
bytes)
279 [CLSCompliant(
false)]
317 private protected unsafe
sealed override int GetBytesFast(
char* pChars,
int charsLength,
byte* pBytes,
int bytesLength, out
int charsConsumed)
319 Utf8Utility.
TranscodeToUtf8(pChars, charsLength, pBytes, bytesLength, out var pInputBufferRemaining, out var pOutputBufferRemaining);
320 charsConsumed = (int)(pInputBufferRemaining - pChars);
321 return (
int)(pOutputBufferRemaining - pBytes);
338 fixed (
byte* ptr =
bytes)
344 [CLSCompliant(
false)]
384 fixed (
byte* ptr =
bytes)
386 fixed (
char* ptr2 =
chars)
393 [CLSCompliant(
false)]
431 private protected unsafe
sealed override int GetCharsFast(
byte* pBytes,
int bytesLength,
char* pChars,
int charsLength, out
int bytesConsumed)
433 Utf8Utility.
TranscodeToUtf16(pBytes, bytesLength, pChars, charsLength, out var pInputBufferRemaining, out var pOutputBufferRemaining);
434 bytesConsumed = (int)(pInputBufferRemaining - pBytes);
435 return (
int)(pOutputBufferRemaining - pChars);
448 return originalCharsLength -
chars.Length;
450 return base.GetCharsWithFallback(
bytes, originalBytesLength,
chars, originalCharsLength, decoder);
471 fixed (
byte* ptr =
bytes)
473 return string.CreateStringFromEncoding(ptr +
index,
count,
this);
496 int utf16CodeUnitCountAdjustment;
497 int scalarCountAdjustment;
499 return (bytesConsumed = (
int)(pointerToFirstInvalidByte - pBytes)) + utf16CodeUnitCountAdjustment;
520 if (!
value.TryEncodeToUtf8(
bytes, out bytesWritten))
539 if (base.EncoderFallback.MaxCharCount > 1)
541 num *= base.EncoderFallback.MaxCharCount;
544 if (num >
int.MaxValue)
558 if (base.DecoderFallback.MaxCharCount > 1)
560 num *= base.DecoderFallback.MaxCharCount;
562 if (num >
int.MaxValue)
573 return new byte[3] { 239, 187, 191 };
575 return Array.Empty<
byte>();
582 if (
_emitUTF8Identifier == uTF8Encoding._emitUTF8Identifier && base.EncoderFallback.Equals(uTF8Encoding.EncoderFallback))
584 return base.DecoderFallback.Equals(uTF8Encoding.DecoderFallback);
593 return base.EncoderFallback.GetHashCode() + base.DecoderFallback.GetHashCode() + 65001 + (
_emitUTF8Identifier ? 1 : 0);
static string ArgumentOutOfRange_GetCharCountOverflow
static string ArgumentOutOfRange_GetByteCountOverflow
static string ArgumentOutOfRange_NeedNonNegNum
static DecoderFallback ExceptionFallback
new DecoderFallback Fallback
static EncoderFallback ExceptionFallback
EncoderFallback encoderFallback
unsafe int GetByteCountWithFallback(char *pCharsOriginal, int originalCharCount, int charsConsumedSoFar)
static void ThrowConversionOverflow()
unsafe int GetBytesWithFallback(char *pOriginalChars, int originalCharCount, byte *pOriginalBytes, int originalByteCount, int charsConsumedSoFar, int bytesWrittenSoFar)
DecoderFallback decoderFallback
unsafe int GetCharCountWithFallback(byte *pBytesOriginal, int originalByteCount, int bytesConsumedSoFar)
override byte[] GetBytes(string s)
UTF8EncodingSealed(bool encoderShouldEmitUTF8Identifier)
unsafe string GetStringForSmallInput(byte[] bytes)
override string GetString(byte[] bytes)
override ReadOnlySpan< byte > Preamble
unsafe byte[] GetBytesForSmallInput(string s)
override int GetCharsWithFallback(ReadOnlySpan< byte > bytes, int originalBytesLength, Span< char > chars, int originalCharsLength, DecoderNLS decoder)
unsafe override int GetCharCountFast(byte *pBytes, int bytesLength, DecoderFallback fallback, out int bytesConsumed)
unsafe override int GetCharsFast(byte *pBytes, int bytesLength, char *pChars, int charsLength, out int bytesConsumed)
unsafe int GetCharsCommon(byte *pBytes, int byteCount, char *pChars, int charCount)
unsafe override int GetByteCount(char[] chars, int index, int count)
unsafe override int GetByteCount(ReadOnlySpan< char > chars)
override OperationStatus EncodeRune(Rune value, Span< byte > bytes, out int bytesWritten)
unsafe override int GetCharCount(ReadOnlySpan< byte > bytes)
UTF8Encoding(bool encoderShouldEmitUTF8Identifier, bool throwOnInvalidBytes)
unsafe override int GetChars(byte[] bytes, int byteIndex, int byteCount, char[] chars, int charIndex)
unsafe override string GetString(byte[] bytes, int index, int count)
unsafe override int GetBytes(ReadOnlySpan< char > chars, Span< byte > bytes)
unsafe override int GetBytes(char *chars, int charCount, byte *bytes, int byteCount)
override byte[] GetPreamble()
override int GetMaxByteCount(int charCount)
unsafe override int GetByteCount(char *chars, int count)
static ReadOnlySpan< byte > PreambleSpan
readonly bool _emitUTF8Identifier
unsafe int GetBytesCommon(char *pChars, int charCount, byte *pBytes, int byteCount)
unsafe override int GetChars(byte *bytes, int byteCount, char *chars, int charCount)
unsafe override int GetByteCountFast(char *pChars, int charsLength, EncoderFallback fallback, out int charsConsumed)
override int GetMaxCharCount(int byteCount)
unsafe override int GetCharCount(byte[] bytes, int index, int count)
unsafe override int GetByteCount(string chars)
override OperationStatus DecodeFirstRune(ReadOnlySpan< byte > bytes, out Rune value, out int bytesConsumed)
override bool TryGetByteCount(Rune value, out int byteCount)
override Decoder GetDecoder()
unsafe int GetCharCountCommon(byte *pBytes, int byteCount)
override int GetHashCode()
static readonly UTF8EncodingSealed s_default
override ReadOnlySpan< byte > Preamble
unsafe override int GetBytes(char[] chars, int charIndex, int charCount, byte[] bytes, int byteIndex)
UTF8Encoding(bool encoderShouldEmitUTF8Identifier)
override void SetDefaultFallbacks()
override Encoder GetEncoder()
override bool Equals([NotNullWhen(true)] object? value)
readonly bool _isThrowException
unsafe int GetByteCountCommon(char *pChars, int charCount)
unsafe override int GetCharCount(byte *bytes, int count)
unsafe override int GetChars(ReadOnlySpan< byte > bytes, Span< char > chars)
unsafe override int GetBytesFast(char *pChars, int charsLength, byte *pBytes, int bytesLength, out int charsConsumed)
unsafe override int GetBytes(string s, int charIndex, int charCount, byte[] bytes, int byteIndex)
static unsafe char * GetPointerToFirstInvalidChar(char *pInputBuffer, int inputLength, out long utf8CodeUnitCountAdjustment, out int scalarCountAdjustment)
static unsafe byte * GetPointerToFirstInvalidByte(byte *pInputBuffer, int inputLength, out int utf16CodeUnitCountAdjustment, out int scalarCountAdjustment)
static unsafe OperationStatus TranscodeToUtf8(char *pInputBuffer, int inputLength, byte *pOutputBuffer, int outputBytesRemaining, out char *pInputBufferRemaining, out byte *pOutputBufferRemaining)
static unsafe OperationStatus TranscodeToUtf16(byte *pInputBuffer, int inputLength, char *pOutputBuffer, int outputCharsRemaining, out byte *pInputBufferRemaining, out char *pOutputBufferRemaining)
static unsafe OperationStatus ToUtf16(ReadOnlySpan< byte > source, Span< char > destination, out int bytesRead, out int charsWritten, bool replaceInvalidSequences=true, bool isFinalBlock=true)
static void ThrowArgumentOutOfRangeException(System.ExceptionArgument argument)
static void ThrowArgumentNullException(string name)
static OperationStatus DecodeFromUtf8(ReadOnlySpan< byte > source, out Rune result, out int bytesConsumed)