diff --git a/ICD.Common.Utils.Tests/EnumUtilsTest.cs b/ICD.Common.Utils.Tests/EnumUtilsTest.cs index fa60630..ba998d9 100644 --- a/ICD.Common.Utils.Tests/EnumUtilsTest.cs +++ b/ICD.Common.Utils.Tests/EnumUtilsTest.cs @@ -186,6 +186,16 @@ namespace ICD.Common.Utils.Tests value); } + [TestCase(eTestFlagsEnum.A, eTestFlagsEnum.B | eTestFlagsEnum.C | eTestFlagsEnum.D)] + [TestCase(eTestFlagsEnum.BandC, eTestFlagsEnum.A | eTestFlagsEnum.D)] + [TestCase(eTestFlagsEnum.A | eTestFlagsEnum.B | eTestFlagsEnum.C | eTestFlagsEnum.D, eTestFlagsEnum.None)] + [TestCase(eTestFlagsEnum.None, eTestFlagsEnum.A | eTestFlagsEnum.B | eTestFlagsEnum.C | eTestFlagsEnum.D)] + [TestCase(eTestFlagsEnum.D, eTestFlagsEnum.A | eTestFlagsEnum.BandC)] + public void GetInverseFlagsTest(eTestFlagsEnum expected, eTestFlagsEnum value) + { + Assert.AreEqual(expected, EnumUtils.GetInverseFlags(value)); + } + [Test] public void HasFlagGenericTest() { diff --git a/ICD.Common.Utils/EnumUtils.cs b/ICD.Common.Utils/EnumUtils.cs index 1f16c0c..5ff5dde 100644 --- a/ICD.Common.Utils/EnumUtils.cs +++ b/ICD.Common.Utils/EnumUtils.cs @@ -448,7 +448,20 @@ namespace ICD.Common.Utils if (type == null) throw new ArgumentNullException("type"); - return GetValuesUncached(type).Aggregate(0, (current, value) => current | (int)value); + return GetValues(type).Aggregate(0, (current, value) => current | (int)value); + } + + /// + /// Gets an enum value of the given type with the inverse of the flags set + /// + /// + /// + /// + public static T GetInverseFlags(T value) + where T : struct, IConvertible + { + int output = GetFlagsAllValue(typeof(T)) & ~(int)(object)value; + return (T)Enum.ToObject(typeof(T), output); } ///