307 {
309 EncoderReplacementFallback encoderReplacementFallback = null;
310 char c = '\0';
311 if (encoder != null)
312 {
314 encoderReplacementFallback = encoder.Fallback as EncoderReplacementFallback;
315 }
316 else
317 {
318 encoderReplacementFallback = base.EncoderFallback as EncoderReplacementFallback;
319 }
323 if (encoderReplacementFallback != null && encoderReplacementFallback.MaxCharCount == 1)
324 {
326 if (b != 0)
327 {
328 if (c > '\0')
329 {
331 {
333 }
336 }
338 {
341 }
343 {
347 if (b2 == 0 && c2 != 0)
348 {
350 }
351 else
352 {
354 }
356 }
357 if (encoder != null)
358 {
359 encoder.charLeftOver = '\0';
360 encoder.m_charsUsed = (int)(
chars - ptr3);
361 }
362 return (
int)(
bytes - ptr2);
363 }
364 }
365 EncoderFallbackBuffer encoderFallbackBuffer = null;
367 EncoderFallbackBufferHelper encoderFallbackBufferHelper = new EncoderFallbackBufferHelper(encoderFallbackBuffer);
368 if (c > '\0')
369 {
371 encoderFallbackBufferHelper = new EncoderFallbackBufferHelper(encoderFallbackBuffer);
372 encoderFallbackBufferHelper.InternalInitialize(
chars, ptr, encoder, _setEncoder: true);
373 encoderFallbackBufferHelper.InternalFallback(c, ref
chars);
374 if (encoderFallbackBuffer.Remaining > ptr4 -
bytes)
375 {
377 }
378 }
379 char c3;
380 while ((c3 = ((encoderFallbackBuffer !=
null) ? encoderFallbackBufferHelper.InternalGetNextChar() :
'\0')) != 0 ||
chars < ptr)
381 {
382 if (c3 == '\0')
383 {
386 }
388 if (b3 == 0 && c3 != 0)
389 {
390 if (encoderFallbackBuffer == null)
391 {
393 encoderFallbackBufferHelper = new EncoderFallbackBufferHelper(encoderFallbackBuffer);
394 encoderFallbackBufferHelper.InternalInitialize(ptr -
charCount, ptr, encoder, _setEncoder: true);
395 }
396 encoderFallbackBufferHelper.InternalFallback(c3, ref
chars);
397 if (encoderFallbackBuffer.Remaining > ptr4 -
bytes)
398 {
400 encoderFallbackBufferHelper.InternalReset();
402 break;
403 }
404 continue;
405 }
407 {
408 if (encoderFallbackBuffer == null || !encoderFallbackBufferHelper.bFallingBack)
409 {
411 }
413 break;
414 }
417 }
418 if (encoder != null)
419 {
420 if (encoderFallbackBuffer != null && !encoderFallbackBufferHelper.bUsedEncoder)
421 {
422 encoder.charLeftOver = '\0';
423 }
424 encoder.m_charsUsed = (int)(
chars - ptr3);
425 }
426 return (
int)(
bytes - ptr2);
427 }
void CheckMemorySection()
new EncoderFallbackBuffer FallbackBuffer
void ThrowBytesOverflow()
EncoderFallback EncoderFallback
unsafe byte * _mapUnicodeToBytes