using System; using System.Runtime.InteropServices; namespace Vanara.PInvoke { /// Managed instance of the SIZE_T type. [StructLayout(LayoutKind.Sequential)] public struct SizeT : IEquatable, IComparable, IConvertible { private UIntPtr val; /// Initializes a new instance of the struct. /// The value. public SizeT(uint value) => val = (UIntPtr)value; /// Initializes a new instance of the struct. /// The value. public SizeT(ulong value) => val = new UIntPtr(value); /// Gets the value. /// The value. public ulong Value => val.ToUInt64(); /// Performs an implicit conversion from to . /// The value. /// The result of the conversion. public static implicit operator SizeT(int value) => new SizeT((uint)value); /// Performs an implicit conversion from to . /// The value. /// The result of the conversion. public static implicit operator SizeT(uint value) => new SizeT(value); /// Performs an implicit conversion from to . /// The value. /// The result of the conversion. public static implicit operator SizeT(long value) => new SizeT((ulong)value); /// Performs an implicit conversion from to . /// The value. /// The result of the conversion. public static implicit operator SizeT(ulong value) => new SizeT(value); /// Performs an implicit conversion from to . /// The value. /// The result of the conversion. public static implicit operator int(SizeT value) => (int)value.Value; /// Performs an implicit conversion from to . /// The value. /// The result of the conversion. public static implicit operator uint(SizeT value) => (uint)value.Value; /// Performs an implicit conversion from to . /// The value. /// The result of the conversion. public static implicit operator long(SizeT value) => (long)value.Value; /// Performs an implicit conversion from to . /// The value. /// The result of the conversion. public static implicit operator ulong(SizeT value) => value.Value; /// public int CompareTo(SizeT other) => Value.CompareTo(other.Value); /// public bool Equals(SizeT other) => Value.Equals(other.Value); /// public override int GetHashCode() => Value.GetHashCode(); /// public TypeCode GetTypeCode() => Value.GetTypeCode(); /// public override string ToString() => Value.ToString(); /// public string ToString(IFormatProvider provider) => Value.ToString(provider); /// bool IConvertible.ToBoolean(IFormatProvider provider) => ((IConvertible)Value).ToBoolean(provider); /// char IConvertible.ToChar(IFormatProvider provider) => ((IConvertible)Value).ToChar(provider); /// sbyte IConvertible.ToSByte(IFormatProvider provider) => ((IConvertible)Value).ToSByte(provider); /// byte IConvertible.ToByte(IFormatProvider provider) => ((IConvertible)Value).ToByte(provider); /// short IConvertible.ToInt16(IFormatProvider provider) => ((IConvertible)Value).ToInt16(provider); /// ushort IConvertible.ToUInt16(IFormatProvider provider) => ((IConvertible)Value).ToUInt16(provider); /// int IConvertible.ToInt32(IFormatProvider provider) => ((IConvertible)Value).ToInt32(provider); /// uint IConvertible.ToUInt32(IFormatProvider provider) => ((IConvertible)Value).ToUInt32(provider); /// long IConvertible.ToInt64(IFormatProvider provider) => ((IConvertible)Value).ToInt64(provider); /// ulong IConvertible.ToUInt64(IFormatProvider provider) => ((IConvertible)Value).ToUInt64(provider); /// float IConvertible.ToSingle(IFormatProvider provider) => ((IConvertible)Value).ToSingle(provider); /// double IConvertible.ToDouble(IFormatProvider provider) => ((IConvertible)Value).ToDouble(provider); /// decimal IConvertible.ToDecimal(IFormatProvider provider) => ((IConvertible)Value).ToDecimal(provider); /// DateTime IConvertible.ToDateTime(IFormatProvider provider) => ((IConvertible)Value).ToDateTime(provider); /// object IConvertible.ToType(Type conversionType, IFormatProvider provider) => ((IConvertible)Value).ToBoolean(provider); } }