using System; namespace Cirno.Scripts.Utils; public static class EnumFlagsExtensions { public static bool HasAllFlags(this T value, T flags) where T : Enum { var valueInt = Convert.ToUInt64(value); var flagsInt = Convert.ToUInt64(flags); return (valueInt & flagsInt) == flagsInt; } public static bool HasAnyFlag(this T value, T flags) where T : Enum { var valueInt = Convert.ToUInt64(value); var flagsInt = Convert.ToUInt64(flags); return (valueInt & flagsInt) != 0; } public static bool HasNoFlags(this T value, T flags) where T : Enum { var valueInt = Convert.ToUInt64(value); var flagsInt = Convert.ToUInt64(flags); return (valueInt & flagsInt) == 0; } public static T AddFlags(this T value, T flags) where T : Enum { var valueInt = Convert.ToUInt64(value); var flagsInt = Convert.ToUInt64(flags); return (T)Enum.ToObject(typeof(T), valueInt | flagsInt); } public static T RemoveFlags(this T value, T flags) where T : Enum { var valueInt = Convert.ToUInt64(value); var flagsInt = Convert.ToUInt64(flags); return (T)Enum.ToObject(typeof(T), valueInt & ~flagsInt); } public static T ToggleFlags(this T value, T flags) where T : Enum { var valueInt = Convert.ToUInt64(value); var flagsInt = Convert.ToUInt64(flags); return (T)Enum.ToObject(typeof(T), valueInt ^ flagsInt); } }