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

◆ GetBytesWithFallback() [3/3]

virtual unsafe int System.Text.Encoding.GetBytesWithFallback ( ReadOnlySpan< char > chars,
int originalCharsLength,
Span< byte > bytes,
int originalBytesLength,
EncoderNLS encoder )
inlineprotectedvirtualinherited

Reimplemented in System.Text.ASCIIEncoding.

Definition at line 1268 of file Encoding.cs.

1269 {
1270 fixed (char* ptr2 = &MemoryMarshal.GetReference(chars))
1271 {
1272 fixed (byte* ptr = &MemoryMarshal.GetReference(bytes))
1273 {
1274 EncoderFallbackBuffer encoderFallbackBuffer = EncoderFallbackBuffer.CreateAndInitialize(this, encoder, originalCharsLength);
1275 do
1276 {
1277 Rune result;
1278 int charsConsumed;
1279 OperationStatus operationStatus = Rune.DecodeFromUtf16(chars, out result, out charsConsumed);
1280 if (operationStatus != OperationStatus.NeedMoreData)
1281 {
1282 if (operationStatus != OperationStatus.InvalidData && EncodeRune(result, bytes, out var _) == OperationStatus.DestinationTooSmall)
1283 {
1284 break;
1285 }
1286 }
1287 else if (encoder != null && !encoder.MustFlush)
1288 {
1290 chars = ReadOnlySpan<char>.Empty;
1291 break;
1292 }
1293 int bytesWritten2;
1294 bool flag = encoderFallbackBuffer.TryInternalFallbackGetBytes(chars, bytes, out charsConsumed, out bytesWritten2);
1295 chars = chars.Slice(charsConsumed);
1296 bytes = bytes.Slice(bytesWritten2);
1297 if (!flag)
1298 {
1299 break;
1300 }
1301 if (!chars.IsEmpty)
1302 {
1303 bytesWritten2 = GetBytesFast((char*)Unsafe.AsPointer(ref MemoryMarshal.GetReference(chars)), chars.Length, (byte*)Unsafe.AsPointer(ref MemoryMarshal.GetReference(bytes)), bytes.Length, out charsConsumed);
1304 chars = chars.Slice(charsConsumed);
1305 bytes = bytes.Slice(bytesWritten2);
1306 }
1307 }
1308 while (!chars.IsEmpty);
1309 if (!chars.IsEmpty || encoderFallbackBuffer.Remaining > 0)
1310 {
1311 ThrowBytesOverflow(encoder, bytes.Length == originalBytesLength);
1312 }
1313 if (encoder != null)
1314 {
1316 }
1317 return originalBytesLength - bytes.Length;
1318 }
1319 }
1320 }
virtual unsafe int GetBytesFast(char *pChars, int charsLength, byte *pBytes, int bytesLength, out int charsConsumed)
Definition Encoding.cs:1229
virtual OperationStatus EncodeRune(Rune value, Span< byte > bytes, out int bytesWritten)
Definition Encoding.cs:1114

References System.bytes, System.chars, System.Text.EncoderFallbackBuffer.CreateAndInitialize(), System.Text.Rune.DecodeFromUtf16(), System.Runtime.Serialization.Dictionary, System.Text.Encoding.EncodeRune(), System.Text.Encoding.GetBytesFast(), System.Text.EncoderNLS.MustFlush, and System.Text.Encoding.ThrowBytesOverflow().