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

◆ TryParseInt64IntegerStyle()

static ParsingStatus System.Number.TryParseInt64IntegerStyle ( ReadOnlySpan< char > value,
NumberStyles styles,
NumberFormatInfo info,
out long result )
inlinestaticpackage

Definition at line 4492 of file Number.cs.

4493 {
4494 int i;
4495 int num;
4496 if (!value.IsEmpty)
4497 {
4498 i = 0;
4499 num = value[0];
4500 if ((styles & NumberStyles.AllowLeadingWhite) == 0 || !IsWhite(num))
4501 {
4502 goto IL_0048;
4503 }
4504 while (true)
4505 {
4506 i++;
4507 if ((uint)i >= (uint)value.Length)
4508 {
4509 break;
4510 }
4511 num = value[i];
4512 if (IsWhite(num))
4513 {
4514 continue;
4515 }
4516 goto IL_0048;
4517 }
4518 }
4519 goto IL_029f;
4520 IL_0292:
4521 long num2;
4522 int num3;
4523 result = num2 * num3;
4524 return ParsingStatus.OK;
4525 IL_02a8:
4526 result = 0L;
4527 return ParsingStatus.Overflow;
4528 IL_01a0:
4529 if (IsDigit(num))
4530 {
4531 goto IL_01ab;
4532 }
4533 goto IL_02b1;
4534 IL_028f:
4535 bool flag;
4536 if (!flag)
4537 {
4538 goto IL_0292;
4539 }
4540 goto IL_02a8;
4541 IL_0048:
4542 num3 = 1;
4543 if ((styles & NumberStyles.AllowLeadingSign) != 0)
4544 {
4545 if (info.HasInvariantNumberSigns)
4546 {
4547 if (num == 45)
4548 {
4549 num3 = -1;
4550 i++;
4551 if ((uint)i >= (uint)value.Length)
4552 {
4553 goto IL_029f;
4554 }
4555 num = value[i];
4556 }
4557 else if (num == 43)
4558 {
4559 i++;
4560 if ((uint)i >= (uint)value.Length)
4561 {
4562 goto IL_029f;
4563 }
4564 num = value[i];
4565 }
4566 }
4567 else if (info.AllowHyphenDuringParsing && num == 45)
4568 {
4569 num3 = -1;
4570 i++;
4571 if ((uint)i >= (uint)value.Length)
4572 {
4573 goto IL_029f;
4574 }
4575 num = value[i];
4576 }
4577 else
4578 {
4579 value = value.Slice(i);
4580 i = 0;
4581 string positiveSign = info.PositiveSign;
4582 string negativeSign = info.NegativeSign;
4583 if (!string.IsNullOrEmpty(positiveSign) && value.StartsWith(positiveSign))
4584 {
4585 i += positiveSign.Length;
4586 if ((uint)i >= (uint)value.Length)
4587 {
4588 goto IL_029f;
4589 }
4590 num = value[i];
4591 }
4592 else if (!string.IsNullOrEmpty(negativeSign) && value.StartsWith(negativeSign))
4593 {
4594 num3 = -1;
4595 i += negativeSign.Length;
4596 if ((uint)i >= (uint)value.Length)
4597 {
4598 goto IL_029f;
4599 }
4600 num = value[i];
4601 }
4602 }
4603 }
4604 flag = false;
4605 num2 = 0L;
4606 if (IsDigit(num))
4607 {
4608 if (num != 48)
4609 {
4610 goto IL_01ab;
4611 }
4612 while (true)
4613 {
4614 i++;
4615 if ((uint)i >= (uint)value.Length)
4616 {
4617 break;
4618 }
4619 num = value[i];
4620 if (num == 48)
4621 {
4622 continue;
4623 }
4624 goto IL_01a0;
4625 }
4626 goto IL_0292;
4627 }
4628 goto IL_029f;
4629 IL_01ab:
4630 num2 = num - 48;
4631 i++;
4632 int num4 = 0;
4633 while (num4 < 17)
4634 {
4635 if ((uint)i >= (uint)value.Length)
4636 {
4637 goto IL_0292;
4638 }
4639 num = value[i];
4640 if (IsDigit(num))
4641 {
4642 i++;
4643 num2 = 10 * num2 + num - 48;
4644 num4++;
4645 continue;
4646 }
4647 goto IL_02b1;
4648 }
4649 if ((uint)i >= (uint)value.Length)
4650 {
4651 goto IL_0292;
4652 }
4653 num = value[i];
4654 if (IsDigit(num))
4655 {
4656 i++;
4657 flag = num2 > 922337203685477580L;
4658 num2 = num2 * 10 + num - 48;
4659 flag = flag || (ulong)num2 > (ulong)(long.MaxValue + (long)(uint)(num3 >>> 31));
4660 if ((uint)i >= (uint)value.Length)
4661 {
4662 goto IL_028f;
4663 }
4664 num = value[i];
4665 while (IsDigit(num))
4666 {
4667 flag = true;
4668 i++;
4669 if ((uint)i < (uint)value.Length)
4670 {
4671 num = value[i];
4672 continue;
4673 }
4674 goto IL_02a8;
4675 }
4676 }
4677 goto IL_02b1;
4678 IL_02b1:
4679 if (IsWhite(num))
4680 {
4681 if ((styles & NumberStyles.AllowTrailingWhite) == 0)
4682 {
4683 goto IL_029f;
4684 }
4685 for (i++; i < value.Length && IsWhite(value[i]); i++)
4686 {
4687 }
4688 if ((uint)i >= (uint)value.Length)
4689 {
4690 goto IL_028f;
4691 }
4692 }
4693 if (TrailingZeros(value, i))
4694 {
4695 goto IL_028f;
4696 }
4697 goto IL_029f;
4698 IL_029f:
4699 result = 0L;
4700 return ParsingStatus.Failed;
4701 }
static bool IsWhite(int ch)
Definition Number.cs:5903
static bool TrailingZeros(ReadOnlySpan< char > value, int index)
Definition Number.cs:5845
static bool IsDigit(int ch)
Definition Number.cs:5912

References System.info, System.Number.IsDigit(), System.Number.IsWhite(), System.L, System.Number.TrailingZeros(), and System.value.

Referenced by System.Int64.TryParse(), System.Int64.TryParse(), System.Number.TryParseInt64(), and System.Enum.TryParseInt64Enum().