diff --git a/Sources/HonkPerf.NET.RefLinq/Enumerators/HashSetEnumerator.cs b/Sources/HonkPerf.NET.RefLinq/Enumerators/HashSetEnumerator.cs new file mode 100644 index 0000000..9f533cd --- /dev/null +++ b/Sources/HonkPerf.NET.RefLinq/Enumerators/HashSetEnumerator.cs @@ -0,0 +1,25 @@ +namespace HonkPerf.NET.RefLinq.Enumerators; + +public struct HashSetEnumerator : IRefEnumerable +{ + private T curr; + private HashSet.Enumerator ie; + + public HashSetEnumerator(HashSet set) + { + ie = set.GetEnumerator(); + curr = default; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public bool MoveNext() + { + bool t = ie.MoveNext(); + curr = ie.Current; + if(!t) + ie.Dispose(); + return t; + } + + public T Current => curr; +} diff --git a/Sources/HonkPerf.NET.RefLinq/ToRefLinq.cs b/Sources/HonkPerf.NET.RefLinq/ToRefLinq.cs index 25955cc..f1afeec 100644 --- a/Sources/HonkPerf.NET.RefLinq/ToRefLinq.cs +++ b/Sources/HonkPerf.NET.RefLinq/ToRefLinq.cs @@ -10,6 +10,8 @@ public static RefLinqEnumerable> ToRefLinq(this => new(new(c)); public static RefLinqEnumerable> ToRefLinq(this T[] c) => new(new(c)); + public static RefLinqEnumerable> ToRefLinq(this HashSet c) + => new(new(c)); public unsafe static RefLinqEnumerable> ToRefLinq(this FixedReadOnlySpan c) where T : unmanaged