Skip to content

Commit 13c2be2

Browse files
committed
[Distinct] Use DefaultComparer for some ValueType.
1 parent 82f8989 commit 13c2be2

File tree

7 files changed

+548
-11
lines changed

7 files changed

+548
-11
lines changed

src/StructLinq.Tests/DistinctTests.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@
77
namespace StructLinq.Tests
88
{
99
public class DistinctTests : AbstractEnumerableTests<int,
10-
DistinctEnumerable<int, RangeEnumerable, RangeEnumerator, EqualityComparer<int>>,
11-
DistinctEnumerator<int, RangeEnumerator, EqualityComparer<int>>>
10+
DistinctEnumerable<int, RangeEnumerable, RangeEnumerator, DefaultStructEqualityComparer>,
11+
DistinctEnumerator<int, RangeEnumerator, DefaultStructEqualityComparer>>
1212
{
13-
protected override DistinctEnumerable<int, RangeEnumerable, RangeEnumerator, EqualityComparer<int>> Build(int size)
13+
protected override DistinctEnumerable<int, RangeEnumerable, RangeEnumerator, DefaultStructEqualityComparer> Build(int size)
1414
{
15-
var selectEnumerable = StructEnumerable.Range(-1, size).Distinct(x=>x);
15+
var selectEnumerable = StructEnumerable.Range(-1, size).Distinct(x => x);
1616
return selectEnumerable;
1717
}
1818

@@ -26,7 +26,7 @@ public void ShouldEquals()
2626
var value = Enumerable.Range(0, 100)
2727
.Select(x => x % 10)
2828
.ToStructEnumerable()
29-
.Distinct(x=> x)
29+
.Distinct(x => x)
3030
.ToEnumerable();
3131
Assert.Equal(expected, value);
3232
}

src/StructLinq.Tests/RefDistinctTests.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,12 @@
66
namespace StructLinq.Tests
77
{
88
public class RefDistinctTests : AbstractRefEnumerableTests<int,
9-
RefDistinctEnumerable<int, ArrayRefEnumerable<int>, ArrayRefStructEnumerator<int>, IInEqualityComparer<int>>,
10-
RefDistinctEnumerator<int, ArrayRefStructEnumerator<int>, IInEqualityComparer<int>>>
9+
RefDistinctEnumerable<int, ArrayRefEnumerable<int>, ArrayRefStructEnumerator<int>, DefaultStructInEqualityComparer>,
10+
RefDistinctEnumerator<int, ArrayRefStructEnumerator<int>, DefaultStructInEqualityComparer>>
1111
{
12-
protected override RefDistinctEnumerable<int, ArrayRefEnumerable<int>, ArrayRefStructEnumerator<int>, IInEqualityComparer<int>> Build(int size)
12+
protected override RefDistinctEnumerable<int, ArrayRefEnumerable<int>, ArrayRefStructEnumerator<int>, DefaultStructInEqualityComparer> Build(int size)
1313
{
14-
var selectEnumerable = Enumerable.Range(-1, size).ToArray().ToRefStructEnumerable().Distinct(x=>x);
14+
var selectEnumerable = Enumerable.Range(-1, size).ToArray().ToRefStructEnumerable().Distinct(x => x);
1515
return selectEnumerable;
1616
}
1717

@@ -26,7 +26,7 @@ public void ShouldEquals()
2626
.Select(x => x % 10)
2727
.ToArray()
2828
.ToRefStructEnumerable()
29-
.Distinct(x=> x)
29+
.Distinct(x => x)
3030
.ToEnumerable();
3131
Assert.Equal(expected, value);
3232
}

src/StructLinq/Distinct/RefDistinctEnumerable.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ public struct RefDistinctEnumerable<T, TEnumerable, TEnumerator, TComparer> : IR
77
RefDistinctEnumerator<T, TEnumerator, TComparer>>
88
where TComparer : IInEqualityComparer<T>
99
where TEnumerator : struct, IRefStructEnumerator<T>
10-
where TEnumerable : struct, IRefStructEnumerable<T, TEnumerator>
10+
where TEnumerable : IRefStructEnumerable<T, TEnumerator>
1111

1212
{
1313
private TEnumerable enumerable;

src/StructLinq/Distinct/StructEnumerable.Distinct.cs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,23 @@ public static RefDistinctEnumerable<T, TEnumerable, TEnumerator, IInEqualityComp
147147
return enumerable.Distinct(InEqualityComparer<T>.Default, _);
148148
}
149149

150+
[MethodImpl(MethodImplOptions.AggressiveInlining)]
151+
public static RefDistinctEnumerable<T, IRefStructEnumerable<T, TEnumerator>, TEnumerator, IInEqualityComparer<T>> Distinct<T,TEnumerator>(
152+
this IRefStructEnumerable<T, TEnumerator> enumerable,
153+
IInEqualityComparer<T> comparer)
154+
where TEnumerator : struct, IRefStructEnumerator<T>
155+
{
156+
return new RefDistinctEnumerable<T, IRefStructEnumerable<T, TEnumerator>, TEnumerator, IInEqualityComparer<T>>(ref enumerable, comparer, 0, ArrayPool<int>.Shared, ArrayPool<Slot<T>>.Shared);
157+
158+
}
150159

160+
[MethodImpl(MethodImplOptions.AggressiveInlining)]
161+
public static RefDistinctEnumerable<T, IRefStructEnumerable<T, TEnumerator>, TEnumerator, IInEqualityComparer<T>> Distinct<T, TEnumerator>(
162+
this IRefStructEnumerable<T, TEnumerator> enumerable)
163+
where TEnumerator : struct, IRefStructEnumerator<T>
164+
{
165+
var equalityComparer = InEqualityComparer<T>.Default;
166+
return new RefDistinctEnumerable<T, IRefStructEnumerable<T, TEnumerator>, TEnumerator, IInEqualityComparer<T>>(ref enumerable, equalityComparer, 0, ArrayPool<int>.Shared, ArrayPool<Slot<T>>.Shared);
167+
}
151168
}
152169
}

0 commit comments

Comments
 (0)