using System.Runtime.CompilerServices; using ILGPU; using ILGPU.Runtime; namespace PerfectNumbers.Core.Gpu; public readonly struct HeuristicGpuCombinedDivisorTables( ArrayView1D combinedDivisorsEnding1, ArrayView1D combinedDivisorsEnding3, ArrayView1D combinedDivisorsEnding7, ArrayView1D combinedDivisorsEnding9, ArrayView1D combinedDivisorSquaresEnding1, ArrayView1D combinedDivisorSquaresEnding3, ArrayView1D combinedDivisorSquaresEnding7, ArrayView1D combinedDivisorSquaresEnding9) { public readonly ArrayView1D CombinedDivisorsEnding1 = combinedDivisorsEnding1; public readonly ArrayView1D CombinedDivisorsEnding3 = combinedDivisorsEnding3; public readonly ArrayView1D CombinedDivisorsEnding7 = combinedDivisorsEnding7; public readonly ArrayView1D CombinedDivisorsEnding9 = combinedDivisorsEnding9; public readonly ArrayView1D CombinedDivisorSquaresEnding1 = combinedDivisorSquaresEnding1; public readonly ArrayView1D CombinedDivisorSquaresEnding3 = combinedDivisorSquaresEnding3; public readonly ArrayView1D CombinedDivisorSquaresEnding7 = combinedDivisorSquaresEnding7; public readonly ArrayView1D CombinedDivisorSquaresEnding9 = combinedDivisorSquaresEnding9; [MethodImpl(MethodImplOptions.AggressiveInlining)] public ArrayView1D SelectDivisors(byte ending) => ending switch { 1 => CombinedDivisorsEnding1, 3 => CombinedDivisorsEnding3, 7 => CombinedDivisorsEnding7, 9 => CombinedDivisorsEnding9, _ => ArrayView1D.Empty, }; [MethodImpl(MethodImplOptions.AggressiveInlining)] public ArrayView1D SelectDivisorSquares(byte ending) => ending switch { 1 => CombinedDivisorSquaresEnding1, 3 => CombinedDivisorSquaresEnding3, 7 => CombinedDivisorSquaresEnding7, 9 => CombinedDivisorSquaresEnding9, _ => ArrayView1D.Empty, }; }