31#ifndef ETL_FLAGS_INCLUDED
32#define ETL_FLAGS_INCLUDED
38#include "static_assert.h"
51 template <typename T, T MASK = etl::integral_limits<T>::max>
56 ETL_STATIC_ASSERT(etl::is_integral<T>::value&& etl::is_unsigned<T>::value,
"Unsigned integral values only");
61 static ETL_CONSTANT value_type ALL_CLEAR = 0;
68 ETL_CONSTEXPR
flags() ETL_NOEXCEPT
74 :
data(pattern & MASK)
79 : data(pattern.value())
86 template <value_type pattern>
87 ETL_CONSTEXPR
bool test() const ETL_NOEXCEPT
89 return (data & pattern) != value_type(0);
101 template <value_type pattern,
bool value>
104 value ? data |= (pattern & MASK) : data &=
static_cast<value_type
>(~pattern & MASK);
110 template <value_type pattern>
119 template <value_type pattern>
122 data |= (pattern & MASK);
130 data |= (pattern & MASK);
138 value ? data |= (pattern & MASK) : data &= static_cast<value_type>(~pattern & MASK);
154 template <value_type pattern>
157 data &=
static_cast<value_type
>(~pattern);
175 data =
static_cast<value_type
>(~data & MASK);
181 template <value_type pattern>
184 data ^= pattern & MASK;
192 data ^= pattern & MASK;
200 ETL_CONSTEXPR
bool all() const ETL_NOEXCEPT
206 template <value_type pattern>
207 ETL_CONSTEXPR
bool all_of() const ETL_NOEXCEPT
209 return (data & (pattern & MASK)) == (pattern & MASK);
213 ETL_CONSTEXPR
bool all_of(value_type pattern)
const ETL_NOEXCEPT
215 return (data & (pattern & MASK)) == (pattern & MASK);
221 ETL_CONSTEXPR
bool none() const ETL_NOEXCEPT
223 return (data & MASK) == ALL_CLEAR;
227 template <value_type pattern>
228 ETL_CONSTEXPR
bool none_of() const ETL_NOEXCEPT
234 ETL_CONSTEXPR
bool none_of(value_type pattern)
const ETL_NOEXCEPT
236 return !any_of(pattern);
242 ETL_CONSTEXPR
bool any() const ETL_NOEXCEPT
244 return (data & MASK) != value_type(0);
248 template <value_type pattern>
249 ETL_CONSTEXPR
bool any_of() const ETL_NOEXCEPT
255 ETL_CONSTEXPR
bool any_of(value_type pattern)
const
257 return (data & (pattern & MASK)) != value_type(0);
263 ETL_CONSTEXPR value_type
value() const ETL_NOEXCEPT
273 data = pattern & MASK;
281 ETL_CONSTEXPR
operator value_type() const ETL_NOEXCEPT
301 data |= (pattern & MASK);
311 data ^= (pattern & MASK);
331 data = (pattern & MASK);
341 using ETL_OR_STD::swap;
342 swap(data, other.data);
350 template <
typename T, T MASK>
351 ETL_CONSTANT
typename flags<T, MASK>::value_type flags<T, MASK>::ALL_SET;
353 template <
typename T, T MASK>
354 ETL_CONSTANT
typename flags<T, MASK>::value_type flags<T, MASK>::ALL_CLEAR;
356 template <
typename T, T MASK>
357 ETL_CONSTANT
size_t flags<T, MASK>::NBITS;
362 template <
typename T, T MASK>
365 return lhs.value() == rhs.value();
371 template <
typename T, T MASK>
374 return !(lhs == rhs);
380 template <
typename T, T MASK>
ETL_CONSTEXPR14 flags< T, MASK > & operator=(value_type pattern) ETL_NOEXCEPT
operator =
Definition flags.h:329
ETL_CONSTEXPR14 flags< T, MASK > & set() ETL_NOEXCEPT
Set the bits.
Definition flags.h:102
ETL_CONSTEXPR14 flags< T, MASK > & operator^=(value_type pattern) ETL_NOEXCEPT
operator ^=
Definition flags.h:309
ETL_CONSTEXPR14 flags< T, MASK > & operator|=(value_type pattern) ETL_NOEXCEPT
operator |=
Definition flags.h:299
ETL_CONSTEXPR flags() ETL_NOEXCEPT
Constructor.
Definition flags.h:68
ETL_CONSTEXPR14 flags< T, MASK > & flip() ETL_NOEXCEPT
Flip bits.
Definition flags.h:173
ETL_CONSTEXPR14 flags< T, MASK > & reset() ETL_NOEXCEPT
Reset the bit at the pattern.
Definition flags.h:155
ETL_CONSTEXPR14 flags< T, MASK > & value(value_type pattern) ETL_NOEXCEPT
Set the value of the flags.
Definition flags.h:271
ETL_CONSTEXPR14 flags< T, MASK > & operator&=(value_type pattern) ETL_NOEXCEPT
operator &=
Definition flags.h:289
ETL_CONSTEXPR bool none() const ETL_NOEXCEPT
Are none of the bits set?
Definition flags.h:221
ETL_CONSTEXPR bool any() const ETL_NOEXCEPT
Are any of the bits set?
Definition flags.h:242
void swap(flags< T, MASK > &other) ETL_NOEXCEPT
swap
Definition flags.h:339
ETL_CONSTEXPR bool test() const ETL_NOEXCEPT
Tests bits.
Definition flags.h:87
ETL_CONSTEXPR value_type value() const ETL_NOEXCEPT
Return the value of the flags.
Definition flags.h:263
ETL_CONSTEXPR14 flags< T, MASK > & operator=(flags< T, MASK > other) ETL_NOEXCEPT
operator =
Definition flags.h:319
ETL_NODISCARD ETL_CONSTEXPR14 bool any_of(TIterator begin, TIterator end, TUnaryPredicate predicate)
Definition algorithm.h:2173
ETL_NODISCARD ETL_CONSTEXPR14 bool none_of(TIterator begin, TIterator end, TUnaryPredicate predicate)
Definition algorithm.h:2184
Definition integral_limits.h:518
bitset_ext
Definition absolute.h:40
ETL_CONSTEXPR14 void swap(etl::typed_storage_ext< T > &lhs, etl::typed_storage_ext< T > &rhs) ETL_NOEXCEPT
Swap two etl::typed_storage_ext.
Definition alignment.h:856
ETL_CONSTEXPR14 bool operator==(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition array.h:1081
ETL_CONSTEXPR TContainer::pointer data(TContainer &container)
Definition iterator.h:1228
ETL_CONSTEXPR14 bool operator!=(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition array.h:1093