From cf5bd6bc1a376b219efc85df0e60755693c7d026 Mon Sep 17 00:00:00 2001 From: mlemanczyk Date: Fri, 5 Dec 2025 15:51:16 +0100 Subject: [PATCH] PendingEntry.WithPrimality changed to modify the instance instead of creating a new one. --- .../PrimeOrderCalculator.Cpu.cs | 23 ++++++++++--------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/PerfectNumbers.Core/PrimeOrderCalculator.Cpu.cs b/PerfectNumbers.Core/PrimeOrderCalculator.Cpu.cs index 609d720..0c5fb2e 100644 --- a/PerfectNumbers.Core/PrimeOrderCalculator.Cpu.cs +++ b/PerfectNumbers.Core/PrimeOrderCalculator.Cpu.cs @@ -12,12 +12,12 @@ namespace PerfectNumbers.Core; internal static partial class PrimeOrderCalculator { - internal readonly struct PendingEntry + internal struct PendingEntry { - public readonly ulong Value; - public readonly bool KnownComposite; - public readonly bool HasKnownPrimality; - public readonly bool IsPrime; + public ulong Value; + public bool KnownComposite; + public bool HasKnownPrimality; + public bool IsPrime; public PendingEntry(ulong value, bool knownComposite) { @@ -36,10 +36,11 @@ internal static partial class PrimeOrderCalculator } [MethodImpl(MethodImplOptions.AggressiveInlining)] - public PendingEntry WithPrimality(bool isPrime) + public void WithPrimality(bool isPrime) { - bool knownComposite = KnownComposite || !isPrime; - return new PendingEntry(Value, knownComposite, true, isPrime); + KnownComposite = KnownComposite || !isPrime; + HasKnownPrimality = true; + IsPrime = isPrime; } } @@ -1932,7 +1933,7 @@ internal static partial class PrimeOrderCalculator // Atomic.Add(ref _partialFactorPendingHits, 1UL); // Console.WriteLine($"Partial factor pending hits {Volatile.Read(ref _partialFactorPendingHits)}"); - entry = entry.WithPrimality(isPrime); + entry.WithPrimality(isPrime); pending[index] = entry; } @@ -2112,7 +2113,7 @@ internal static partial class PrimeOrderCalculator // Atomic.Add(ref _partialFactorPendingHits, 1UL); // Console.WriteLine($"Partial factor pending hits {Volatile.Read(ref _partialFactorPendingHits)}"); - entry = entry.WithPrimality(isPrime); + entry.WithPrimality(isPrime); pending[index] = entry; } @@ -2294,7 +2295,7 @@ internal static partial class PrimeOrderCalculator // Atomic.Add(ref _partialFactorPendingHits, 1UL); // Console.WriteLine($"Partial factor pending hits {Volatile.Read(ref _partialFactorPendingHits)}"); - entry = entry.WithPrimality(isPrime); + entry.WithPrimality(isPrime); pending[index] = entry; }