From c2f85ce61b00e0014c791a764abcd162cba8a852 Mon Sep 17 00:00:00 2001 From: "Justin C. Miller" Date: Wed, 12 Sep 2018 20:57:15 -0700 Subject: [PATCH] Some enum_bitfield helper operators Added: set += flag -> set = set | flag set -= flag -> set = set & ~flag set && flag -> (set & flag) == flag --- src/libraries/kutil/enum_bitfields.h | 30 ++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) 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; +}