Skip to content

Commit 596f1a4

Browse files
committed
+ TT templates
1 parent 9115b9b commit 596f1a4

16 files changed

+14191
-3
lines changed
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<OutputType>Exe</OutputType>
5+
<TargetFramework>net9.0</TargetFramework>
6+
<ImplicitUsings>enable</ImplicitUsings>
7+
<Nullable>enable</Nullable>
8+
</PropertyGroup>
9+
10+
<ItemGroup>
11+
<PackageReference Include="BenchmarkDotNet" Version="0.14.0" />
12+
</ItemGroup>
13+
14+
<ItemGroup>
15+
<ProjectReference Include="..\..\src\TinyEcs.csproj" />
16+
</ItemGroup>
17+
18+
</Project>

src/TinyEcs.Archetypes.g.cs

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
#pragma warning disable 1591
2+
#nullable enable
3+
4+
using System;
5+
using System.Collections.Generic;
6+
7+
namespace TinyEcs
8+
{
9+
public partial class World
10+
{
11+
/// <inheritdoc cref="World.Archetype(Span{EcsID})"/>
12+
public Archetype Archetype<T0>()
13+
where T0 : struct
14+
=> Archetype(Component<T0>());
15+
16+
/// <inheritdoc cref="World.Archetype(Span{EcsID})"/>
17+
public Archetype Archetype<T0, T1>()
18+
where T0 : struct where T1 : struct
19+
=> Archetype(Component<T0>(), Component<T1>());
20+
21+
/// <inheritdoc cref="World.Archetype(Span{EcsID})"/>
22+
public Archetype Archetype<T0, T1, T2>()
23+
where T0 : struct where T1 : struct where T2 : struct
24+
=> Archetype(Component<T0>(), Component<T1>(), Component<T2>());
25+
26+
/// <inheritdoc cref="World.Archetype(Span{EcsID})"/>
27+
public Archetype Archetype<T0, T1, T2, T3>()
28+
where T0 : struct where T1 : struct where T2 : struct where T3 : struct
29+
=> Archetype(Component<T0>(), Component<T1>(), Component<T2>(), Component<T3>());
30+
31+
/// <inheritdoc cref="World.Archetype(Span{EcsID})"/>
32+
public Archetype Archetype<T0, T1, T2, T3, T4>()
33+
where T0 : struct where T1 : struct where T2 : struct where T3 : struct where T4 : struct
34+
=> Archetype(Component<T0>(), Component<T1>(), Component<T2>(), Component<T3>(), Component<T4>());
35+
36+
/// <inheritdoc cref="World.Archetype(Span{EcsID})"/>
37+
public Archetype Archetype<T0, T1, T2, T3, T4, T5>()
38+
where T0 : struct where T1 : struct where T2 : struct where T3 : struct where T4 : struct where T5 : struct
39+
=> Archetype(Component<T0>(), Component<T1>(), Component<T2>(), Component<T3>(), Component<T4>(), Component<T5>());
40+
41+
/// <inheritdoc cref="World.Archetype(Span{EcsID})"/>
42+
public Archetype Archetype<T0, T1, T2, T3, T4, T5, T6>()
43+
where T0 : struct where T1 : struct where T2 : struct where T3 : struct where T4 : struct where T5 : struct where T6 : struct
44+
=> Archetype(Component<T0>(), Component<T1>(), Component<T2>(), Component<T3>(), Component<T4>(), Component<T5>(), Component<T6>());
45+
46+
/// <inheritdoc cref="World.Archetype(Span{EcsID})"/>
47+
public Archetype Archetype<T0, T1, T2, T3, T4, T5, T6, T7>()
48+
where T0 : struct where T1 : struct where T2 : struct where T3 : struct where T4 : struct where T5 : struct where T6 : struct where T7 : struct
49+
=> Archetype(Component<T0>(), Component<T1>(), Component<T2>(), Component<T3>(), Component<T4>(), Component<T5>(), Component<T6>(), Component<T7>());
50+
51+
/// <inheritdoc cref="World.Archetype(Span{EcsID})"/>
52+
public Archetype Archetype<T0, T1, T2, T3, T4, T5, T6, T7, T8>()
53+
where T0 : struct where T1 : struct where T2 : struct where T3 : struct where T4 : struct where T5 : struct where T6 : struct where T7 : struct where T8 : struct
54+
=> Archetype(Component<T0>(), Component<T1>(), Component<T2>(), Component<T3>(), Component<T4>(), Component<T5>(), Component<T6>(), Component<T7>(), Component<T8>());
55+
56+
/// <inheritdoc cref="World.Archetype(Span{EcsID})"/>
57+
public Archetype Archetype<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9>()
58+
where T0 : struct where T1 : struct where T2 : struct where T3 : struct where T4 : struct where T5 : struct where T6 : struct where T7 : struct where T8 : struct where T9 : struct
59+
=> Archetype(Component<T0>(), Component<T1>(), Component<T2>(), Component<T3>(), Component<T4>(), Component<T5>(), Component<T6>(), Component<T7>(), Component<T8>(), Component<T9>());
60+
61+
/// <inheritdoc cref="World.Archetype(Span{EcsID})"/>
62+
public Archetype Archetype<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>()
63+
where T0 : struct where T1 : struct where T2 : struct where T3 : struct where T4 : struct where T5 : struct where T6 : struct where T7 : struct where T8 : struct where T9 : struct where T10 : struct
64+
=> Archetype(Component<T0>(), Component<T1>(), Component<T2>(), Component<T3>(), Component<T4>(), Component<T5>(), Component<T6>(), Component<T7>(), Component<T8>(), Component<T9>(), Component<T10>());
65+
66+
/// <inheritdoc cref="World.Archetype(Span{EcsID})"/>
67+
public Archetype Archetype<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>()
68+
where T0 : struct where T1 : struct where T2 : struct where T3 : struct where T4 : struct where T5 : struct where T6 : struct where T7 : struct where T8 : struct where T9 : struct where T10 : struct where T11 : struct
69+
=> Archetype(Component<T0>(), Component<T1>(), Component<T2>(), Component<T3>(), Component<T4>(), Component<T5>(), Component<T6>(), Component<T7>(), Component<T8>(), Component<T9>(), Component<T10>(), Component<T11>());
70+
71+
/// <inheritdoc cref="World.Archetype(Span{EcsID})"/>
72+
public Archetype Archetype<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>()
73+
where T0 : struct where T1 : struct where T2 : struct where T3 : struct where T4 : struct where T5 : struct where T6 : struct where T7 : struct where T8 : struct where T9 : struct where T10 : struct where T11 : struct where T12 : struct
74+
=> Archetype(Component<T0>(), Component<T1>(), Component<T2>(), Component<T3>(), Component<T4>(), Component<T5>(), Component<T6>(), Component<T7>(), Component<T8>(), Component<T9>(), Component<T10>(), Component<T11>(), Component<T12>());
75+
76+
/// <inheritdoc cref="World.Archetype(Span{EcsID})"/>
77+
public Archetype Archetype<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>()
78+
where T0 : struct where T1 : struct where T2 : struct where T3 : struct where T4 : struct where T5 : struct where T6 : struct where T7 : struct where T8 : struct where T9 : struct where T10 : struct where T11 : struct where T12 : struct where T13 : struct
79+
=> Archetype(Component<T0>(), Component<T1>(), Component<T2>(), Component<T3>(), Component<T4>(), Component<T5>(), Component<T6>(), Component<T7>(), Component<T8>(), Component<T9>(), Component<T10>(), Component<T11>(), Component<T12>(), Component<T13>());
80+
81+
/// <inheritdoc cref="World.Archetype(Span{EcsID})"/>
82+
public Archetype Archetype<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>()
83+
where T0 : struct where T1 : struct where T2 : struct where T3 : struct where T4 : struct where T5 : struct where T6 : struct where T7 : struct where T8 : struct where T9 : struct where T10 : struct where T11 : struct where T12 : struct where T13 : struct where T14 : struct
84+
=> Archetype(Component<T0>(), Component<T1>(), Component<T2>(), Component<T3>(), Component<T4>(), Component<T5>(), Component<T6>(), Component<T7>(), Component<T8>(), Component<T9>(), Component<T10>(), Component<T11>(), Component<T12>(), Component<T13>(), Component<T14>());
85+
86+
/// <inheritdoc cref="World.Archetype(Span{EcsID})"/>
87+
public Archetype Archetype<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>()
88+
where T0 : struct where T1 : struct where T2 : struct where T3 : struct where T4 : struct where T5 : struct where T6 : struct where T7 : struct where T8 : struct where T9 : struct where T10 : struct where T11 : struct where T12 : struct where T13 : struct where T14 : struct where T15 : struct
89+
=> Archetype(Component<T0>(), Component<T1>(), Component<T2>(), Component<T3>(), Component<T4>(), Component<T5>(), Component<T6>(), Component<T7>(), Component<T8>(), Component<T9>(), Component<T10>(), Component<T11>(), Component<T12>(), Component<T13>(), Component<T14>(), Component<T15>());
90+
91+
}
92+
}
93+
94+
#pragma warning restore 1591

src/TinyEcs.Archetypes.tt

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
<#@ template debug="false" hostspecific="false" language="C#" #>
2+
<#@ assembly name="System.Core" #>
3+
<#@ import namespace="System.Linq" #>
4+
<#@ import namespace="System.Text" #>
5+
<#@ import namespace="System.Collections.Generic" #>
6+
<#@ output extension=".g.cs" #>
7+
<#
8+
const int MAX_GENERICS = 16;
9+
10+
string GenerateSequence(int count, string separator, System.Func<int, string> generator)
11+
{
12+
var sb = new StringBuilder();
13+
for (var i = 0; i < count; ++i)
14+
{
15+
sb.Append(generator(i));
16+
if (i < count - 1)
17+
{
18+
sb.Append(separator);
19+
}
20+
}
21+
return sb.ToString();
22+
}
23+
#>
24+
#pragma warning disable 1591
25+
#nullable enable
26+
27+
using System;
28+
using System.Collections.Generic;
29+
30+
namespace TinyEcs
31+
{
32+
public partial class World
33+
{
34+
<#
35+
for (var i = 0; i < MAX_GENERICS; ++i)
36+
{
37+
var generics = GenerateSequence(i + 1, ", ", j => $"T{j}");
38+
var whereGenerics = GenerateSequence(i + 1, " ", j => $"where T{j} : struct");
39+
var objsArgs = GenerateSequence(i + 1, ", ", j => $"Component<T{j}>()");
40+
#>
41+
/// <inheritdoc cref="World.Archetype(Span{EcsID})"/>
42+
public Archetype Archetype<<#= generics #>>()
43+
<#= whereGenerics #>
44+
=> Archetype(<#= objsArgs #>);
45+
46+
<#
47+
}
48+
#>
49+
}
50+
}
51+
52+
#pragma warning restore 1591

0 commit comments

Comments
 (0)