From bcdfbacadf6a869a04f78b2c6752fdf18b773690 Mon Sep 17 00:00:00 2001 From: Kamil Szurant Date: Mon, 16 Jan 2023 08:43:35 +0100 Subject: [PATCH 1/2] HashSet HashSet --- Sources/HonkPerf.NET.RefLinq/ToRefLinq.cs | 2 ++ 1 file changed, 2 insertions(+) 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 From 88c4abc4d6d79258cd3ba93d9334cd411e1a0e6b Mon Sep 17 00:00:00 2001 From: Kamil Szurant Date: Mon, 16 Jan 2023 08:47:14 +0100 Subject: [PATCH 2/2] HashSet 2 --- .../Enumerators/HashSetEnumerator.cs | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 Sources/HonkPerf.NET.RefLinq/Enumerators/HashSetEnumerator.cs 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; +}