RSCG – StringLiteral
| name | StringLiteral |
| nuget | https://www.nuget.org/packages/StringLiteralGenerator/ |
| link | https://github.com/ufcpp/StringLiteralGenerator |
| author | Nobuyuki Iwanaga |
Optimizing memory for strings
This is how you can use StringLiteral .
The code that you start with is
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net7.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="StringLiteralGenerator" Version="2.0.0" />
</ItemGroup>
<PropertyGroup>
<EmitCompilerGeneratedFiles>true</EmitCompilerGeneratedFiles>
<CompilerGeneratedFilesOutputPath>$(BaseIntermediateOutputPath)\GX</CompilerGeneratedFilesOutputPath>
</PropertyGroup>
</Project>
The code that you will use is
using StringLiteralDemo; using System.Text; Console.WriteLine(Encoding.UTF8.GetString(LiteralConstants.MyName()));
namespace StringLiteralDemo;
partial class LiteralConstants
{
[StringLiteral.Utf8Attribute("Andrei Ignat")]
public static partial System.ReadOnlySpan<byte> MyName();
}
The code that is generated is
// <auto-generated />
namespace StringLiteralDemo
{
partial class LiteralConstants
{
public static partial System.ReadOnlySpan<byte> MyName() => new byte[] {65,110,100,114,101,105,32,73,103,110,97,116,};
}
}
// <auto-generated />
using System;
namespace StringLiteral
{
[System.Diagnostics.Conditional("COMPILE_TIME_ONLY")]
[AttributeUsage(AttributeTargets.Method,Inherited = false,AllowMultiple = false)]
sealed class Utf8Attribute : Attribute
{
public Utf8Attribute(string s) { }
}
}
Code and pdf at
https://ignatandrei.github.io/RSCG_Examples/v2/docs/StringLiteral
Leave a Reply