using System.Runtime.CompilerServices; using ILGPU; using ILGPU.Runtime; namespace PerfectNumbers.Core.Gpu.Accelerators; public readonly struct HeuristicCombinedGpuViews( 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, ArrayView1D) CombinedDivisorsAndSquaresEnding1 = (combinedDivisorsEnding1, combinedDivisorSquaresEnding1); public readonly (ArrayView1D, ArrayView1D) CombinedDivisorsAndSquaresEnding3 = (combinedDivisorsEnding3, combinedDivisorSquaresEnding3); public readonly (ArrayView1D, ArrayView1D) CombinedDivisorsAndSquaresEnding7 = (combinedDivisorsEnding7, combinedDivisorSquaresEnding7); public readonly (ArrayView1D, ArrayView1D) CombinedDivisorsAndSquaresEnding9 = (combinedDivisorsEnding9, combinedDivisorSquaresEnding9); // public readonly ArrayView1D CombinedDivisorSquaresEnding1 = combinedDivisorSquaresEnding1; // public readonly ArrayView1D CombinedDivisorSquaresEnding3 = combinedDivisorSquaresEnding3; // public readonly ArrayView1D CombinedDivisorSquaresEnding7 = combinedDivisorSquaresEnding7; // public readonly ArrayView1D CombinedDivisorSquaresEnding9 = combinedDivisorSquaresEnding9; private static readonly (ArrayView1D, ArrayView1D)EmptyCombinedDivisorsAndSquares = (ArrayView1D.Empty, ArrayView1D.Empty); // [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, ArrayView1D) SelectDivisorsAndSquares(byte ending) => ending switch { 1 => CombinedDivisorsAndSquaresEnding1, 3 => CombinedDivisorsAndSquaresEnding3, 7 => CombinedDivisorsAndSquaresEnding7, 9 => CombinedDivisorsAndSquaresEnding9, _ => EmptyCombinedDivisorsAndSquares, }; // [MethodImpl(MethodImplOptions.AggressiveInlining)] // public ArrayView1D SelectDivisorSquares(byte ending) => ending switch // { // 1 => CombinedDivisorSquaresEnding1, // 3 => CombinedDivisorSquaresEnding3, // 7 => CombinedDivisorSquaresEnding7, // 9 => CombinedDivisorSquaresEnding9, // _ => ArrayView1D.Empty, // }; }