Skip to content

Commit f8bd960

Browse files
committed
Optimize Guid formatting
1 parent d391453 commit f8bd960

2 files changed

Lines changed: 215 additions & 358 deletions

File tree

src/libraries/System.Private.CoreLib/src/System/Buffers/Text/Utf8Formatter/Utf8Formatter.Guid.cs

Lines changed: 22 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -28,29 +28,32 @@ public static partial class Utf8Formatter
2828
/// </exceptions>
2929
public static bool TryFormat(Guid value, Span<byte> destination, out int bytesWritten, StandardFormat format = default)
3030
{
31-
int flags;
32-
33-
switch (FormattingHelpers.GetSymbolOrDefault(format, 'D'))
31+
int flags = format.Symbol;
32+
if (flags is '\0' or 'D')
3433
{
35-
case 'D': // nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn
36-
flags = 36 + Guid.TryFormatFlags_UseDashes;
37-
break;
38-
39-
case 'B': // {nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn}
40-
flags = 38 + Guid.TryFormatFlags_UseDashes + Guid.TryFormatFlags_CurlyBraces;
41-
break;
34+
// nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn
35+
flags = 36 + Guid.TryFormatFlags_UseDashes;
36+
}
37+
else
38+
{
39+
switch (flags)
40+
{
41+
case 'N': // nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
42+
flags = 32;
43+
break;
4244

43-
case 'P': // (nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn)
44-
flags = 38 + Guid.TryFormatFlags_UseDashes + Guid.TryFormatFlags_Parens;
45-
break;
45+
case 'B': // {nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn}
46+
flags = 38 + Guid.TryFormatFlags_UseDashes + Guid.TryFormatFlags_CurlyBraces;
47+
break;
4648

47-
case 'N': // nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
48-
flags = 32;
49-
break;
49+
case 'P': // (nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn)
50+
flags = 38 + Guid.TryFormatFlags_UseDashes + Guid.TryFormatFlags_Parens;
51+
break;
5052

51-
default:
52-
ThrowHelper.ThrowFormatException_BadFormatSpecifier();
53-
goto case 'D'; // unreachable
53+
default:
54+
ThrowHelper.ThrowFormatException_BadFormatSpecifier();
55+
break; // unreachable
56+
}
5457
}
5558

5659
return value.TryFormatCore(destination, out bytesWritten, flags);

0 commit comments

Comments
 (0)