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);
}
///