96 typedef long long FlagCastType;
100 typedef long FlagCastType;
103 static_assert((
sizeof(T) <=
sizeof(FlagCastType)),
"Flags type may overflow.");
104 static_assert((std::is_enum<T>::value),
"Flags accepts only enumeration types.");
111 inline Flags() : m_data{ static_cast<T>(0) } {};
115 inline Flags(T _initialData) : m_data{ _initialData } {}
122 inline T
data(
void)
const {
return m_data; };
126 inline void set(T _data) { m_data = _data; };
130 inline void setFlag(T _flag) { m_data = m_data | _flag; };
135 inline void setFlag(T _flag,
bool _flagIsSet) {
136 if (_flagIsSet) { m_data = m_data | _flag; }
137 else { m_data = m_data & (~_flag); }
142 inline void removeFlag(T _flag) { m_data = m_data & (~_flag); };
146 inline bool flagIsSet(T _flag)
const {
return (m_data & _flag); };
149 inline operator T(
void)
const {
return m_data; };
152 inline operator bool(
void)
const {
return (
bool)m_data; };
154 inline Flags<T>& operator = (T _flag) { m_data = _flag;
return *
this; };
155 inline Flags<T>& operator = (
const Flags<T>& _other) { m_data = _other.m_data;
return *
this; };
163 inline Flags<T>& operator |= (T _flag) { m_data = m_data | _flag;
return *
this; };
164 inline Flags<T>& operator |= (
const Flags<T>& _other) { m_data = m_data | _other.m_data;
return *
this; };
166 inline Flags<T>& operator &= (T _flag) { m_data = m_data & _flag;
return *
this; };
167 inline Flags<T>& operator &= (
const Flags<T>& _other) { m_data = m_data & _other.m_data;
return *
this; };
171 inline bool operator == (T _flag)
const {
return m_data == _flag; };
174 inline bool operator != (T _flag)
const {
return m_data != _flag; };
175 inline bool operator != (
const Flags<T>& _other)
const {
return m_data != _other.m_data; };