5#ifndef V8_BASE_ENUM_SET_H_
6#define V8_BASE_ENUM_SET_H_
19template <
class E,
class T =
int>
21 static_assert(std::is_enum<E>::value,
"EnumSet can only be used with enums");
28 constexpr EnumSet(std::initializer_list<E> init) {
30 for (E e : init) bits |=
Mask(e);
39 return (
bits_ & set.bits_) == set.bits_;
42 return (
bits_ & set.bits_) != 0;
96 static constexpr T
Mask(E element) {
97 DCHECK_GT(
sizeof(T) * 8,
static_cast<size_t>(element));
98 return T{1} <<
static_cast<typename std::underlying_type<E>::type
>(element);
104template <
typename E,
typename T>
108 while (!set.empty()) {
109 if (!first) os <<
", ";
112 T bits = set.ToIntegral();
constexpr bool operator==(EnumSet set) const
constexpr EnumSet(std::initializer_list< E > init)
constexpr bool is_subset_of(EnumSet set) const
constexpr void Add(E element)
EnumSet & operator-=(E element)
constexpr void Add(EnumSet set)
constexpr EnumSet(T bits)
EnumSet & operator&=(E element)
EnumSet & operator|=(EnumSet set)
constexpr bool contains_only(E element) const
constexpr EnumSet()=default
static constexpr T Mask(E element)
constexpr EnumSet operator|(EnumSet set) const
constexpr bool contains_all(EnumSet set) const
constexpr EnumSet operator-(E element) const
static constexpr EnumSet FromIntegral(T bits)
constexpr void Remove(E element)
EnumSet & operator&=(EnumSet set)
constexpr bool empty() const
constexpr void Remove(EnumSet set)
constexpr T ToIntegral() const
constexpr EnumSet operator|(E element) const
EnumSet & operator|=(E element)
constexpr bool operator!=(EnumSet set) const
EnumSet & operator-=(EnumSet set)
constexpr void Intersect(EnumSet set)
constexpr EnumSet operator~() const
constexpr bool contains_any(EnumSet set) const
constexpr void RemoveAll()
constexpr bool contains(E element) const
constexpr EnumSet operator&(EnumSet set) const
constexpr EnumSet operator-(EnumSet set) const
constexpr EnumSet operator&(E element) const
constexpr unsigned CountTrailingZerosNonZero(T value)
std::ostream & operator<<(std::ostream &out, AddressRegion region)
#define DCHECK_GT(v1, v2)