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

◆ GetByteCount() [2/7]

unsafe override int System.Text.UTF32Encoding.GetByteCount ( char * chars,
int count,
EncoderNLS encoder )
inlinepackagevirtual

Reimplemented from System.Text.Encoding.

Definition at line 330 of file UTF32Encoding.cs.

331 {
332 char* ptr = chars + count;
333 char* charStart = chars;
334 int num = 0;
335 char c = '\0';
336 EncoderFallbackBuffer encoderFallbackBuffer = null;
337 if (encoder != null)
338 {
339 c = encoder._charLeftOver;
340 encoderFallbackBuffer = encoder.FallbackBuffer;
341 if (encoderFallbackBuffer.Remaining > 0)
342 {
343 throw new ArgumentException(SR.Format(SR.Argument_EncoderFallbackNotEmpty, EncodingName, encoder.Fallback?.GetType().ToString() ?? string.Empty));
344 }
345 }
346 else
347 {
348 encoderFallbackBuffer = encoderFallback.CreateFallbackBuffer();
349 }
350 encoderFallbackBuffer.InternalInitialize(charStart, ptr, encoder, setEncoder: false);
351 while (true)
352 {
353 char c2;
354 if ((c2 = encoderFallbackBuffer.InternalGetNextChar()) != 0 || chars < ptr)
355 {
356 if (c2 == '\0')
357 {
358 c2 = *chars;
359 chars++;
360 }
361 if (c != 0)
362 {
363 if (char.IsLowSurrogate(c2))
364 {
365 c = '\0';
366 num += 4;
367 continue;
368 }
369 chars--;
370 char* chars2 = chars;
371 encoderFallbackBuffer.InternalFallback(c, ref chars2);
372 chars = chars2;
373 c = '\0';
374 }
375 else if (char.IsHighSurrogate(c2))
376 {
377 c = c2;
378 }
379 else if (char.IsLowSurrogate(c2))
380 {
381 char* chars2 = chars;
382 encoderFallbackBuffer.InternalFallback(c2, ref chars2);
383 chars = chars2;
384 }
385 else
386 {
387 num += 4;
388 }
389 }
390 else
391 {
392 if ((encoder != null && !encoder.MustFlush) || c <= '\0')
393 {
394 break;
395 }
396 char* chars2 = chars;
397 encoderFallbackBuffer.InternalFallback(c, ref chars2);
398 chars = chars2;
399 c = '\0';
400 }
401 }
402 if (num < 0)
403 {
404 throw new ArgumentOutOfRangeException("count", SR.ArgumentOutOfRange_GetByteCountOverflow);
405 }
406 return num;
407 }
unsafe void InternalInitialize(char *charStart, char *charEnd, EncoderNLS encoder, bool setEncoder)
EncoderFallbackBuffer CreateFallbackBuffer()
EncoderFallback encoderFallback
Definition Encoding.cs:341
virtual string EncodingName
Definition Encoding.cs:362

References System.Text.EncoderNLS._charLeftOver, System.SR.Argument_EncoderFallbackNotEmpty, System.SR.ArgumentOutOfRange_GetByteCountOverflow, System.chars, System.count, System.Text.EncoderFallback.CreateFallbackBuffer(), System.Text.Encoding.encoderFallback, System.Text.Encoding.EncodingName, System.Text.EncoderNLS.Fallback, System.Text.EncoderNLS.FallbackBuffer, System.SR.Format(), System.Text.EncoderFallbackBuffer.InternalFallback(), System.Text.EncoderFallbackBuffer.InternalGetNextChar(), System.Text.EncoderFallbackBuffer.InternalInitialize(), System.Text.EncoderNLS.MustFlush, and System.Text.EncoderFallbackBuffer.Remaining.