diff --git a/src/libraries/kutil/enum_bitfields.h b/src/libraries/kutil/enum_bitfields.h index b422190..755e521 100644 --- a/src/libraries/kutil/enum_bitfields.h +++ b/src/libraries/kutil/enum_bitfields.h @@ -75,6 +75,28 @@ operator ^= (E &lhs, F rhs) return lhs; } +template +typename std::enable_if::value,E>::type& +operator -= (E &lhs, F rhs) +{ + lhs = static_cast( + static_cast::type>(lhs) & + ~static_cast::type>(rhs)); + + return lhs; +} + +template +typename std::enable_if::value,E>::type& +operator += (E &lhs, F rhs) +{ + lhs = static_cast( + static_cast::type>(lhs) | + static_cast::type>(rhs)); + + return lhs; +} + template typename std::enable_if::value,bool>::type operator ! (E rhs) @@ -88,3 +110,11 @@ bitfield_has(E set, E flag) { return (set & flag) == flag; } + +// Overload the logical-and operator to be 'bitwise-and, bool-cast' +template +typename std::enable_if::value,bool>::type +operator && (E set, E flag) +{ + return (set & flag) == flag; +}