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

◆ GetBytes() [2/9]

unsafe override int System.Text.DBCSCodePageEncoding.GetBytes ( char * chars,
int charCount,
byte * bytes,
int byteCount,
System::Text::EncoderNLS encoder )
inlinevirtualinherited

Reimplemented from System.Text.Encoding.

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

Definition at line 580 of file DBCSCodePageEncoding.cs.

581 {
583 EncoderFallbackBuffer encoderFallbackBuffer = null;
584 char* ptr = chars + charCount;
585 char* ptr2 = chars;
586 byte* ptr3 = bytes;
587 byte* ptr4 = bytes + byteCount;
588 EncoderFallbackBufferHelper encoderFallbackBufferHelper = new EncoderFallbackBufferHelper(encoderFallbackBuffer);
589 char c = '\0';
590 if (encoder != null)
591 {
592 c = encoder.charLeftOver;
593 encoderFallbackBuffer = encoder.FallbackBuffer;
594 encoderFallbackBufferHelper = new EncoderFallbackBufferHelper(encoderFallbackBuffer);
595 encoderFallbackBufferHelper.InternalInitialize(chars, ptr, encoder, _setEncoder: true);
596 if (encoder.m_throwOnOverflow && encoderFallbackBuffer.Remaining > 0)
597 {
599 }
600 if (c > '\0')
601 {
602 encoderFallbackBufferHelper.InternalFallback(c, ref chars);
603 }
604 }
605 char c2;
606 while ((c2 = ((encoderFallbackBuffer != null) ? encoderFallbackBufferHelper.InternalGetNextChar() : '\0')) != 0 || chars < ptr)
607 {
608 if (c2 == '\0')
609 {
610 c2 = *chars;
611 chars++;
612 }
613 ushort num = mapUnicodeToBytes[(int)c2];
614 if (num == 0 && c2 != 0)
615 {
616 if (encoderFallbackBuffer == null)
617 {
618 encoderFallbackBuffer = base.EncoderFallback.CreateFallbackBuffer();
619 encoderFallbackBufferHelper = new EncoderFallbackBufferHelper(encoderFallbackBuffer);
620 encoderFallbackBufferHelper.InternalInitialize(ptr - charCount, ptr, encoder, _setEncoder: true);
621 }
622 encoderFallbackBufferHelper.InternalFallback(c2, ref chars);
623 continue;
624 }
625 if (num >= 256)
626 {
627 if (bytes + 1 >= ptr4)
628 {
629 if (encoderFallbackBuffer == null || !encoderFallbackBufferHelper.bFallingBack)
630 {
631 chars--;
632 }
633 else
634 {
635 encoderFallbackBuffer.MovePrevious();
636 }
637 ThrowBytesOverflow(encoder, chars == ptr2);
638 break;
639 }
640 *bytes = (byte)(num >> 8);
641 bytes++;
642 }
643 else if (bytes >= ptr4)
644 {
645 if (encoderFallbackBuffer == null || !encoderFallbackBufferHelper.bFallingBack)
646 {
647 chars--;
648 }
649 else
650 {
651 encoderFallbackBuffer.MovePrevious();
652 }
653 ThrowBytesOverflow(encoder, chars == ptr2);
654 break;
655 }
656 *bytes = (byte)(num & 0xFFu);
657 bytes++;
658 }
659 if (encoder != null)
660 {
661 if (encoderFallbackBuffer != null && !encoderFallbackBufferHelper.bUsedEncoder)
662 {
663 encoder.charLeftOver = '\0';
664 }
665 encoder.m_charsUsed = (int)(chars - ptr2);
666 }
667 return (int)(bytes - ptr3);
668 }
static string Argument_EncoderFallbackNotEmpty
Definition SR.cs:590
static string Format(string resourceFormat, object p1)
Definition SR.cs:118
Definition SR.cs:7
new EncoderFallback Fallback
Definition EncoderNLS.cs:21
new EncoderFallbackBuffer FallbackBuffer
Definition EncoderNLS.cs:26
override string EncodingName

References System.SR.Argument_EncoderFallbackNotEmpty, System.Text.EncoderFallbackBufferHelper.bFallingBack, System.Text.EncoderFallbackBufferHelper.bUsedEncoder, System.byteCount, System.bytes, System.charCount, System.chars, System.Text.BaseCodePageEncoding.CheckMemorySection(), System.Text.EncodingNLS.EncodingName, System.SR.Format(), System.Text.EncoderFallbackBufferHelper.InternalFallback(), System.Text.EncoderFallbackBufferHelper.InternalGetNextChar(), System.Text.EncoderFallbackBufferHelper.InternalInitialize(), System.Text.DBCSCodePageEncoding.mapUnicodeToBytes, System.Text.EncoderFallbackBuffer.MovePrevious(), System.Text.EncoderFallbackBuffer.Remaining, and System.Text.EncodingNLS.ThrowBytesOverflow().