40 constexpr AccessMask(uint8_t m) noexcept : mask_(m) {}
41 constexpr AccessMask(Flag f) noexcept : mask_(f) {}
42 constexpr AccessMask(std::initializer_list<Flag> flags)
noexcept
44 for (
auto f : flags) mask_ |= f;
47 constexpr bool canRead()
const noexcept
52 constexpr bool canWrite()
const noexcept
57 constexpr bool empty()
const noexcept
62 constexpr bool has(
const AccessMask& other)
const noexcept
64 return (mask_ & other.mask_) == other.mask_;
67 constexpr void add(
const AccessMask& other)
noexcept
72 constexpr void remove(
const AccessMask& other)
noexcept
74 mask_ &= ~other.mask_;
77 constexpr void clear()
noexcept
82 constexpr uint8_t raw()
const noexcept
87 std::string toString()
const
104 return "Unknown(" + std::to_string(mask_) +
")";
109 constexpr bool operator==(
const AccessMask& o)
const noexcept
111 return mask_ == o.mask_;
113 constexpr bool operator!=(
const AccessMask& o)
const noexcept
115 return mask_ != o.mask_;
122 return mask_ | o.mask_;
129 return mask_ & o.mask_;
148 static std::string toLower(
const std::string& s )
151 std::transform(res.begin(), res.end(), res.begin(),
154 return std::tolower(c);
159 static AccessMask fromString(
const std::string& m )
162 return AccessMask::UNKNOWN;
166 if( s ==
"rd" || s ==
"read" || s ==
"ro" || s ==
"r" )
167 return AccessMask::READ;
169 if( s ==
"wr" || s ==
"write" || s ==
"w" )
170 return AccessMask::WRITE;
173 return AccessMask::READ | AccessMask::WRITE;
176 return AccessMask::NONE;
178 return AccessMask::UNKNOWN;
182 uint8_t mask_ { UNKNOWN };