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

◆ GrabLongs()

static long System.ParseNumbers.GrabLongs ( int radix,
ReadOnlySpan< char > s,
ref int i,
bool isUnsigned )
inlinestaticprivate

Definition at line 396 of file ParseNumbers.cs.

397 {
398 ulong num = 0uL;
399 if (radix == 10 && !isUnsigned)
400 {
401 ulong num2 = 922337203685477580uL;
402 int result;
403 while (i < s.Length && IsDigit(s[i], radix, out result))
404 {
405 if (num > num2 || (long)num < 0L)
406 {
407 Number.ThrowOverflowException(TypeCode.Int64);
408 }
409 num = (ulong)((long)num * (long)radix + result);
410 i++;
411 }
412 if ((long)num < 0L && num != 9223372036854775808uL)
413 {
414 Number.ThrowOverflowException(TypeCode.Int64);
415 }
416 }
417 else
418 {
419 ulong num2 = radix switch
420 {
421 8 => 2305843009213693951uL,
422 16 => 1152921504606846975uL,
423 10 => 1844674407370955161uL,
424 _ => 9223372036854775807uL,
425 };
426 int result2;
427 while (i < s.Length && IsDigit(s[i], radix, out result2))
428 {
429 if (num > num2)
430 {
431 Number.ThrowOverflowException(TypeCode.UInt64);
432 }
433 ulong num3 = (ulong)((long)num * (long)radix + result2);
434 if (num3 < num)
435 {
436 Number.ThrowOverflowException(TypeCode.UInt64);
437 }
438 num = num3;
439 i++;
440 }
441 }
442 return (long)num;
443 }
static bool IsDigit(char c, int radix, out int result)

References System.ParseNumbers.IsDigit(), System.L, System.s, and System.Number.ThrowOverflowException().

Referenced by System.ParseNumbers.StringToLong().