using System;
using System.Linq;
using System.Runtime.InteropServices;
using NvAPIWrapper.Native.Attributes;
using NvAPIWrapper.Native.General.Structures;
using NvAPIWrapper.Native.Helpers;
using NvAPIWrapper.Native.Interfaces;
namespace NvAPIWrapper.Native.GPU.Structures
{
///
/// Holds information regarding available devices illumination settings
///
[StructLayout(LayoutKind.Sequential, Pack = 8)]
[StructureVersion(1)]
public struct IlluminationDeviceControlParametersV1 : IInitializable
{
private const int MaximumNumberOfReserved = 64;
private const int MaximumNumberOfDevices = 32;
internal StructureVersion _Version;
internal uint _NumberOfDevices;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = MaximumNumberOfReserved)]
internal byte[] _Reserved;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = MaximumNumberOfDevices)]
internal IlluminationDeviceControlV1[] _Devices;
///
/// Creates a new instance of .
///
/// The list of illumination settings of devices.
public IlluminationDeviceControlParametersV1(IlluminationDeviceControlV1[] devices)
{
if (!(devices?.Length > 0) || devices.Length > MaximumNumberOfDevices)
{
throw new ArgumentOutOfRangeException(nameof(devices));
}
this = typeof(IlluminationDeviceControlParametersV1).Instantiate();
_NumberOfDevices = (uint) devices.Length;
Array.Copy(devices, 0, _Devices, 0, devices.Length);
}
///
/// Gets a list of available illumination settings of devices.
///
public IlluminationDeviceControlV1[] Devices
{
get => _Devices.Take((int) _NumberOfDevices).ToArray();
}
}
}