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

◆ TryParseHalf()

static unsafe bool System.Number.TryParseHalf ( ReadOnlySpan< char > value,
NumberStyles styles,
NumberFormatInfo info,
out Half result )
inlinestaticpackage

Definition at line 5718 of file Number.cs.

5719 {
5720 byte* digits = stackalloc byte[21];
5721 NumberBuffer number = new NumberBuffer(NumberBufferKind.FloatingPoint, digits, 21);
5722 if (!TryStringToNumber(value, styles, ref number, info))
5723 {
5724 ReadOnlySpan<char> span = value.Trim();
5725 if (span.EqualsOrdinalIgnoreCase(info.PositiveInfinitySymbol))
5726 {
5727 result = Half.PositiveInfinity;
5728 }
5729 else if (span.EqualsOrdinalIgnoreCase(info.NegativeInfinitySymbol))
5730 {
5731 result = Half.NegativeInfinity;
5732 }
5733 else if (span.EqualsOrdinalIgnoreCase(info.NaNSymbol))
5734 {
5735 result = Half.NaN;
5736 }
5737 else if (span.StartsWith(info.PositiveSign, StringComparison.OrdinalIgnoreCase))
5738 {
5739 span = span.Slice(info.PositiveSign.Length);
5740 if (!info.PositiveInfinitySymbol.StartsWith(info.PositiveSign, StringComparison.OrdinalIgnoreCase) && span.EqualsOrdinalIgnoreCase(info.PositiveInfinitySymbol))
5741 {
5742 result = Half.PositiveInfinity;
5743 }
5744 else
5745 {
5746 if (info.NaNSymbol.StartsWith(info.PositiveSign, StringComparison.OrdinalIgnoreCase) || !span.EqualsOrdinalIgnoreCase(info.NaNSymbol))
5747 {
5748 result = (Half)0f;
5749 return false;
5750 }
5751 result = Half.NaN;
5752 }
5753 }
5754 else if (span.StartsWith(info.NegativeSign, StringComparison.OrdinalIgnoreCase) && !info.NaNSymbol.StartsWith(info.NegativeSign, StringComparison.OrdinalIgnoreCase) && span.Slice(info.NegativeSign.Length).EqualsOrdinalIgnoreCase(info.NaNSymbol))
5755 {
5756 result = Half.NaN;
5757 }
5758 else
5759 {
5760 if (!info.AllowHyphenDuringParsing || !SpanStartsWith(span, '-') || info.NaNSymbol.StartsWith(info.NegativeSign, StringComparison.OrdinalIgnoreCase) || info.NaNSymbol.StartsWith('-') || !span.Slice(1).EqualsOrdinalIgnoreCase(info.NaNSymbol))
5761 {
5762 result = (Half)0f;
5763 return false;
5764 }
5765 result = Half.NaN;
5766 }
5767 }
5768 else
5769 {
5770 result = NumberToHalf(ref number);
5771 }
5772 return true;
5773 }
static bool SpanStartsWith(ReadOnlySpan< char > span, char c)
Definition Number.cs:5656
static Half NumberToHalf(ref NumberBuffer number)
Definition Number.cs:5972
static unsafe bool TryStringToNumber(ReadOnlySpan< char > value, NumberStyles styles, ref NumberBuffer number, NumberFormatInfo info)
Definition Number.cs:5832

References System.info, System.Half.NaN, System.Half.NegativeInfinity, System.Number.NumberToHalf(), System.Half.PositiveInfinity, System.ReadOnlySpan< T >.Slice(), System.Number.SpanStartsWith(), System.Number.TryStringToNumber(), and System.value.

Referenced by System.Number.ParseHalf(), and System.Half.TryParse().