11using System . Buffers ;
22using System . Collections . Generic ;
33using System . Runtime . CompilerServices ;
4+ using StructLinq . Utils ;
45using StructLinq . Utils . Collections ;
56
67namespace StructLinq . Distinct
@@ -38,36 +39,11 @@ public DistinctEnumerator<T, TEnumerator, TComparer> GetEnumerator()
3839 public VisitStatus Visit < TVisitor > ( ref TVisitor visitor )
3940 where TVisitor : IVisitor < T >
4041 {
41- var distinctVisitor = new DistinctVisitor < TVisitor > ( capacity , bucketPool , slotPool , comparer , ref visitor ) ;
42+ var distinctVisitor = new DistinctVisitor < T , TComparer , TVisitor > ( capacity , bucketPool , slotPool , comparer , ref visitor ) ;
4243 var visitStatus = enumerable . Visit ( ref distinctVisitor ) ;
43- visitor = distinctVisitor . visitor ;
44+ visitor = distinctVisitor . Visitor ;
4445 distinctVisitor . Dispose ( ) ;
4546 return visitStatus ;
4647 }
47-
48- private struct DistinctVisitor < TVisitor > : IVisitor < T >
49- where TVisitor : IVisitor < T >
50- {
51- public TVisitor visitor ;
52- private PooledSet < T , TComparer > set ;
53-
54- public DistinctVisitor ( int capacity , ArrayPool < int > bucketPool , ArrayPool < Slot < T > > slotPool , TComparer comparer , ref TVisitor visitor )
55- {
56- this . visitor = visitor ;
57- set = new PooledSet < T , TComparer > ( capacity , bucketPool , slotPool , comparer ) ;
58- }
59-
60- [ MethodImpl ( MethodImplOptions . AggressiveInlining ) ]
61- public bool Visit ( T input )
62- {
63- return ! set . AddIfNotPresent ( input ) || visitor . Visit ( input ) ;
64- }
65-
66- [ MethodImpl ( MethodImplOptions . AggressiveInlining ) ]
67- public void Dispose ( )
68- {
69- set . Dispose ( ) ;
70- }
71- }
7248 }
7349}
0 commit comments