diff --git a/PerfectNumbers.Core/Cpu/MersenneCpuDivisorScanSessionWithTemplate.cs b/PerfectNumbers.Core/Cpu/MersenneCpuDivisorScanSessionWithTemplate.cs index 5292668..864084d 100644 --- a/PerfectNumbers.Core/Cpu/MersenneCpuDivisorScanSessionWithTemplate.cs +++ b/PerfectNumbers.Core/Cpu/MersenneCpuDivisorScanSessionWithTemplate.cs @@ -3,7 +3,8 @@ using PerfectNumbers.Core.Gpu.Accelerators; namespace PerfectNumbers.Core.Cpu; -[DeviceDependentTemplate(typeof(ComputationDevice), suffix: "Order")] +[DeviceDependentTemplate(typeof(ComputationDevice))] +[NameSuffix("Order")] internal struct MersenneCpuDivisorScanSessionWithTemplate() : IMersenneNumberDivisorByDivisorTester.IDivisorScanSession { #if DEVICE_GPU || DEVICE_HYBRID diff --git a/PerfectNumbers.Core/Cpu/MersenneNumberDivisorByDivisorCpuTesterWithTemplate.cs b/PerfectNumbers.Core/Cpu/MersenneNumberDivisorByDivisorCpuTesterWithTemplate.cs index ae64238..cae9108 100644 --- a/PerfectNumbers.Core/Cpu/MersenneNumberDivisorByDivisorCpuTesterWithTemplate.cs +++ b/PerfectNumbers.Core/Cpu/MersenneNumberDivisorByDivisorCpuTesterWithTemplate.cs @@ -6,7 +6,8 @@ using PerfectNumbers.Core.Gpu.Accelerators; namespace PerfectNumbers.Core.Cpu; -[DeviceDependentTemplate(typeof(ComputationDevice), suffix: "Order")] +[DeviceDependentTemplate(typeof(ComputationDevice))] +[NameSuffix("Order")] public struct MersenneNumberDivisorByDivisorCpuTesterWithTemplate() : IMersenneNumberDivisorByDivisorTester { public BigInteger DivisorLimit; diff --git a/PerfectNumbers.Core/DeviceDependentTemplateAttribute.cs b/PerfectNumbers.Core/DeviceDependentTemplateAttribute.cs index 291fb4f..25f2744 100644 --- a/PerfectNumbers.Core/DeviceDependentTemplateAttribute.cs +++ b/PerfectNumbers.Core/DeviceDependentTemplateAttribute.cs @@ -5,13 +5,32 @@ namespace PerfectNumbers.Core; [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct, Inherited = false, AllowMultiple = false)] public sealed class DeviceDependentTemplateAttribute : Attribute { - public DeviceDependentTemplateAttribute(Type enumType, string? suffix = null) + public DeviceDependentTemplateAttribute(Type enumType) { EnumType = enumType ?? throw new ArgumentNullException(nameof(enumType)); - Suffix = suffix; } public Type EnumType { get; } +} - public string? Suffix { get; } +[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct, Inherited = false, AllowMultiple = true)] +public sealed class EnumDependentTemplateAttribute : Attribute +{ + public EnumDependentTemplateAttribute(Type enumType) + { + EnumType = enumType ?? throw new ArgumentNullException(nameof(enumType)); + } + + public Type EnumType { get; } +} + +[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct, Inherited = false, AllowMultiple = false)] +public sealed class NameSuffixAttribute : Attribute +{ + public NameSuffixAttribute(string suffix) + { + Suffix = suffix ?? throw new ArgumentNullException(nameof(suffix)); + } + + public string Suffix { get; } }