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

◆ TryParseExactX()

static bool System.Guid.TryParseExactX ( ReadOnlySpan< char > guidString,
ref GuidResult result )
inlinestaticprivate

Definition at line 455 of file Guid.cs.

456 {
457 guidString = EatAllWhitespace(guidString);
458 if (guidString.Length == 0 || guidString[0] != '{')
459 {
460 result.SetFailure(overflow: false, "Format_GuidBrace");
461 return false;
462 }
463 if (!IsHexPrefix(guidString, 1))
464 {
465 result.SetFailure(overflow: false, "Format_GuidHexPrefix");
466 return false;
467 }
468 int num = 3;
469 int num2 = guidString.Slice(num).IndexOf(',');
470 if (num2 <= 0)
471 {
472 result.SetFailure(overflow: false, "Format_GuidComma");
473 return false;
474 }
475 bool overflow = false;
476 if (!TryParseHex(guidString.Slice(num, num2), out result._a, ref overflow) || overflow)
477 {
478 result.SetFailure(overflow, overflow ? "Overflow_UInt32" : "Format_GuidInvalidChar");
479 return false;
480 }
481 if (!IsHexPrefix(guidString, num + num2 + 1))
482 {
483 result.SetFailure(overflow: false, "Format_GuidHexPrefix");
484 return false;
485 }
486 num = num + num2 + 3;
487 num2 = guidString.Slice(num).IndexOf(',');
488 if (num2 <= 0)
489 {
490 result.SetFailure(overflow: false, "Format_GuidComma");
491 return false;
492 }
493 if (!TryParseHex(guidString.Slice(num, num2), out result._b, ref overflow) || overflow)
494 {
495 result.SetFailure(overflow, overflow ? "Overflow_UInt32" : "Format_GuidInvalidChar");
496 return false;
497 }
498 if (!IsHexPrefix(guidString, num + num2 + 1))
499 {
500 result.SetFailure(overflow: false, "Format_GuidHexPrefix");
501 return false;
502 }
503 num = num + num2 + 3;
504 num2 = guidString.Slice(num).IndexOf(',');
505 if (num2 <= 0)
506 {
507 result.SetFailure(overflow: false, "Format_GuidComma");
508 return false;
509 }
510 if (!TryParseHex(guidString.Slice(num, num2), out result._c, ref overflow) || overflow)
511 {
512 result.SetFailure(overflow, overflow ? "Overflow_UInt32" : "Format_GuidInvalidChar");
513 return false;
514 }
515 if ((uint)guidString.Length <= (uint)(num + num2 + 1) || guidString[num + num2 + 1] != '{')
516 {
517 result.SetFailure(overflow: false, "Format_GuidBrace");
518 return false;
519 }
520 num2++;
521 for (int i = 0; i < 8; i++)
522 {
523 if (!IsHexPrefix(guidString, num + num2 + 1))
524 {
525 result.SetFailure(overflow: false, "Format_GuidHexPrefix");
526 return false;
527 }
528 num = num + num2 + 3;
529 if (i < 7)
530 {
531 num2 = guidString.Slice(num).IndexOf(',');
532 if (num2 <= 0)
533 {
534 result.SetFailure(overflow: false, "Format_GuidComma");
535 return false;
536 }
537 }
538 else
539 {
540 num2 = guidString.Slice(num).IndexOf('}');
541 if (num2 <= 0)
542 {
543 result.SetFailure(overflow: false, "Format_GuidBraceAfterLastNumber");
544 return false;
545 }
546 }
547 if (!TryParseHex(guidString.Slice(num, num2), out uint result2, ref overflow) || overflow || result2 > 255)
548 {
549 result.SetFailure(overflow, overflow ? "Overflow_UInt32" : ((result2 > 255) ? "Overflow_Byte" : "Format_GuidInvalidChar"));
550 return false;
551 }
552 Unsafe.Add(ref result._d, i) = (byte)result2;
553 }
554 if (num + num2 + 1 >= guidString.Length || guidString[num + num2 + 1] != '}')
555 {
556 result.SetFailure(overflow: false, "Format_GuidEndBrace");
557 return false;
558 }
559 if (num + num2 + 1 != guidString.Length - 1)
560 {
561 result.SetFailure(overflow: false, "Format_ExtraJunkAtEnd");
562 return false;
563 }
564 return true;
565 }
static ReadOnlySpan< char > EatAllWhitespace(ReadOnlySpan< char > str)
Definition Guid.cs:644
static bool IsHexPrefix(ReadOnlySpan< char > str, int i)
Definition Guid.cs:672
static bool TryParseHex(ReadOnlySpan< char > guidString, out ushort result, ref bool overflow)
Definition Guid.cs:587
ReadOnlySpan< T > Slice(int start)

References System.Guid.EatAllWhitespace(), System.Guid.IsHexPrefix(), System.ReadOnlySpan< T >.Length, System.ReadOnlySpan< T >.Slice(), and System.Guid.TryParseHex().

Referenced by System.Guid.ParseExact(), System.Guid.TryParseExact(), and System.Guid.TryParseGuid().