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

◆ ParseCanonicalName()

static string System.IPv6AddressHelper.ParseCanonicalName ( string str,
int start,
ref bool isLoopback,
ref string scopeId )
inlinestaticpackage

Definition at line 5 of file IPv6AddressHelper.cs.

6 {
7 Span<ushort> span = stackalloc ushort[8];
8 span.Clear();
9 Parse(str, span, start, ref scopeId);
10 isLoopback = IsLoopback(span);
11 (int longestSequenceStart, int longestSequenceLength) tuple = FindCompressionRange(span);
12 int item = tuple.longestSequenceStart;
13 int item2 = tuple.longestSequenceLength;
14 bool flag = ShouldHaveIpv4Embedded(span);
15 Span<char> span2 = stackalloc char[48];
16 span2[0] = '[';
17 int num = 1;
18 for (int i = 0; i < 8; i++)
19 {
20 int charsWritten;
21 if (flag && i == 6)
22 {
23 span2[num++] = ':';
24 bool flag2 = (span[i] >> 8).TryFormat(span2.Slice(num), out charsWritten);
25 num += charsWritten;
26 span2[num++] = '.';
27 flag2 = (span[i] & 0xFF).TryFormat(span2.Slice(num), out charsWritten);
28 num += charsWritten;
29 span2[num++] = '.';
30 flag2 = (span[i + 1] >> 8).TryFormat(span2.Slice(num), out charsWritten);
31 num += charsWritten;
32 span2[num++] = '.';
33 flag2 = (span[i + 1] & 0xFF).TryFormat(span2.Slice(num), out charsWritten);
34 num += charsWritten;
35 break;
36 }
37 if (item == i)
38 {
39 span2[num++] = ':';
40 }
41 if (item <= i && item2 == 8)
42 {
43 span2[num++] = ':';
44 break;
45 }
46 if (item > i || i >= item2)
47 {
48 if (i != 0)
49 {
50 span2[num++] = ':';
51 }
52 bool flag2 = span[i].TryFormat(span2.Slice(num), out charsWritten, "x");
53 num += charsWritten;
54 }
55 }
56 span2[num++] = ']';
57 return new string(span2.Slice(0, num));
58 }
static void Parse(ReadOnlySpan< char > address, Span< ushort > numbers, int start, ref string scopeId)
static bool IsLoopback(ReadOnlySpan< ushort > numbers)
static bool ShouldHaveIpv4Embedded(ReadOnlySpan< ushort > numbers)
static int int longestSequenceLength FindCompressionRange(ReadOnlySpan< ushort > numbers)

References System.Span< T >.Clear(), System.IPv6AddressHelper.FindCompressionRange(), System.IPv6AddressHelper.IsLoopback(), System.item, System.IPv6AddressHelper.longestSequenceStart, System.IPv6AddressHelper.Parse(), System.IPv6AddressHelper.ShouldHaveIpv4Embedded(), System.Span< T >.Slice(), System.start, and System.str.

Referenced by System.Uri.CreateHostStringHelper().