31 #ifndef ETL_FLAGS_INCLUDED
32 #define ETL_FLAGS_INCLUDED
41 #include "static_assert.h"
43 #if ETL_CPP11_SUPPORTED && ETL_NOT_USING_STLPORT && ETL_USING_STL
44 #include <initializer_list>
53 template <typename T, T MASK = etl::integral_limits<T>::max>
63 static ETL_CONSTANT value_type ALL_CLEAR = 0;
70 ETL_CONSTEXPR
flags() ETL_NOEXCEPT
75 ETL_CONSTEXPR
flags(value_type pattern) ETL_NOEXCEPT
76 : data(pattern & MASK)
80 ETL_CONSTEXPR
flags(
const flags<T, MASK>& pattern) ETL_NOEXCEPT
81 : data(pattern.value())
88 template <value_type pattern>
89 ETL_CONSTEXPR
bool test() const ETL_NOEXCEPT
91 return (data & pattern) != value_type(0);
95 ETL_CONSTEXPR
bool test(value_type pattern)
const ETL_NOEXCEPT
97 return (data & pattern) != value_type(0);
103 template <value_type pattern,
bool value>
106 value ? data |= (pattern & MASK) : data &= (~pattern & MASK);
112 template <value_type pattern>
115 value ? data |= (pattern & MASK) : data &= (~pattern & MASK);
121 template <value_type pattern>
122 ETL_CONSTEXPR14 flags<T, MASK>&
set() ETL_NOEXCEPT
124 data |= (pattern & MASK);
130 ETL_CONSTEXPR14 flags<T, MASK>&
set(value_type pattern) ETL_NOEXCEPT
132 data |= (pattern & MASK);
138 ETL_CONSTEXPR14 flags<T, MASK>&
set(value_type pattern,
bool value) ETL_NOEXCEPT
140 value ? data |= (pattern & MASK) : data &= (~pattern & MASK);
158 template <value_type pattern>
179 data = (~data & MASK);
185 template <value_type pattern>
188 data ^= pattern & MASK;
194 ETL_CONSTEXPR14 flags<T, MASK>&
flip(value_type pattern) ETL_NOEXCEPT
196 data ^= pattern & MASK;
204 ETL_CONSTEXPR
bool all() const ETL_NOEXCEPT
210 template <value_type pattern>
211 ETL_CONSTEXPR
bool all_of() const ETL_NOEXCEPT
213 return (data & (pattern & MASK)) == (pattern & MASK);
217 ETL_CONSTEXPR
bool all_of(value_type pattern)
const ETL_NOEXCEPT
219 return (data & (pattern & MASK)) == (pattern & MASK);
225 ETL_CONSTEXPR
bool none() const ETL_NOEXCEPT
227 return (data & MASK) == ALL_CLEAR;
231 template <value_type pattern>
232 ETL_CONSTEXPR
bool none_of() const ETL_NOEXCEPT
234 return !any_of(pattern);
238 ETL_CONSTEXPR
bool none_of(value_type pattern)
const ETL_NOEXCEPT
240 return !any_of(pattern);
246 ETL_CONSTEXPR
bool any() const ETL_NOEXCEPT
248 return (data & MASK) != value_type(0);
252 template <value_type pattern>
253 ETL_CONSTEXPR
bool any_of() const ETL_NOEXCEPT
255 return (data & (pattern & MASK)) != value_type(0);
259 ETL_CONSTEXPR
bool any_of(value_type pattern)
const
261 return (data & (pattern & MASK)) != value_type(0);
267 ETL_CONSTEXPR value_type
value() const ETL_NOEXCEPT
277 data = pattern & MASK;
285 ETL_CONSTEXPR
operator value_type() const ETL_NOEXCEPT
305 data |= (pattern & MASK);
315 data ^= (pattern & MASK);
335 data = (pattern & MASK);
346 swap(data, other.data);
357 template <
typename T, T MASK>
360 return lhs.value() == rhs.value();
366 template <
typename T, T MASK>
369 return !(lhs == rhs);
375 template <
typename T, T MASK>
ETL_CONSTEXPR14 flags< T, MASK > & set() ETL_NOEXCEPT
Set the bits.
Definition: flags.h:104
ETL_CONSTEXPR flags() ETL_NOEXCEPT
Constructor.
Definition: flags.h:70
ETL_CONSTEXPR14 flags< T, MASK > & operator=(flags< T, MASK > other) ETL_NOEXCEPT
operator =
Definition: flags.h:323
ETL_CONSTEXPR bool none() const ETL_NOEXCEPT
Are none of the bits set?
Definition: flags.h:225
ETL_CONSTEXPR14 flags< T, MASK > & operator|=(value_type pattern) ETL_NOEXCEPT
operator |=
Definition: flags.h:303
ETL_CONSTEXPR14 flags< T, MASK > & operator&=(value_type pattern) ETL_NOEXCEPT
operator &=
Definition: flags.h:293
ETL_CONSTEXPR14 flags< T, MASK > & reset() ETL_NOEXCEPT
Reset the bit at the pattern.
Definition: flags.h:159
ETL_CONSTEXPR14 flags< T, MASK > & clear() ETL_NOEXCEPT
Clear all of the flags.
Definition: flags.h:148
ETL_CONSTEXPR14 flags< T, MASK > & operator^=(value_type pattern) ETL_NOEXCEPT
operator ^=
Definition: flags.h:313
ETL_CONSTEXPR bool any() const ETL_NOEXCEPT
Are any of the bits set?
Definition: flags.h:246
ETL_CONSTEXPR14 flags< T, MASK > & flip() ETL_NOEXCEPT
Flip bits.
Definition: flags.h:177
void swap(flags< T, MASK > &other) ETL_NOEXCEPT
swap
Definition: flags.h:343
ETL_CONSTEXPR bool test() const ETL_NOEXCEPT
Tests bits.
Definition: flags.h:89
ETL_CONSTEXPR value_type value() const ETL_NOEXCEPT
Return the value of the flags.
Definition: flags.h:267
Definition: integral_limits.h:54
is_integral
Definition: type_traits_generator.h:941
is_unsigned
Definition: type_traits_generator.h:961
Definition: absolute.h:37
bool operator!=(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition: array.h:594
void swap(etl::array< T, SIZE > &lhs, etl::array< T, SIZE > &rhs)
Template deduction guides.
Definition: array.h:570
void swap(etl::flags< T, MASK > &lhs, etl::flags< T, MASK > &rhs) ETL_NOEXCEPT
swap
Definition: flags.h:376
bool operator==(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition: array.h:582