Core/Flags: Fix bitfield type selection

This commit is contained in:
Lynix 2019-10-15 18:09:34 +02:00
parent 62023c6af7
commit 9576e2794d
2 changed files with 4 additions and 3 deletions

View File

@ -39,11 +39,11 @@ namespace Nz
static constexpr std::size_t MaxValue = static_cast<std::size_t>(EnumAsFlags<E>::max);
using BitField16 = std::conditional_t<(MaxValue > 8), UInt16, UInt8>;
using BitField32 = std::conditional_t<(MaxValue > 16), UInt32, BitField16>;
using BitField16 = std::conditional_t<(MaxValue >= 8), UInt16, UInt8>;
using BitField32 = std::conditional_t<(MaxValue >= 16), UInt32, BitField16>;
public:
using BitField = std::conditional_t<(MaxValue > 32), UInt64, BitField32>;
using BitField = std::conditional_t<(MaxValue >= 32), UInt64, BitField32>;
constexpr Flags(BitField value = 0);
constexpr Flags(E enumVal);

View File

@ -218,6 +218,7 @@ namespace Nz
template<typename E>
constexpr typename Flags<E>::BitField Flags<E>::GetFlagValue(E enumValue)
{
assert(enumValue < sizeof(BitField) * CHAR_BIT);
return 1U << static_cast<BitField>(enumValue);
}