Add more flag operator overloads

This commit is contained in:
BlackMark 2020-05-17 18:57:26 +02:00
parent 2a90cdee18
commit db5197b3b1
2 changed files with 27 additions and 0 deletions

View File

@ -37,17 +37,34 @@ struct [[gnu::packed]] FlagsImpl
return *this; return *this;
} }
FlagsImpl &operator|=(const uint8_t &flag)
{
data |= flag;
return *this;
}
FlagsImpl &operator&=(const FlagsT &flag) FlagsImpl &operator&=(const FlagsT &flag)
{ {
data &= static_cast<uint8_t>(flag); data &= static_cast<uint8_t>(flag);
return *this; return *this;
} }
FlagsImpl &operator&=(const uint8_t &flag)
{
data &= flag;
return *this;
}
FlagsImpl &operator~() FlagsImpl &operator~()
{ {
data = ~data; data = ~data;
return *this; return *this;
} }
bool operator==(const FlagsT &flag) const
{
return data & static_cast<uint8_t>(flag);
}
}; };
template <typename FlagsT> template <typename FlagsT>

View File

@ -375,6 +375,11 @@ enum class ControlRegFlags : uint8_t {
A1IE = 1 << 0, A1IE = 1 << 0,
}; };
static inline uint8_t operator~(const ControlRegFlags &flag)
{
return ~static_cast<uint8_t>(flag);
}
struct [[gnu::packed]] ControlReg : FlagsImpl<ControlRegFlags>{}; struct [[gnu::packed]] ControlReg : FlagsImpl<ControlRegFlags>{};
static_assert(sizeof(ControlReg) == 1, "Invalid control register size"); static_assert(sizeof(ControlReg) == 1, "Invalid control register size");
@ -389,6 +394,11 @@ enum class ControlStatusRegFlags : uint8_t {
A1F = 1 << 0, A1F = 1 << 0,
}; };
static inline uint8_t operator~(const ControlStatusRegFlags &flag)
{
return ~static_cast<uint8_t>(flag);
}
struct [[gnu::packed]] ControlStatusReg : FlagsImpl<ControlStatusRegFlags>{}; struct [[gnu::packed]] ControlStatusReg : FlagsImpl<ControlStatusRegFlags>{};
static_assert(sizeof(ControlStatusReg) == 1, "Invalid control/status register size"); static_assert(sizeof(ControlStatusReg) == 1, "Invalid control/status register size");