Browse Source

Returned HasFlagCustom back and made it obsolete

pull/5773/head
Yoh Deadfall 6 years ago
parent
commit
51ad4cd9b2
  1. 41
      src/Avalonia.Base/EnumExtensions.cs

41
src/Avalonia.Base/EnumExtensions.cs

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

Loading…
Cancel
Save