410 {
415 char c = '\0';
416 EncoderFallbackBuffer encoderFallbackBuffer = null;
417 if (encoder != null)
418 {
419 c = encoder._charLeftOver;
420 encoderFallbackBuffer = encoder.FallbackBuffer;
421 if (encoder._throwOnOverflow && encoderFallbackBuffer.Remaining > 0)
422 {
424 }
425 }
426 else
427 {
429 }
431 while (true)
432 {
433 char c2;
434 char* chars2;
435 if ((c2 = encoderFallbackBuffer.InternalGetNextChar()) != 0 ||
chars < ptr2)
436 {
437 if (c2 == '\0')
438 {
441 }
442 if (c != 0)
443 {
444 if (!char.IsLowSurrogate(c2))
445 {
448 encoderFallbackBuffer.InternalFallback(c, ref chars2);
450 c = '\0';
451 continue;
452 }
454 c = '\0';
455 if (
bytes + 3 < ptr4)
456 {
458 {
460 *(
bytes++) = (
byte)(surrogate >> 16);
461 *(
bytes++) = (
byte)(surrogate >> 8);
462 *(
bytes++) = (
byte)surrogate;
463 }
464 else
465 {
466 *(
bytes++) = (
byte)surrogate;
467 *(
bytes++) = (
byte)(surrogate >> 8);
468 *(
bytes++) = (
byte)(surrogate >> 16);
470 }
471 continue;
472 }
473 if (encoderFallbackBuffer.bFallingBack)
474 {
475 encoderFallbackBuffer.MovePrevious();
476 encoderFallbackBuffer.MovePrevious();
477 }
478 else
479 {
481 }
483 c = '\0';
484 }
485 else
486 {
487 if (char.IsHighSurrogate(c2))
488 {
489 c = c2;
490 continue;
491 }
492 if (char.IsLowSurrogate(c2))
493 {
495 encoderFallbackBuffer.InternalFallback(c2, ref chars2);
497 continue;
498 }
499 if (
bytes + 3 < ptr4)
500 {
502 {
505 *(
bytes++) = (
byte)((uint)c2 >> 8);
506 *(
bytes++) = (
byte)c2;
507 }
508 else
509 {
510 *(
bytes++) = (
byte)c2;
511 *(
bytes++) = (
byte)((uint)c2 >> 8);
514 }
515 continue;
516 }
517 if (encoderFallbackBuffer.bFallingBack)
518 {
519 encoderFallbackBuffer.MovePrevious();
520 }
521 else
522 {
524 }
526 }
527 }
528 if ((encoder != null && !encoder.MustFlush) || c <= '\0')
529 {
530 break;
531 }
533 encoderFallbackBuffer.InternalFallback(c, ref chars2);
535 c = '\0';
536 }
537 if (encoder != null)
538 {
539 encoder._charLeftOver = c;
540 encoder._charsUsed = (int)(
chars - ptr);
541 }
542 return (
int)(
bytes - ptr3);
543 }
unsafe void InternalInitialize(char *charStart, char *charEnd, EncoderNLS encoder, bool setEncoder)
EncoderFallbackBuffer CreateFallbackBuffer()
EncoderFallback encoderFallback
void ThrowBytesOverflow()
virtual string EncodingName
static uint GetSurrogate(char cHigh, char cLow)