File: Windows.Win32.DECIMAL.g.cs
Project: src\src\System.Private.Windows.Core\src\System.Private.Windows.Core.csproj (System.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
{
	namespace Foundation
	{
		/// <summary>The DECIMAL structure represents a decimal data type that provides a sign and scale for a number.</summary>
		/// <remarks></remarks>
		[global::System.CodeDom.Compiler.GeneratedCode("Microsoft.Windows.CsWin32", "0.3.151+58e949951d.RR")]
		internal partial struct DECIMAL
		{
			/// <summary>Reserved.</summary>
			internal ushort wReserved;

			internal _Anonymous1_e__Union Anonymous1;

			/// <summary>The high 32 bits of the number.</summary>
			internal uint Hi32;

			internal _Anonymous2_e__Union Anonymous2;

			public DECIMAL(decimal value)

			{
unchecked

				{
					const int SignMask = (int)0x80000000;
					Span<int> bits = stackalloc int[4];
					decimal.GetBits(value, bits);
					uint lo32 = (uint)bits[0];
					uint mid32 = (uint)bits[1];
					uint hi32 = (uint)bits[2];
					byte scale = (byte)(bits[3] >> 16);
					byte sign = (bits[3] & SignMask) == SignMask ? (byte)0x80 : (byte)0x00;
					this.Anonymous2 = new _Anonymous2_e__Union() 					{
						Anonymous = new _Anonymous2_e__Union._Anonymous_e__Struct() 						{
							Lo32 = lo32, 							Mid32 = mid32 						}					};
					this.Hi32 = hi32;
					this.Anonymous1 = new _Anonymous1_e__Union() 					{
						Anonymous = new _Anonymous1_e__Union._Anonymous_e__Struct() 						{
							scale = scale, 							sign = sign 						}					};
					this.wReserved = 0;
				}
			}


			public static implicit operator decimal(DECIMAL value)

			{
				return new decimal(
(int)value.Anonymous2.Anonymous.Lo32, (int)value.Anonymous2.Anonymous.Mid32, (int)value.Hi32, value.Anonymous1.Anonymous.sign == 0x80, value.Anonymous1.Anonymous.scale);
			}


			public static implicit operator DECIMAL(decimal value) => new DECIMAL(value);

			[StructLayout(LayoutKind.Explicit)]
			[global::System.CodeDom.Compiler.GeneratedCode("Microsoft.Windows.CsWin32", "0.3.151+58e949951d.RR")]
			internal partial struct _Anonymous1_e__Union
			{
				[FieldOffset(0)]
				internal _Anonymous_e__Struct Anonymous;

				[FieldOffset(0)]
				internal ushort signscale;

				[global::System.CodeDom.Compiler.GeneratedCode("Microsoft.Windows.CsWin32", "0.3.151+58e949951d.RR")]
				internal partial struct _Anonymous_e__Struct
				{
					internal byte scale;

					internal byte sign;
				}
			}

			[StructLayout(LayoutKind.Explicit)]
			[global::System.CodeDom.Compiler.GeneratedCode("Microsoft.Windows.CsWin32", "0.3.151+58e949951d.RR")]
			internal partial struct _Anonymous2_e__Union
			{
				[FieldOffset(0)]
				internal _Anonymous_e__Struct Anonymous;

				[FieldOffset(0)]
				internal ulong Lo64;

				[global::System.CodeDom.Compiler.GeneratedCode("Microsoft.Windows.CsWin32", "0.3.151+58e949951d.RR")]
				internal partial struct _Anonymous_e__Struct
				{
					internal uint Lo32;

					internal uint Mid32;
				}
			}
		}
	}
}