|
|
@ -41,20 +41,9 @@ constexpr size_t BitsForDeriveDense(size_t n) {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
class KMemoryRegionTypeValue {
|
|
|
|
class KMemoryRegionTypeValue {
|
|
|
|
private:
|
|
|
|
|
|
|
|
using ValueType = typename std::underlying_type<KMemoryRegionType>::type;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
|
|
|
ValueType m_value{};
|
|
|
|
|
|
|
|
size_t m_next_bit{};
|
|
|
|
|
|
|
|
bool m_finalized{};
|
|
|
|
|
|
|
|
bool m_sparse_only{};
|
|
|
|
|
|
|
|
bool m_dense_only{};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
|
|
|
constexpr KMemoryRegionTypeValue(ValueType v) : m_value(v) {}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
public:
|
|
|
|
|
|
|
|
using ValueType = std::underlying_type_t<KMemoryRegionType>;
|
|
|
|
|
|
|
|
|
|
|
|
constexpr KMemoryRegionTypeValue() = default;
|
|
|
|
constexpr KMemoryRegionTypeValue() = default;
|
|
|
|
|
|
|
|
|
|
|
|
constexpr operator KMemoryRegionType() const {
|
|
|
|
constexpr operator KMemoryRegionType() const {
|
|
|
@ -139,6 +128,16 @@ public:
|
|
|
|
constexpr bool IsAncestorOf(ValueType v) const {
|
|
|
|
constexpr bool IsAncestorOf(ValueType v) const {
|
|
|
|
return (m_value | v) == v;
|
|
|
|
return (m_value | v) == v;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
|
|
|
constexpr KMemoryRegionTypeValue(ValueType v) : m_value(v) {}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
|
|
|
ValueType m_value{};
|
|
|
|
|
|
|
|
size_t m_next_bit{};
|
|
|
|
|
|
|
|
bool m_finalized{};
|
|
|
|
|
|
|
|
bool m_sparse_only{};
|
|
|
|
|
|
|
|
bool m_dense_only{};
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
} // namespace impl
|
|
|
|
} // namespace impl
|
|
|
|