Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ GetCharsWithFallback() [3/3]

virtual unsafe int System.Text.Encoding.GetCharsWithFallback ( ReadOnlySpan< byte > bytes,
int originalBytesLength,
Span< char > chars,
int originalCharsLength,
DecoderNLS decoder )
inlineprotectedvirtualinherited

Reimplemented in System.Text.ASCIIEncoding, and System.Text.UTF8Encoding.

Definition at line 1466 of file Encoding.cs.

1467 {
1468 fixed (byte* ptr2 = &MemoryMarshal.GetReference(bytes))
1469 {
1470 fixed (char* ptr = &MemoryMarshal.GetReference(chars))
1471 {
1472 DecoderFallbackBuffer decoderFallbackBuffer = DecoderFallbackBuffer.CreateAndInitialize(this, decoder, originalBytesLength);
1473 do
1474 {
1475 Rune value;
1476 int bytesConsumed;
1478 if (operationStatus != OperationStatus.NeedMoreData)
1479 {
1480 if (operationStatus != OperationStatus.InvalidData)
1481 {
1482 break;
1483 }
1484 }
1485 else if (decoder != null && !decoder.MustFlush)
1486 {
1487 decoder.SetLeftoverData(bytes);
1488 bytes = ReadOnlySpan<byte>.Empty;
1489 break;
1490 }
1491 if (!decoderFallbackBuffer.TryInternalFallbackGetChars(bytes, bytesConsumed, chars, out var charsWritten))
1492 {
1493 break;
1494 }
1495 bytes = bytes.Slice(bytesConsumed);
1496 chars = chars.Slice(charsWritten);
1497 if (!bytes.IsEmpty)
1498 {
1499 charsWritten = GetCharsFast((byte*)Unsafe.AsPointer(ref MemoryMarshal.GetReference(bytes)), bytes.Length, (char*)Unsafe.AsPointer(ref MemoryMarshal.GetReference(chars)), chars.Length, out bytesConsumed);
1500 bytes = bytes.Slice(bytesConsumed);
1501 chars = chars.Slice(charsWritten);
1502 }
1503 }
1504 while (!bytes.IsEmpty);
1505 if (!bytes.IsEmpty)
1506 {
1507 ThrowCharsOverflow(decoder, chars.Length == originalCharsLength);
1508 }
1509 if (decoder != null)
1510 {
1512 }
1513 return originalCharsLength - chars.Length;
1514 }
1515 }
1516 }
virtual OperationStatus DecodeFirstRune(ReadOnlySpan< byte > bytes, out Rune value, out int bytesConsumed)
Definition Encoding.cs:1109
virtual unsafe int GetCharsFast(byte *pBytes, int bytesLength, char *pChars, int charsLength, out int bytesConsumed)
Definition Encoding.cs:1432

References System.bytes, System.chars, System.Text.DecoderFallbackBuffer.CreateAndInitialize(), System.Text.Encoding.DecodeFirstRune(), System.Runtime.Serialization.Dictionary, System.Text.Encoding.GetCharsFast(), System.Text.DecoderNLS.MustFlush, System.Text.DecoderNLS.SetLeftoverData(), System.Text.Encoding.ThrowCharsOverflow(), and System.value.