Terraria v1.4.4.9
Terraria source code documentation
All Classes Namespaces Files Functions Variables Enumerations Enumerator Properties Events Macros

◆ TryParseUInt32IntegerStyle()

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

Definition at line 4764 of file Number.cs.

4765 {
4766 int i;
4767 int num;
4768 if (!value.IsEmpty)
4769 {
4770 i = 0;
4771 num = value[0];
4772 if ((styles & NumberStyles.AllowLeadingWhite) == 0 || !IsWhite(num))
4773 {
4774 goto IL_0048;
4775 }
4776 while (true)
4777 {
4778 i++;
4779 if ((uint)i >= (uint)value.Length)
4780 {
4781 break;
4782 }
4783 num = value[i];
4784 if (IsWhite(num))
4785 {
4786 continue;
4787 }
4788 goto IL_0048;
4789 }
4790 }
4791 goto IL_0281;
4792 IL_01a7:
4793 int num2 = num - 48;
4794 i++;
4795 int num3 = 0;
4796 while (num3 < 8)
4797 {
4798 if ((uint)i >= (uint)value.Length)
4799 {
4800 goto IL_0275;
4801 }
4802 num = value[i];
4803 if (IsDigit(num))
4804 {
4805 i++;
4806 num2 = 10 * num2 + num - 48;
4807 num3++;
4808 continue;
4809 }
4810 goto IL_0293;
4811 }
4812 if ((uint)i >= (uint)value.Length)
4813 {
4814 goto IL_0275;
4815 }
4816 num = value[i];
4817 bool flag;
4818 if (IsDigit(num))
4819 {
4820 i++;
4821 flag = flag || (uint)num2 > 429496729u || (num2 == 429496729 && num > 53);
4822 num2 = num2 * 10 + num - 48;
4823 if ((uint)i >= (uint)value.Length)
4824 {
4825 goto IL_0275;
4826 }
4827 num = value[i];
4828 while (IsDigit(num))
4829 {
4830 flag = true;
4831 i++;
4832 if ((uint)i < (uint)value.Length)
4833 {
4834 num = value[i];
4835 continue;
4836 }
4837 goto IL_0289;
4838 }
4839 }
4840 goto IL_0293;
4841 IL_0278:
4842 result = (uint)num2;
4843 return ParsingStatus.OK;
4844 IL_019c:
4845 if (IsDigit(num))
4846 {
4847 goto IL_01a7;
4848 }
4849 flag = false;
4850 goto IL_0293;
4851 IL_0275:
4852 if (!flag)
4853 {
4854 goto IL_0278;
4855 }
4856 goto IL_0289;
4857 IL_0048:
4858 flag = false;
4859 if ((styles & NumberStyles.AllowLeadingSign) != 0)
4860 {
4861 if (info.HasInvariantNumberSigns)
4862 {
4863 if (num == 43)
4864 {
4865 i++;
4866 if ((uint)i >= (uint)value.Length)
4867 {
4868 goto IL_0281;
4869 }
4870 num = value[i];
4871 }
4872 else if (num == 45)
4873 {
4874 flag = true;
4875 i++;
4876 if ((uint)i >= (uint)value.Length)
4877 {
4878 goto IL_0281;
4879 }
4880 num = value[i];
4881 }
4882 }
4883 else if (info.AllowHyphenDuringParsing && num == 45)
4884 {
4885 flag = true;
4886 i++;
4887 if ((uint)i >= (uint)value.Length)
4888 {
4889 goto IL_0281;
4890 }
4891 num = value[i];
4892 }
4893 else
4894 {
4895 value = value.Slice(i);
4896 i = 0;
4897 string positiveSign = info.PositiveSign;
4898 string negativeSign = info.NegativeSign;
4899 if (!string.IsNullOrEmpty(positiveSign) && value.StartsWith(positiveSign))
4900 {
4901 i += positiveSign.Length;
4902 if ((uint)i >= (uint)value.Length)
4903 {
4904 goto IL_0281;
4905 }
4906 num = value[i];
4907 }
4908 else if (!string.IsNullOrEmpty(negativeSign) && value.StartsWith(negativeSign))
4909 {
4910 flag = true;
4911 i += negativeSign.Length;
4912 if ((uint)i >= (uint)value.Length)
4913 {
4914 goto IL_0281;
4915 }
4916 num = value[i];
4917 }
4918 }
4919 }
4920 num2 = 0;
4921 if (IsDigit(num))
4922 {
4923 if (num != 48)
4924 {
4925 goto IL_01a7;
4926 }
4927 while (true)
4928 {
4929 i++;
4930 if ((uint)i >= (uint)value.Length)
4931 {
4932 break;
4933 }
4934 num = value[i];
4935 if (num == 48)
4936 {
4937 continue;
4938 }
4939 goto IL_019c;
4940 }
4941 goto IL_0278;
4942 }
4943 goto IL_0281;
4944 IL_0293:
4945 if (IsWhite(num))
4946 {
4947 if ((styles & NumberStyles.AllowTrailingWhite) == 0)
4948 {
4949 goto IL_0281;
4950 }
4951 for (i++; i < value.Length && IsWhite(value[i]); i++)
4952 {
4953 }
4954 if ((uint)i >= (uint)value.Length)
4955 {
4956 goto IL_0275;
4957 }
4958 }
4959 if (TrailingZeros(value, i))
4960 {
4961 goto IL_0275;
4962 }
4963 goto IL_0281;
4964 IL_0289:
4965 result = 0u;
4966 return ParsingStatus.Overflow;
4967 IL_0281:
4968 result = 0u;
4969 return ParsingStatus.Failed;
4970 }
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.Number.TrailingZeros(), and System.value.

Referenced by System.UInt32.TryParse(), System.UInt32.TryParse(), System.Number.TryParseUInt32(), and System.Enum.TryParseUInt32Enum().