5#ifndef V8_BASE_FLAGS_H_
6#define V8_BASE_FLAGS_H_
23template <
typename EnumT,
typename BitfieldT = int,
24 typename BitfieldStorageT = BitfieldT>
27 static_assert(
sizeof(BitfieldStorageT) >=
sizeof(BitfieldT));
100#define DEFINE_OPERATORS_FOR_FLAGS(Type) \
101 V8_ALLOW_UNUSED V8_WARN_UNUSED_RESULT inline constexpr Type operator&( \
102 Type::flag_type lhs, Type::flag_type rhs) { \
103 return Type(lhs) & rhs; \
105 V8_ALLOW_UNUSED V8_WARN_UNUSED_RESULT inline constexpr Type operator&( \
106 Type::flag_type lhs, const Type& rhs) { \
109 V8_ALLOW_UNUSED inline void operator&(Type::flag_type lhs, \
110 Type::mask_type rhs) {} \
111 V8_ALLOW_UNUSED V8_WARN_UNUSED_RESULT inline constexpr Type operator|( \
112 Type::flag_type lhs, Type::flag_type rhs) { \
113 return Type(lhs) | rhs; \
115 V8_ALLOW_UNUSED V8_WARN_UNUSED_RESULT inline constexpr Type operator|( \
116 Type::flag_type lhs, const Type& rhs) { \
119 V8_ALLOW_UNUSED inline void operator|(Type::flag_type lhs, \
120 Type::mask_type rhs) {} \
121 V8_ALLOW_UNUSED V8_WARN_UNUSED_RESULT inline constexpr Type operator^( \
122 Type::flag_type lhs, Type::flag_type rhs) { \
123 return Type(lhs) ^ rhs; \
125 V8_ALLOW_UNUSED V8_WARN_UNUSED_RESULT inline constexpr Type operator^( \
126 Type::flag_type lhs, const Type& rhs) { \
129 V8_ALLOW_UNUSED inline void operator^(Type::flag_type lhs, \
130 Type::mask_type rhs) {} \
131 V8_ALLOW_UNUSED inline constexpr Type operator~(Type::flag_type val) { \
constexpr Flags operator&(flag_type flag) const
constexpr bool operator!() const
constexpr Flags(mask_type mask)
constexpr Flags operator~() const
Flags & set(flag_type flag, bool value)
constexpr Flags operator|(const Flags &flags) const
Flags & operator&=(flag_type flag)
Flags & operator|=(flag_type flag)
Flags & operator&=(const Flags &flags)
constexpr bool operator!=(flag_type flag) const
constexpr Flags operator^(flag_type flag) const
constexpr Flags operator^(const Flags &flags) const
constexpr Flags operator&(const Flags &flags) const
friend size_t hash_value(const Flags &flags)
Flags without(flag_type flag) const
constexpr bool operator==(flag_type flag) const
Flags & operator|=(const Flags &flags)
constexpr Flags operator|(flag_type flag) const
Flags & operator^=(flag_type flag)
constexpr Flags(flag_type flag)
Flags & operator^=(const Flags &flags)