File: Windows.Win32.byte.InlineArrays.g.cs
Project: src\src\System.Private.Windows.Core\src\Microsoft.Private.Windows.Core.csproj (Microsoft.Private.Windows.Core)
// ------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by a tool.
//
//     Changes to this file may cause incorrect behavior and will be lost if
//     the code is regenerated.
// </auto-generated>
// ------------------------------------------------------------------------------

#pragma warning disable CS1591,CS1573,CS0465,CS0649,CS8019,CS1570,CS1584,CS1658,CS0436,CS8981
using global::System;
using global::System.Diagnostics;
using global::System.Diagnostics.CodeAnalysis;
using global::System.Runtime.CompilerServices;
using global::System.Runtime.InteropServices;
using global::System.Runtime.Versioning;
using winmdroot = global::Windows.Win32;
namespace Windows.Win32
{
	internal partial struct __byte_32
	{
		private const int SpanLength = 32;

		/// <summary>The length of the inline array.</summary>
		internal readonly int Length => SpanLength;

		internal unsafe fixed byte Value[SpanLength];

		/// <summary>
		/// Gets a ref to an individual element of the inline array.
		/// ⚠ Important ⚠: When this struct is on the stack, do not let the returned reference outlive the stack frame that defines it.
		/// </summary>
		[UnscopedRef]
		internal unsafe ref byte this[int index] => ref Value[index];

		internal readonly unsafe void CopyTo(Span<byte> target, int length = SpanLength)
		{
			fixed (byte* p0 = Value)
				new ReadOnlySpan<byte>(p0, SpanLength).Slice(0, length).CopyTo(target);
		}

		internal readonly unsafe byte[] ToArray(int length = SpanLength)
		{
			fixed (byte* p0 = Value)
				return new ReadOnlySpan<byte>(p0, SpanLength).Slice(0, length).ToArray();
		}

		internal readonly unsafe bool Equals(ReadOnlySpan<byte> value)
		{
			fixed (byte* p0 = Value)
			{
				ReadOnlySpan<byte> span = new ReadOnlySpan<byte>(p0, SpanLength);
				return span.SequenceEqual(value);
			}
		}

		public static unsafe implicit operator __byte_32(ReadOnlySpan<byte> value)
		{
			Unsafe.SkipInit(out __byte_32 result);
			Span<byte> target = new Span<byte>(result.Value, SpanLength);
			value.CopyTo(target);
			int initLength = value.Length;
			target.Slice(initLength, SpanLength - initLength).Clear();
			return result;
		}
	}
}