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

◆ GetCharCount() [2/5]

unsafe override int System.Text.DBCSCodePageEncoding.GetCharCount ( byte * bytes,
int count,
System::Text::DecoderNLS baseDecoder )
inlinevirtualinherited

Reimplemented from System.Text.Encoding.

Reimplemented in System.Text.GB18030Encoding, and System.Text.ISO2022Encoding.

Definition at line 670 of file DBCSCodePageEncoding.cs.

671 {
673 DBCSDecoder dBCSDecoder = (DBCSDecoder)baseDecoder;
674 DecoderFallbackBuffer decoderFallbackBuffer = null;
675 byte* ptr = bytes + count;
676 int num = count;
677 DecoderFallbackBufferHelper decoderFallbackBufferHelper = new DecoderFallbackBufferHelper(decoderFallbackBuffer);
678 if (dBCSDecoder != null && dBCSDecoder.bLeftOver > 0)
679 {
680 if (count == 0)
681 {
682 if (!dBCSDecoder.MustFlush)
683 {
684 return 0;
685 }
686 decoderFallbackBuffer = dBCSDecoder.FallbackBuffer;
687 decoderFallbackBufferHelper = new DecoderFallbackBufferHelper(decoderFallbackBuffer);
688 decoderFallbackBufferHelper.InternalInitialize(bytes, null);
689 byte[] bytes2 = new byte[1] { dBCSDecoder.bLeftOver };
690 return decoderFallbackBufferHelper.InternalFallback(bytes2, bytes);
691 }
692 int num2 = dBCSDecoder.bLeftOver << 8;
693 num2 |= *bytes;
694 bytes++;
695 if (mapBytesToUnicode[num2] == '\0' && num2 != 0)
696 {
697 num--;
698 decoderFallbackBuffer = dBCSDecoder.FallbackBuffer;
699 decoderFallbackBufferHelper = new DecoderFallbackBufferHelper(decoderFallbackBuffer);
700 decoderFallbackBufferHelper.InternalInitialize(ptr - count, null);
701 byte[] bytes3 = new byte[2]
702 {
703 (byte)(num2 >> 8),
704 (byte)num2
705 };
706 num += decoderFallbackBufferHelper.InternalFallback(bytes3, bytes);
707 }
708 }
709 while (bytes < ptr)
710 {
711 int num3 = *bytes;
712 bytes++;
713 char c = mapBytesToUnicode[num3];
714 if (c == '\ufffe')
715 {
716 num--;
717 if (bytes < ptr)
718 {
719 num3 <<= 8;
720 num3 |= *bytes;
721 bytes++;
722 c = mapBytesToUnicode[num3];
723 }
724 else
725 {
726 if (dBCSDecoder != null && !dBCSDecoder.MustFlush)
727 {
728 break;
729 }
730 num++;
731 c = '\0';
732 }
733 }
734 if (c == '\0' && num3 != 0)
735 {
736 if (decoderFallbackBuffer == null)
737 {
738 decoderFallbackBuffer = ((dBCSDecoder != null) ? dBCSDecoder.FallbackBuffer : base.DecoderFallback.CreateFallbackBuffer());
739 decoderFallbackBufferHelper = new DecoderFallbackBufferHelper(decoderFallbackBuffer);
740 decoderFallbackBufferHelper.InternalInitialize(ptr - count, null);
741 }
742 num--;
743 byte[] bytes4 = ((num3 >= 256) ? new byte[2]
744 {
745 (byte)(num3 >> 8),
746 (byte)num3
747 } : new byte[1] { (byte)num3 });
748 num += decoderFallbackBufferHelper.InternalFallback(bytes4, bytes);
749 }
750 }
751 return num;
752 }
DecoderFallback DecoderFallback
Definition Encoding.cs:480

References System.Text.DBCSCodePageEncoding.DBCSDecoder.bLeftOver, System.bytes, System.Text.BaseCodePageEncoding.CheckMemorySection(), System.count, System.Text.DecoderNLS.FallbackBuffer, System.Text.DecoderFallbackBufferHelper.InternalFallback(), System.Text.DecoderFallbackBufferHelper.InternalInitialize(), System.Text.DBCSCodePageEncoding.mapBytesToUnicode, and System.Text.DecoderNLS.MustFlush.