Skip to content

Commit

Permalink
Optimize WriteEncodedStringAsync
Browse files Browse the repository at this point in the history
  • Loading branch information
sungam3r committed Jan 26, 2022
1 parent b41c261 commit 7d72b67
Showing 1 changed file with 19 additions and 2 deletions.
21 changes: 19 additions & 2 deletions src/GraphQLParser/Visitors/SDLPrinter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -998,11 +998,16 @@ private static async ValueTask WriteEncodedStringAsync(TContext context, ROM val
{
await context.WriteAsync("\"").ConfigureAwait(false);

int startIndexOfNotEncodedString = 0;
for (int i = 0; i < value.Span.Length; ++i)
{
char code = value.Span[i];
if (code < ' ')
{
if (startIndexOfNotEncodedString != i)
await context.WriteAsync(value.Slice(startIndexOfNotEncodedString, i - startIndexOfNotEncodedString)).ConfigureAwait(false);
startIndexOfNotEncodedString = i + 1;

if (code == '\b')
await context.WriteAsync("\\b").ConfigureAwait(false);
else if (code == '\f')
Expand All @@ -1017,13 +1022,25 @@ private static async ValueTask WriteEncodedStringAsync(TContext context, ROM val
await context.WriteAsync("\\u" + ((int)code).ToString("X4")).ConfigureAwait(false);
}
else if (code == '\\')
{
if (startIndexOfNotEncodedString != i)
await context.WriteAsync(value.Slice(startIndexOfNotEncodedString, i - startIndexOfNotEncodedString)).ConfigureAwait(false);
startIndexOfNotEncodedString = i + 1;

await context.WriteAsync("\\\\").ConfigureAwait(false);
}
else if (code == '"')
{
if (startIndexOfNotEncodedString != i)
await context.WriteAsync(value.Slice(startIndexOfNotEncodedString, i - startIndexOfNotEncodedString)).ConfigureAwait(false);
startIndexOfNotEncodedString = i + 1;

await context.WriteAsync("\\\"").ConfigureAwait(false);
else
await context.WriteAsync(value.Slice(i, 1)/*code*/).ConfigureAwait(false); // TODO: no method for char
}
}

if (startIndexOfNotEncodedString != value.Span.Length)
await context.WriteAsync(value.Slice(startIndexOfNotEncodedString, value.Span.Length - startIndexOfNotEncodedString)).ConfigureAwait(false);
await context.WriteAsync("\"").ConfigureAwait(false);
}
}
Expand Down

0 comments on commit 7d72b67

Please sign in to comment.