diff --git a/src/Avalonia.Base/EnumExtensions.cs b/src/Avalonia.Base/EnumExtensions.cs index a39288da78..19eb42a700 100644 --- a/src/Avalonia.Base/EnumExtensions.cs +++ b/src/Avalonia.Base/EnumExtensions.cs @@ -9,62 +9,67 @@ namespace Avalonia public static class EnumExtensions { [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static unsafe bool HasAllFlags(this T value, T flag) where T : unmanaged, Enum + [Obsolete("This method is obsolete. Use HasAllFlags instead.")] + public static bool HasFlagCustom(this T value, T flag) where T : unmanaged, Enum + => value.HasAllFlags(flag); + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static unsafe bool HasAllFlags(this T value, T flags) where T : unmanaged, Enum { if (sizeof(T) == 1) { var byteValue = Unsafe.As(ref value); - var byteFlag = Unsafe.As(ref flag); - return (byteValue & byteFlag) == byteFlag; + var byteFlags = Unsafe.As(ref flags); + return (byteValue & byteFlags) == byteFlags; } else if (sizeof(T) == 2) { var shortValue = Unsafe.As(ref value); - var shortFlag = Unsafe.As(ref flag); - return (shortValue & shortFlag) == shortFlag; + var shortFlags = Unsafe.As(ref flags); + return (shortValue & shortFlags) == shortFlags; } else if (sizeof(T) == 4) { var intValue = Unsafe.As(ref value); - var intFlag = Unsafe.As(ref flag); - return (intValue & intFlag) == intFlag; + var intFlags = Unsafe.As(ref flags); + return (intValue & intFlags) == intFlags; } else if (sizeof(T) == 8) { var longValue = Unsafe.As(ref value); - var longFlag = Unsafe.As(ref flag); - return (longValue & longFlag) == longFlag; + var longFlags = Unsafe.As(ref flags); + return (longValue & longFlags) == longFlags; } else throw new NotSupportedException("Enum with size of " + Unsafe.SizeOf() + " are not supported"); } [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static unsafe bool HasAnyFlag(this T value, T flag) where T : unmanaged, Enum + public static unsafe bool HasAnyFlag(this T value, T flags) where T : unmanaged, Enum { if (sizeof(T) == 1) { var byteValue = Unsafe.As(ref value); - var byteFlag = Unsafe.As(ref flag); - return (byteValue & byteFlag) != 0; + var byteFlags = Unsafe.As(ref flags); + return (byteValue & byteFlags) != 0; } else if (sizeof(T) == 2) { var shortValue = Unsafe.As(ref value); - var shortFlag = Unsafe.As(ref flag); - return (shortValue & shortFlag) != 0; + var shortFlags = Unsafe.As(ref flags); + return (shortValue & shortFlags) != 0; } else if (sizeof(T) == 4) { var intValue = Unsafe.As(ref value); - var intFlag = Unsafe.As(ref flag); - return (intValue & intFlag) != 0; + var intFlags = Unsafe.As(ref flags); + return (intValue & intFlags) != 0; } else if (sizeof(T) == 8) { var longValue = Unsafe.As(ref value); - var longFlag = Unsafe.As(ref flag); - return (longValue & longFlag) != 0; + var longFlags = Unsafe.As(ref flags); + return (longValue & longFlags) != 0; } else throw new NotSupportedException("Enum with size of " + Unsafe.SizeOf() + " are not supported");