Skip to content

ignatandrei/RSCG_Utils

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

33 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

RSCG_Utils

Roslyn Source Code Generators Utils

pack to nuget

pack to nuget

Usage

Additional Files

Allow you to see additional files directly as C# const. For this, please add some .gen. files to the project.

In your csproj

<ItemGroup>
 	  <PackageReference Include="rscgutils" Version="2024.2000.2000" OutputItemType="Analyzer" ReferenceOutputAssembly="false" />
</ItemGroup>
<ItemGroup>
	<AdditionalFiles Include="Second.gen.txt" />
	<AdditionalFiles Include="first.gen.txt" />
	<AdditionalFiles Include="test\Afirst.gen.txt" />
	<AdditionalFiles Include="sql/**/*" />
</ItemGroup>

In the code

//see https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/tokens/raw-string
string x= MyAdditionalFiles.Second_gen_txt;

To debug, you can add into the .csproj

<PropertyGroup>
	<EmitCompilerGeneratedFiles>true</EmitCompilerGeneratedFiles>
	<CompilerGeneratedFilesOutputPath>$(BaseIntermediateOutputPath)\GeneratedX</CompilerGeneratedFilesOutputPath>
</PropertyGroup>

More details at http://msprogrammer.serviciipeweb.ro/2023/05/08/file-to-csharp-const/

Json2Class

If you have an additional json file, you can have a file from this

<ItemGroup>
	<AdditionalFiles Include="my.gen.json" />
</ItemGroup>

And you can have from the code

var json = System.Text.Json.JsonSerializer
    .Deserialize<GeneratedJson.my_gen_json>(MyAdditionalFiles.my_gen_json);

ArgumentNullException.ThrowIfNull( json );
Console.WriteLine( ":hosts"+json.AllowedHosts );

Memoization of function returns

Put _MemoPure and the return of the function will be memo-ized

public long Test_MemoPure()
{
    Console.WriteLine("calculating type");
    return this.GetType().ToString().GetHashCode();
}
public async Task<long> fib(long nr)
{
    await Task.Delay(1000);
    //Console.WriteLine("calculated value for " + nr);
    if (nr <= 1) return 1;
    if (nr == 2) return 2;
    return await fib(nr - 1) + await fib(nr - 1);
}

public async Task<long> fibonacci_MemoPure(long nr)
{
    if (nr <= 1) return 1;
    if (nr == 2) return 2;
    await Task.Delay(1000);
    return await fibonacci(nr - 1) + await fibonacci(nr - 1);

}

And call

fibTest f = new();
Console.WriteLine("first time :" + f.Test());
Console.WriteLine("second time :" + f.Test());

Console.WriteLine(DateTime.Now.ToString("mm_ss"));
Console.WriteLine("no memo :"+await f.fib(5));
Console.WriteLine(DateTime.Now.ToString("mm_ss"));
Console.WriteLine("memo :" + await f.fibonacci(5));
Console.WriteLine(DateTime.Now.ToString("mm_ss"));
Console.WriteLine("FAST memo :" + await f.fibonacci(5));
Console.WriteLine(DateTime.Now.ToString("mm_ss"));

More Roslyn Source Code Generators

You can find more RSCG with examples at Roslyn Source Code Generators

About

Roslyn Source Code Generators Utils

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors