Skip to content

Commit 7ec87ec

Browse files
committed
[Sum] Switch to template.
1 parent 7ada6cc commit 7ec87ec

File tree

3 files changed

+319
-8
lines changed

3 files changed

+319
-8
lines changed

src/StructLinq/StructLinq.csproj

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,28 @@
22

33
<PropertyGroup>
44
<TargetFrameworks>$(DefaultTargetFrameworks)</TargetFrameworks>
5+
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
56
</PropertyGroup>
67

8+
<ItemGroup>
9+
<None Update="Sum\SumStructEnumerable.tt">
10+
<Generator>TextTemplatingFileGenerator</Generator>
11+
<LastGenOutput>SumStructEnumerable.cs</LastGenOutput>
12+
</None>
13+
<None Update="Sum\SumStructEnumerable.cs">
14+
<DesignTime>True</DesignTime>
15+
<AutoGen>True</AutoGen>
16+
<DependentUpon>SumStructEnumerable.tt</DependentUpon>
17+
</None>
18+
</ItemGroup>
19+
20+
21+
<ItemGroup>
22+
<Compile Update="Sum\SumStructEnumerable.cs">
23+
<DesignTime>True</DesignTime>
24+
<AutoGen>True</AutoGen>
25+
<DependentUpon>SumStructEnumerable.tt</DependentUpon>
26+
</Compile>
27+
</ItemGroup>
28+
729
</Project>
Lines changed: 239 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,260 @@
1-
using System.Collections.Generic;
1+

2+
3+
using System;
4+
using System.Collections.Generic;
5+
26

37
// ReSharper disable once CheckNamespace
48
namespace StructLinq
59
{
10+
11+
public static partial class StructEnumerable
12+
{
13+
#region private fields
14+
private static Int16 Int16Sum<TEnumerator>(TEnumerator enumerator)
15+
where TEnumerator : IEnumerator<Int16>
16+
{
17+
Int16 result = 0;
18+
while (enumerator.MoveNext())
19+
{
20+
result += enumerator.Current;
21+
}
22+
return result;
23+
}
24+
#endregion
25+
public static Int16 Sum<TEnumerator>(this ITypedEnumerable<Int16, TEnumerator> enumerable)
26+
where TEnumerator : IEnumerator<Int16>
27+
{
28+
using (var enumerator = enumerable.GetTypedEnumerator())
29+
{
30+
return Int16Sum(enumerator);
31+
}
32+
}
33+
}
34+
35+
36+
public static partial class StructEnumerable
37+
{
38+
#region private fields
39+
private static Int32 Int32Sum<TEnumerator>(TEnumerator enumerator)
40+
where TEnumerator : IEnumerator<Int32>
41+
{
42+
Int32 result = 0;
43+
while (enumerator.MoveNext())
44+
{
45+
result += enumerator.Current;
46+
}
47+
return result;
48+
}
49+
#endregion
50+
public static Int32 Sum<TEnumerator>(this ITypedEnumerable<Int32, TEnumerator> enumerable)
51+
where TEnumerator : IEnumerator<Int32>
52+
{
53+
using (var enumerator = enumerable.GetTypedEnumerator())
54+
{
55+
return Int32Sum(enumerator);
56+
}
57+
}
58+
}
59+
60+
61+
public static partial class StructEnumerable
62+
{
63+
#region private fields
64+
private static Int64 Int64Sum<TEnumerator>(TEnumerator enumerator)
65+
where TEnumerator : IEnumerator<Int64>
66+
{
67+
Int64 result = 0;
68+
while (enumerator.MoveNext())
69+
{
70+
result += enumerator.Current;
71+
}
72+
return result;
73+
}
74+
#endregion
75+
public static Int64 Sum<TEnumerator>(this ITypedEnumerable<Int64, TEnumerator> enumerable)
76+
where TEnumerator : IEnumerator<Int64>
77+
{
78+
using (var enumerator = enumerable.GetTypedEnumerator())
79+
{
80+
return Int64Sum(enumerator);
81+
}
82+
}
83+
}
84+
85+
86+
public static partial class StructEnumerable
87+
{
88+
#region private fields
89+
private static UInt16 UInt16Sum<TEnumerator>(TEnumerator enumerator)
90+
where TEnumerator : IEnumerator<UInt16>
91+
{
92+
UInt16 result = 0;
93+
while (enumerator.MoveNext())
94+
{
95+
result += enumerator.Current;
96+
}
97+
return result;
98+
}
99+
#endregion
100+
public static UInt16 Sum<TEnumerator>(this ITypedEnumerable<UInt16, TEnumerator> enumerable)
101+
where TEnumerator : IEnumerator<UInt16>
102+
{
103+
using (var enumerator = enumerable.GetTypedEnumerator())
104+
{
105+
return UInt16Sum(enumerator);
106+
}
107+
}
108+
}
109+
110+
111+
public static partial class StructEnumerable
112+
{
113+
#region private fields
114+
private static UInt32 UInt32Sum<TEnumerator>(TEnumerator enumerator)
115+
where TEnumerator : IEnumerator<UInt32>
116+
{
117+
UInt32 result = 0;
118+
while (enumerator.MoveNext())
119+
{
120+
result += enumerator.Current;
121+
}
122+
return result;
123+
}
124+
#endregion
125+
public static UInt32 Sum<TEnumerator>(this ITypedEnumerable<UInt32, TEnumerator> enumerable)
126+
where TEnumerator : IEnumerator<UInt32>
127+
{
128+
using (var enumerator = enumerable.GetTypedEnumerator())
129+
{
130+
return UInt32Sum(enumerator);
131+
}
132+
}
133+
}
134+
135+
136+
public static partial class StructEnumerable
137+
{
138+
#region private fields
139+
private static UInt64 UInt64Sum<TEnumerator>(TEnumerator enumerator)
140+
where TEnumerator : IEnumerator<UInt64>
141+
{
142+
UInt64 result = 0;
143+
while (enumerator.MoveNext())
144+
{
145+
result += enumerator.Current;
146+
}
147+
return result;
148+
}
149+
#endregion
150+
public static UInt64 Sum<TEnumerator>(this ITypedEnumerable<UInt64, TEnumerator> enumerable)
151+
where TEnumerator : IEnumerator<UInt64>
152+
{
153+
using (var enumerator = enumerable.GetTypedEnumerator())
154+
{
155+
return UInt64Sum(enumerator);
156+
}
157+
}
158+
}
159+
160+
6161
public static partial class StructEnumerable
7162
{
8163
#region private fields
9-
private static int Sum<TEnumerator>(TEnumerator enumerator)
10-
where TEnumerator : IEnumerator<int>
164+
private static Single SingleSum<TEnumerator>(TEnumerator enumerator)
165+
where TEnumerator : IEnumerator<Single>
11166
{
12-
int result = 0;
167+
Single result = 0;
13168
while (enumerator.MoveNext())
14169
{
15170
result += enumerator.Current;
16171
}
17172
return result;
18173
}
19174
#endregion
20-
public static int Sum<TEnumerator>(this ITypedEnumerable<int, TEnumerator> enumerable)
21-
where TEnumerator : IEnumerator<int>
175+
public static Single Sum<TEnumerator>(this ITypedEnumerable<Single, TEnumerator> enumerable)
176+
where TEnumerator : IEnumerator<Single>
22177
{
23178
using (var enumerator = enumerable.GetTypedEnumerator())
24179
{
25-
return Sum(enumerator);
180+
return SingleSum(enumerator);
26181
}
27182
}
28183
}
29-
}
184+
185+
186+
public static partial class StructEnumerable
187+
{
188+
#region private fields
189+
private static Double DoubleSum<TEnumerator>(TEnumerator enumerator)
190+
where TEnumerator : IEnumerator<Double>
191+
{
192+
Double result = 0;
193+
while (enumerator.MoveNext())
194+
{
195+
result += enumerator.Current;
196+
}
197+
return result;
198+
}
199+
#endregion
200+
public static Double Sum<TEnumerator>(this ITypedEnumerable<Double, TEnumerator> enumerable)
201+
where TEnumerator : IEnumerator<Double>
202+
{
203+
using (var enumerator = enumerable.GetTypedEnumerator())
204+
{
205+
return DoubleSum(enumerator);
206+
}
207+
}
208+
}
209+
210+
211+
public static partial class StructEnumerable
212+
{
213+
#region private fields
214+
private static Byte ByteSum<TEnumerator>(TEnumerator enumerator)
215+
where TEnumerator : IEnumerator<Byte>
216+
{
217+
Byte result = 0;
218+
while (enumerator.MoveNext())
219+
{
220+
result += enumerator.Current;
221+
}
222+
return result;
223+
}
224+
#endregion
225+
public static Byte Sum<TEnumerator>(this ITypedEnumerable<Byte, TEnumerator> enumerable)
226+
where TEnumerator : IEnumerator<Byte>
227+
{
228+
using (var enumerator = enumerable.GetTypedEnumerator())
229+
{
230+
return ByteSum(enumerator);
231+
}
232+
}
233+
}
234+
235+
236+
public static partial class StructEnumerable
237+
{
238+
#region private fields
239+
private static SByte SByteSum<TEnumerator>(TEnumerator enumerator)
240+
where TEnumerator : IEnumerator<SByte>
241+
{
242+
SByte result = 0;
243+
while (enumerator.MoveNext())
244+
{
245+
result += enumerator.Current;
246+
}
247+
return result;
248+
}
249+
#endregion
250+
public static SByte Sum<TEnumerator>(this ITypedEnumerable<SByte, TEnumerator> enumerable)
251+
where TEnumerator : IEnumerator<SByte>
252+
{
253+
using (var enumerator = enumerable.GetTypedEnumerator())
254+
{
255+
return SByteSum(enumerator);
256+
}
257+
}
258+
}
259+
260+
}
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
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=".cs" #>
7+
8+
<#
9+
var types = new[]
10+
{
11+
typeof(Int16),
12+
typeof(Int32),
13+
typeof(Int64),
14+
typeof(UInt16),
15+
typeof(UInt32),
16+
typeof(UInt64),
17+
typeof(Single),
18+
typeof(Double),
19+
typeof(byte),
20+
typeof(sbyte),
21+
};
22+
#>
23+
24+
using System;
25+
using System.Collections.Generic;
26+
27+
28+
// ReSharper disable once CheckNamespace
29+
namespace StructLinq
30+
{
31+
<# foreach(var t in types) { #>
32+
33+
public static partial class StructEnumerable
34+
{
35+
#region private fields
36+
private static <#= t.Name #> <#= t.Name #>Sum<TEnumerator>(TEnumerator enumerator)
37+
where TEnumerator : IEnumerator<<#= t.Name #>>
38+
{
39+
<#= t.Name #> result = 0;
40+
while (enumerator.MoveNext())
41+
{
42+
result += enumerator.Current;
43+
}
44+
return result;
45+
}
46+
#endregion
47+
public static <#= t.Name #> Sum<TEnumerator>(this ITypedEnumerable<<#= t.Name #>, TEnumerator> enumerable)
48+
where TEnumerator : IEnumerator<<#= t.Name #>>
49+
{
50+
using (var enumerator = enumerable.GetTypedEnumerator())
51+
{
52+
return <#= t.Name #>Sum(enumerator);
53+
}
54+
}
55+
}
56+
57+
<# } #>
58+
}

0 commit comments

Comments
 (0)