Added bits_t member to BitFlags and is_bitflags_v helper constant.

This commit is contained in:
Patrick 2024-06-10 23:11:54 +02:00
parent c214398fac
commit e586698fb6

View File

@ -25,6 +25,8 @@ namespace mijin
template<typename TBits> template<typename TBits>
struct BitFlags struct BitFlags
{ {
using bits_t = TBits;
constexpr TBits& operator |=(const BitFlags& other) { constexpr TBits& operator |=(const BitFlags& other) {
for (std::size_t idx = 0; idx < sizeof(TBits); ++idx) { for (std::size_t idx = 0; idx < sizeof(TBits); ++idx) {
*(std::bit_cast<std::byte*>(asBits()) + idx) |= *(std::bit_cast<const std::byte*>(other.asBits()) + idx); *(std::bit_cast<std::byte*>(asBits()) + idx) |= *(std::bit_cast<const std::byte*>(other.asBits()) + idx);
@ -83,6 +85,9 @@ private:
constexpr const TBits* asBits() const { return static_cast<const TBits*>(this); } constexpr const TBits* asBits() const { return static_cast<const TBits*>(this); }
}; };
template<typename T>
constexpr bool is_bitflags_v = std::is_base_of_v<BitFlags<T>, T>;
// //
// public functions // public functions
// //