Skip to content

Commit ac1744a

Browse files
committed
All: Add some [MethodImpl(MethodImplOptions.AggressiveInlining)]
1 parent 13c2be2 commit ac1744a

30 files changed

+152
-44
lines changed

src/StructLinq.BCL/List/ListRefEnumerable.cs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System.Collections.Generic;
2+
using System.Runtime.CompilerServices;
23
using StructLinq.Array;
34

45
namespace StructLinq.BCL.List
@@ -13,12 +14,16 @@ public ListRefEnumerable(List<T> list)
1314
layout = Unsafe.As<List<T>, ListLayout<T>>(ref list);
1415
}
1516

17+
[MethodImpl(MethodImplOptions.AggressiveInlining)]
1618
public ArrayRefStructEnumerator<T> GetEnumerator()
1719
{
1820
return new ArrayRefStructEnumerator<T>(layout.Items, list.Count);
1921
}
2022

21-
public int Count => list.Count;
22-
23+
public int Count
24+
{
25+
[MethodImpl(MethodImplOptions.AggressiveInlining)]
26+
get => list.Count;
27+
}
2328
}
2429
}

src/StructLinq/Array/ArrayRefEnumerable.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,10 @@ public ArrayRefStructEnumerator<T> GetEnumerator()
2020
return new ArrayRefStructEnumerator<T>(array, length);
2121
}
2222

23-
public int Count => length;
23+
public int Count
24+
{
25+
[MethodImpl(MethodImplOptions.AggressiveInlining)]
26+
get => length;
27+
}
2428
}
2529
}

src/StructLinq/AsEnumerable/EnumerableFromRefStructEnumerable.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System.Collections;
22
using System.Collections.Generic;
3+
using System.Runtime.CompilerServices;
34
using StructLinq.IEnumerable;
45

56
namespace StructLinq.AsEnumerable
@@ -12,10 +13,14 @@ public EnumerableFromRefStructEnumerable(IRefStructEnumerable<T, TEnumerator> st
1213
{
1314
this.structEnumerable = structEnumerable;
1415
}
16+
17+
[MethodImpl(MethodImplOptions.AggressiveInlining)]
1518
IEnumerator System.Collections.IEnumerable.GetEnumerator()
1619
{
1720
return GetEnumerator();
1821
}
22+
23+
[MethodImpl(MethodImplOptions.AggressiveInlining)]
1924
public IEnumerator<T> GetEnumerator()
2025
{
2126
var refStructEnumerator = structEnumerable.GetEnumerator();

src/StructLinq/AsEnumerable/EnumerableFromStructEnumerable.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System.Collections;
22
using System.Collections.Generic;
3+
using System.Runtime.CompilerServices;
34
using StructLinq.IEnumerable;
45

56
namespace StructLinq.AsEnumerable
@@ -12,10 +13,14 @@ public EnumerableFromStructEnumerable(IStructEnumerable<T, TEnumerator> structEn
1213
{
1314
this.structEnumerable = structEnumerable;
1415
}
16+
17+
[MethodImpl(MethodImplOptions.AggressiveInlining)]
1518
IEnumerator System.Collections.IEnumerable.GetEnumerator()
1619
{
1720
return GetEnumerator();
1821
}
22+
23+
[MethodImpl(MethodImplOptions.AggressiveInlining)]
1924
public IEnumerator<T> GetEnumerator()
2025
{
2126
var structEnumerator = structEnumerable.GetEnumerator();

src/StructLinq/AsEnumerable/StructEnumerable.AsEnumerable.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,19 @@
1-
using StructLinq.AsEnumerable;
1+
using System.Runtime.CompilerServices;
2+
using StructLinq.AsEnumerable;
23

34
// ReSharper disable once CheckNamespace
45
namespace StructLinq
56
{
67
public static partial class StructEnumerable
78
{
9+
[MethodImpl(MethodImplOptions.AggressiveInlining)]
810
public static EnumerableFromStructEnumerable<T,TEnumerator> ToEnumerable<T, TEnumerator>(this IStructEnumerable<T, TEnumerator> structEnumerable)
911
where TEnumerator : struct, IStructEnumerator<T>
1012
{
1113
return new EnumerableFromStructEnumerable<T, TEnumerator>(structEnumerable);
1214
}
15+
16+
[MethodImpl(MethodImplOptions.AggressiveInlining)]
1317
public static EnumerableFromRefStructEnumerable<T, TEnumerator> ToEnumerable<T, TEnumerator>(this IRefStructEnumerable<T, TEnumerator> structEnumerable)
1418
where TEnumerator : struct, IRefStructEnumerator<T>
1519
{

src/StructLinq/Distinct/DistinctEnumerable.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System.Buffers;
22
using System.Collections.Generic;
3+
using System.Runtime.CompilerServices;
34
using StructLinq.Utils.Collections;
45

56
namespace StructLinq.Distinct
@@ -25,6 +26,8 @@ public DistinctEnumerable(ref TEnumerable enumerable, TComparer comparer, int ca
2526
this.bucketPool = bucketPool;
2627
this.slotPool = slotPool;
2728
}
29+
30+
[MethodImpl(MethodImplOptions.AggressiveInlining)]
2831
public DistinctEnumerator<T, TEnumerator, TComparer> GetEnumerator()
2932
{
3033
var enumerator = enumerable.GetEnumerator();

src/StructLinq/Distinct/RefDistinctEnumerable.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System.Buffers;
2+
using System.Runtime.CompilerServices;
23
using StructLinq.Utils.Collections;
34

45
namespace StructLinq.Distinct
@@ -24,6 +25,8 @@ public RefDistinctEnumerable(ref TEnumerable enumerable, TComparer comparer, int
2425
this.bucketPool = bucketPool;
2526
this.slotPool = slotPool;
2627
}
28+
29+
[MethodImpl(MethodImplOptions.AggressiveInlining)]
2730
public RefDistinctEnumerator<T, TEnumerator, TComparer> GetEnumerator()
2831
{
2932
var enumerator = enumerable.GetEnumerator();

src/StructLinq/ForEach/StructEnumerable.ForEach.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
using System;
2+
using System.Runtime.CompilerServices;
23
using StructLinq.ForEach;
34

45
// ReSharper disable once CheckNamespace
56
namespace StructLinq
67
{
78
public static partial class StructEnumerable
89
{
10+
[MethodImpl(MethodImplOptions.AggressiveInlining)]
911
private static void InternalForEach<T, TEnumerator, TAction>(ref TAction action, TEnumerator enumerator)
1012
where TEnumerator : struct, IStructEnumerator<T>
1113
where TAction : struct, IAction<T>
@@ -17,6 +19,7 @@ private static void InternalForEach<T, TEnumerator, TAction>(ref TAction action,
1719
enumerator.Dispose();
1820
}
1921

22+
[MethodImpl(MethodImplOptions.AggressiveInlining)]
2023
public static void ForEach<T, TEnumerator, TAction>(this IStructEnumerable<T, TEnumerator> enumerable, ref TAction action)
2124
where TEnumerator : struct, IStructEnumerator<T>
2225
where TAction : struct, IAction<T>
@@ -25,6 +28,7 @@ public static void ForEach<T, TEnumerator, TAction>(this IStructEnumerable<T, TE
2528
InternalForEach<T, TEnumerator, TAction>(ref action, enumerator);
2629
}
2730

31+
[MethodImpl(MethodImplOptions.AggressiveInlining)]
2832
public static void ForEach<T, TEnumerator, TAction, TEnumerable>(this TEnumerable enumerable, ref TAction action, Func<TEnumerable, IStructEnumerable<T, TEnumerator>> _)
2933
where TEnumerator : struct, IStructEnumerator<T>
3034
where TAction : struct, IAction<T>
@@ -38,6 +42,7 @@ public static void ForEach<T, TEnumerator, TAction, TEnumerable>(this TEnumerabl
3842
}
3943

4044

45+
[MethodImpl(MethodImplOptions.AggressiveInlining)]
4146
public static void ForEach<T, TEnumerator>(this IStructEnumerable<T, TEnumerator> enumerable, Action<T> action)
4247
where TEnumerator : struct, IStructEnumerator<T>
4348
{

src/StructLinq/Functions.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
11
using System;
2+
using System.Runtime.CompilerServices;
23

34
namespace StructLinq
45
{
56
public static class Functions
67
{
8+
[MethodImpl(MethodImplOptions.AggressiveInlining)]
79
public static StructFunction<TIn, TOut> ToStruct<TIn, TOut>(this Func<TIn, TOut> function)
810
{
911
return new StructFunction<TIn, TOut>(function);
1012
}
13+
[MethodImpl(MethodImplOptions.AggressiveInlining)]
1114
public static StructInFunction<TIn, TOut> ToStruct<TIn, TOut>(this InFunc<TIn, TOut> function)
1215
{
1316
return new StructInFunction<TIn, TOut>(function);

src/StructLinq/IEnumerable/GenericEnumerator.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ public T Current
2929
get => inner.Current;
3030
}
3131

32+
[MethodImpl(MethodImplOptions.AggressiveInlining)]
3233
public void Dispose()
3334
{
3435
inner.Dispose();

0 commit comments

Comments
 (0)