Lines Matching refs:Flags
15 // The Flags class provides a type-safe way of storing OR-combinations of enum
16 // values. The Flags<T, S> class is a template class, where T is an enum type,
25 class Flags final {
30 constexpr Flags() : mask_(0) {}
31 constexpr Flags(flag_type flag) // NOLINT(runtime/explicit)
33 constexpr explicit Flags(mask_type mask) : mask_(static_cast<S>(mask)) {}
42 Flags& operator&=(const Flags& flags) {
46 Flags& operator|=(const Flags& flags) {
50 Flags& operator^=(const Flags& flags) {
55 constexpr Flags operator&(const Flags& flags) const {
56 return Flags(mask_ & flags.mask_);
58 constexpr Flags operator|(const Flags& flags) const {
59 return Flags(mask_ | flags.mask_);
61 constexpr Flags operator^(const Flags& flags) const {
62 return Flags(mask_ ^ flags.mask_);
65 Flags& operator&=(flag_type flag) { return operator&=(Flags(flag)); }
66 Flags& operator|=(flag_type flag) { return operator|=(Flags(flag)); }
67 Flags& operator^=(flag_type flag) { return operator^=(Flags(flag)); }
69 constexpr Flags operator&(flag_type flag) const {
70 return operator&(Flags(flag));
72 constexpr Flags operator|(flag_type flag) const {
73 return operator|(Flags(flag));
75 constexpr Flags operator^(flag_type flag) const {
76 return operator^(Flags(flag));
79 constexpr Flags operator~() const { return Flags(~mask_); }
84 Flags without(flag_type flag) const { return *this & (~Flags(flag)); }
86 friend size_t hash_value(const Flags& flags) { return flags.mask_; }