From c7458019bc376c91423a13edc142ca09fab040db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Franti=C5=A1ek=20Boh=C3=A1=C4=8Dek?= Date: Sun, 2 Jan 2022 21:52:02 +0100 Subject: [PATCH] feat: use ReadOnlySpan in inline deserializers --- .../BasicInlineConverterGenerator.cs | 12 ++++++------ .../BoolInlineConverterGenerator.cs | 12 ++++++------ .../EnumInlineConverterGenerator.cs | 12 ++++++------ .../FallbackInlineConverterGenerator.cs | 2 +- .../ListInlineConverterGenerator.cs | 2 +- .../StringInlineConverterGenerator.cs | 8 ++++---- 6 files changed, 24 insertions(+), 24 deletions(-) diff --git a/Core/NosSmooth.PacketSerializersGenerator/InlineConverterGenerators/BasicInlineConverterGenerator.cs b/Core/NosSmooth.PacketSerializersGenerator/InlineConverterGenerators/BasicInlineConverterGenerator.cs index 232c90b..df1c853 100644 --- a/Core/NosSmooth.PacketSerializersGenerator/InlineConverterGenerators/BasicInlineConverterGenerator.cs +++ b/Core/NosSmooth.PacketSerializersGenerator/InlineConverterGenerators/BasicInlineConverterGenerator.cs @@ -57,7 +57,7 @@ public class BasicInlineConverterGenerator : IInlineConverterGenerator throw new Exception("TypeSyntax or TypeSymbol has to be non null."); } - textWriter.WriteLine($"{Constants.HelperClass}.ParseBasic{type}(typeConverter, stringEnumerator);"); + textWriter.WriteLine($"{Constants.HelperClass}.ParseBasic{type}(typeConverter, ref stringEnumerator);"); return null; } @@ -67,23 +67,23 @@ public class BasicInlineConverterGenerator : IInlineConverterGenerator foreach (var type in HandleTypes) { textWriter.WriteMultiline($@" -public static Result<{type}?> ParseBasic{type}(IStringConverter typeConverter, PacketStringEnumerator stringEnumerator) +public static Result<{type}?> ParseBasic{type}(IStringConverter typeConverter, ref PacketStringEnumerator stringEnumerator) {{ - var tokenResult = stringEnumerator.GetNextToken(); + var tokenResult = stringEnumerator.GetNextToken(out var packetToken); if (!tokenResult.IsSuccess) {{ return Result<{type}?>.FromError(tokenResult); }} - var token = tokenResult.Entity.Token; - if (token == ""-"") + var token = packetToken.Token; + if (token[0] == '-' && token.Length == 1) {{ return Result<{type}?>.FromSuccess(null); }} if (!{type}.TryParse(token, out var val)) {{ - return new CouldNotConvertError(typeConverter, token, ""Could not convert as {type} in inline converter""); + return new CouldNotConvertError(typeConverter, token.ToString(), ""Could not convert as {type} in inline converter""); }} return val; diff --git a/Core/NosSmooth.PacketSerializersGenerator/InlineConverterGenerators/BoolInlineConverterGenerator.cs b/Core/NosSmooth.PacketSerializersGenerator/InlineConverterGenerators/BoolInlineConverterGenerator.cs index 07ad39a..ca9c1d0 100644 --- a/Core/NosSmooth.PacketSerializersGenerator/InlineConverterGenerators/BoolInlineConverterGenerator.cs +++ b/Core/NosSmooth.PacketSerializersGenerator/InlineConverterGenerators/BoolInlineConverterGenerator.cs @@ -44,7 +44,7 @@ public class BoolInlineConverterGenerator : IInlineConverterGenerator /// public IError? CallDeserialize(IndentedTextWriter textWriter, TypeSyntax? typeSyntax, ITypeSymbol? typeSymbol) { - textWriter.WriteLine($"{Constants.HelperClass}.ParseBool(stringEnumerator);"); + textWriter.WriteLine($"{Constants.HelperClass}.ParseBool(ref stringEnumerator);"); return null; } @@ -52,21 +52,21 @@ public class BoolInlineConverterGenerator : IInlineConverterGenerator public void GenerateHelperMethods(IndentedTextWriter textWriter) { textWriter.WriteLine(@" -public static Result ParseBool(PacketStringEnumerator stringEnumerator) +public static Result ParseBool(ref PacketStringEnumerator stringEnumerator) {{ - var tokenResult = stringEnumerator.GetNextToken(); + var tokenResult = stringEnumerator.GetNextToken(out var packetToken); if (!tokenResult.IsSuccess) {{ return Result.FromError(tokenResult); }} - var token = tokenResult.Entity.Token; - if (token == ""-"") + var token = packetToken.Token; + if (token[0] == '-') {{ return Result.FromSuccess(null); }} - return token == ""1"" ? true : false; + return token[0] == '1' ? true : false; }} "); } diff --git a/Core/NosSmooth.PacketSerializersGenerator/InlineConverterGenerators/EnumInlineConverterGenerator.cs b/Core/NosSmooth.PacketSerializersGenerator/InlineConverterGenerators/EnumInlineConverterGenerator.cs index 0e15f3d..51d4b3d 100644 --- a/Core/NosSmooth.PacketSerializersGenerator/InlineConverterGenerators/EnumInlineConverterGenerator.cs +++ b/Core/NosSmooth.PacketSerializersGenerator/InlineConverterGenerators/EnumInlineConverterGenerator.cs @@ -66,7 +66,7 @@ public class EnumInlineConverterGenerator : IInlineConverterGenerator textWriter.WriteLine ( - $"{Constants.HelperClass}.ParseEnum{typeSymbol?.ToString().TrimEnd('?').Replace('.', '_')}(typeConverter, stringEnumerator);" + $"{Constants.HelperClass}.ParseEnum{typeSymbol?.ToString().TrimEnd('?').Replace('.', '_')}(typeConverter, ref stringEnumerator);" ); return null; } @@ -80,23 +80,23 @@ public class EnumInlineConverterGenerator : IInlineConverterGenerator textWriter.WriteMultiline ( $@" -public static Result<{type}?> ParseEnum{type.ToString().Replace('.', '_')}(IStringConverter typeConverter, PacketStringEnumerator stringEnumerator) +public static Result<{type}?> ParseEnum{type.ToString().Replace('.', '_')}(IStringConverter typeConverter, ref PacketStringEnumerator stringEnumerator) {{ - var tokenResult = stringEnumerator.GetNextToken(); + var tokenResult = stringEnumerator.GetNextToken(out var packetToken); if (!tokenResult.IsSuccess) {{ return Result<{type}?>.FromError(tokenResult); }} - var token = tokenResult.Entity.Token; - if (token == ""-"") + var token = packetToken.Token; + if (token[0] == '-') {{ return Result<{type}?>.FromSuccess(null); }} if (!{underlyingType}.TryParse(token, out var val)) {{ - return new CouldNotConvertError(typeConverter, token, ""Could not convert as {type} in inline converter""); + return new CouldNotConvertError(typeConverter, token.ToString(), ""Could not convert as {type} in inline converter""); }} return ({type}?)val; diff --git a/Core/NosSmooth.PacketSerializersGenerator/InlineConverterGenerators/FallbackInlineConverterGenerator.cs b/Core/NosSmooth.PacketSerializersGenerator/InlineConverterGenerators/FallbackInlineConverterGenerator.cs index 9825c3e..d0b844c 100644 --- a/Core/NosSmooth.PacketSerializersGenerator/InlineConverterGenerators/FallbackInlineConverterGenerator.cs +++ b/Core/NosSmooth.PacketSerializersGenerator/InlineConverterGenerators/FallbackInlineConverterGenerator.cs @@ -48,7 +48,7 @@ public class FallbackInlineConverterGenerator : IInlineConverterGenerator { textWriter.WriteLine ( - $"_stringSerializer.Deserialize<{(typeSyntax?.ToString() ?? typeSymbol!.ToString()).TrimEnd('?')}?>(stringEnumerator);" + $"_stringSerializer.Deserialize<{(typeSyntax?.ToString() ?? typeSymbol!.ToString()).TrimEnd('?')}?>(ref stringEnumerator);" ); return null; } diff --git a/Core/NosSmooth.PacketSerializersGenerator/InlineConverterGenerators/ListInlineConverterGenerator.cs b/Core/NosSmooth.PacketSerializersGenerator/InlineConverterGenerators/ListInlineConverterGenerator.cs index 59b6f80..fef8e89 100644 --- a/Core/NosSmooth.PacketSerializersGenerator/InlineConverterGenerators/ListInlineConverterGenerator.cs +++ b/Core/NosSmooth.PacketSerializersGenerator/InlineConverterGenerators/ListInlineConverterGenerator.cs @@ -129,7 +129,7 @@ public static Result> {GetMethodName(type) // or the packet has more fields. while (stringEnumerator.IsOnLastToken() == false) {{ - stringEnumerator.GetNextToken(); + stringEnumerator.GetNextToken(out _); }} stringEnumerator.PopLevel(); diff --git a/Core/NosSmooth.PacketSerializersGenerator/InlineConverterGenerators/StringInlineConverterGenerator.cs b/Core/NosSmooth.PacketSerializersGenerator/InlineConverterGenerators/StringInlineConverterGenerator.cs index a71a93b..81df8bd 100644 --- a/Core/NosSmooth.PacketSerializersGenerator/InlineConverterGenerators/StringInlineConverterGenerator.cs +++ b/Core/NosSmooth.PacketSerializersGenerator/InlineConverterGenerators/StringInlineConverterGenerator.cs @@ -30,7 +30,7 @@ public class StringInlineConverterGenerator : IInlineConverterGenerator /// public IError? CallDeserialize(IndentedTextWriter textWriter, TypeSyntax? typeSyntax, ITypeSymbol? typeSymbol) { - textWriter.WriteLine($"{Constants.HelperClass}.ParseString(stringEnumerator);"); + textWriter.WriteLine($"{Constants.HelperClass}.ParseString(ref stringEnumerator);"); return null; } @@ -40,15 +40,15 @@ public class StringInlineConverterGenerator : IInlineConverterGenerator textWriter.WriteLine ( @" -public static Result ParseString(PacketStringEnumerator stringEnumerator) +public static Result ParseString(ref PacketStringEnumerator stringEnumerator) {{ - var tokenResult = stringEnumerator.GetNextToken(); + var tokenResult = stringEnumerator.GetNextToken(out var packetToken); if (!tokenResult.IsSuccess) {{ return Result.FromError(tokenResult); }} - return tokenResult.Entity.Token; + return packetToken.Token.ToString(); }} " ); -- 2.49.0