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

◆ TryParseUInt64IntegerStyle()

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

Definition at line 5148 of file Number.cs.

5149 {
5150 int i;
5151 int num;
5152 if (!value.IsEmpty)
5153 {
5154 i = 0;
5155 num = value[0];
5156 if ((styles & NumberStyles.AllowLeadingWhite) == 0 || !IsWhite(num))
5157 {
5158 goto IL_0048;
5159 }
5160 while (true)
5161 {
5162 i++;
5163 if ((uint)i >= (uint)value.Length)
5164 {
5165 break;
5166 }
5167 num = value[i];
5168 if (IsWhite(num))
5169 {
5170 continue;
5171 }
5172 goto IL_0048;
5173 }
5174 }
5175 goto IL_0295;
5176 IL_01a8:
5177 long num2 = num - 48;
5178 i++;
5179 int num3 = 0;
5180 while (num3 < 18)
5181 {
5182 if ((uint)i >= (uint)value.Length)
5183 {
5184 goto IL_0289;
5185 }
5186 num = value[i];
5187 if (IsDigit(num))
5188 {
5189 i++;
5190 num2 = 10 * num2 + num - 48;
5191 num3++;
5192 continue;
5193 }
5194 goto IL_02a9;
5195 }
5196 if ((uint)i >= (uint)value.Length)
5197 {
5198 goto IL_0289;
5199 }
5200 num = value[i];
5201 bool flag;
5202 if (IsDigit(num))
5203 {
5204 i++;
5205 flag = flag || (ulong)num2 > 1844674407370955161uL || (num2 == 1844674407370955161L && num > 53);
5206 num2 = num2 * 10 + num - 48;
5207 if ((uint)i >= (uint)value.Length)
5208 {
5209 goto IL_0289;
5210 }
5211 num = value[i];
5212 while (IsDigit(num))
5213 {
5214 flag = true;
5215 i++;
5216 if ((uint)i < (uint)value.Length)
5217 {
5218 num = value[i];
5219 continue;
5220 }
5221 goto IL_029e;
5222 }
5223 }
5224 goto IL_02a9;
5225 IL_028c:
5226 result = (ulong)num2;
5227 return ParsingStatus.OK;
5228 IL_019d:
5229 if (IsDigit(num))
5230 {
5231 goto IL_01a8;
5232 }
5233 flag = false;
5234 goto IL_02a9;
5235 IL_0289:
5236 if (!flag)
5237 {
5238 goto IL_028c;
5239 }
5240 goto IL_029e;
5241 IL_0048:
5242 flag = false;
5243 if ((styles & NumberStyles.AllowLeadingSign) != 0)
5244 {
5245 if (info.HasInvariantNumberSigns)
5246 {
5247 if (num == 43)
5248 {
5249 i++;
5250 if ((uint)i >= (uint)value.Length)
5251 {
5252 goto IL_0295;
5253 }
5254 num = value[i];
5255 }
5256 else if (num == 45)
5257 {
5258 flag = true;
5259 i++;
5260 if ((uint)i >= (uint)value.Length)
5261 {
5262 goto IL_0295;
5263 }
5264 num = value[i];
5265 }
5266 }
5267 else if (info.AllowHyphenDuringParsing && num == 45)
5268 {
5269 flag = true;
5270 i++;
5271 if ((uint)i >= (uint)value.Length)
5272 {
5273 goto IL_0295;
5274 }
5275 num = value[i];
5276 }
5277 else
5278 {
5279 value = value.Slice(i);
5280 i = 0;
5281 string positiveSign = info.PositiveSign;
5282 string negativeSign = info.NegativeSign;
5283 if (!string.IsNullOrEmpty(positiveSign) && value.StartsWith(positiveSign))
5284 {
5285 i += positiveSign.Length;
5286 if ((uint)i >= (uint)value.Length)
5287 {
5288 goto IL_0295;
5289 }
5290 num = value[i];
5291 }
5292 else if (!string.IsNullOrEmpty(negativeSign) && value.StartsWith(negativeSign))
5293 {
5294 flag = true;
5295 i += negativeSign.Length;
5296 if ((uint)i >= (uint)value.Length)
5297 {
5298 goto IL_0295;
5299 }
5300 num = value[i];
5301 }
5302 }
5303 }
5304 num2 = 0L;
5305 if (IsDigit(num))
5306 {
5307 if (num != 48)
5308 {
5309 goto IL_01a8;
5310 }
5311 while (true)
5312 {
5313 i++;
5314 if ((uint)i >= (uint)value.Length)
5315 {
5316 break;
5317 }
5318 num = value[i];
5319 if (num == 48)
5320 {
5321 continue;
5322 }
5323 goto IL_019d;
5324 }
5325 goto IL_028c;
5326 }
5327 goto IL_0295;
5328 IL_02a9:
5329 if (IsWhite(num))
5330 {
5331 if ((styles & NumberStyles.AllowTrailingWhite) == 0)
5332 {
5333 goto IL_0295;
5334 }
5335 for (i++; i < value.Length && IsWhite(value[i]); i++)
5336 {
5337 }
5338 if ((uint)i >= (uint)value.Length)
5339 {
5340 goto IL_0289;
5341 }
5342 }
5343 if (TrailingZeros(value, i))
5344 {
5345 goto IL_0289;
5346 }
5347 goto IL_0295;
5348 IL_029e:
5349 result = 0uL;
5350 return ParsingStatus.Overflow;
5351 IL_0295:
5352 result = 0uL;
5353 return ParsingStatus.Failed;
5354 }
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.UInt64.TryParse(), System.UInt64.TryParse(), System.Number.TryParseUInt64(), and System.Enum.TryParseUInt64Enum().