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

◆ GetCharCount() [2/5]

unsafe override int System.Text.SBCSCodePageEncoding.GetCharCount ( byte * bytes,
int count,
System::Text::DecoderNLS decoder )
inlinevirtual

Reimplemented from System.Text.EncodingNLS.

Definition at line 429 of file SBCSCodePageEncoding.cs.

430 {
432 bool flag = false;
433 DecoderReplacementFallback decoderReplacementFallback = null;
434 if (decoder == null)
435 {
436 decoderReplacementFallback = base.DecoderFallback as DecoderReplacementFallback;
437 flag = base.DecoderFallback is InternalDecoderBestFitFallback;
438 }
439 else
440 {
441 decoderReplacementFallback = decoder.Fallback as DecoderReplacementFallback;
442 flag = decoder.Fallback is InternalDecoderBestFitFallback;
443 }
444 if (flag || (decoderReplacementFallback != null && decoderReplacementFallback.MaxCharCount == 1))
445 {
446 return count;
447 }
448 DecoderFallbackBuffer decoderFallbackBuffer = null;
449 DecoderFallbackBufferHelper decoderFallbackBufferHelper = new DecoderFallbackBufferHelper(decoderFallbackBuffer);
450 int num = count;
451 byte[] array = new byte[1];
452 byte* ptr = bytes + count;
453 while (bytes < ptr)
454 {
455 char c = _mapBytesToUnicode[(int)(*bytes)];
456 bytes++;
457 if (c == '\ufffd')
458 {
459 if (decoderFallbackBuffer == null)
460 {
461 decoderFallbackBuffer = ((decoder != null) ? decoder.FallbackBuffer : base.DecoderFallback.CreateFallbackBuffer());
462 decoderFallbackBufferHelper = new DecoderFallbackBufferHelper(decoderFallbackBuffer);
463 decoderFallbackBufferHelper.InternalInitialize(ptr - count, null);
464 }
465 array[0] = *(bytes - 1);
466 num--;
467 num += decoderFallbackBufferHelper.InternalFallback(array, bytes);
468 }
469 }
470 return num;
471 }
new DecoderFallbackBuffer FallbackBuffer
Definition DecoderNLS.cs:24
DecoderFallback DecoderFallback
Definition Encoding.cs:480

References System.Text.SBCSCodePageEncoding._mapBytesToUnicode, System.array, System.bytes, System.Text.BaseCodePageEncoding.CheckMemorySection(), System.count, System.Text.DecoderFallbackBufferHelper.InternalFallback(), System.Text.DecoderFallbackBufferHelper.InternalInitialize(), and System.Text.DecoderReplacementFallback.MaxCharCount.