31#ifndef ETL_FLAGS_INCLUDED
32#define ETL_FLAGS_INCLUDED
38#include "static_assert.h"
49 template <typename T, T MASK = etl::integral_limits<T>::max>
54 ETL_STATIC_ASSERT(etl::is_integral<T>::value&& etl::is_unsigned<T>::value,
"Unsigned integral values only");
59 static ETL_CONSTANT value_type ALL_CLEAR = 0;
66 ETL_CONSTEXPR
flags() ETL_NOEXCEPT
72 :
data(pattern & MASK)
77 : data(pattern.value())
84 template <value_type pattern>
85 ETL_CONSTEXPR
bool test() const ETL_NOEXCEPT
87 return (data & pattern) != value_type(0);
99 template <value_type pattern,
bool value>
102 value ? data |= (pattern & MASK) : data &=
static_cast<value_type
>(~pattern & MASK);
108 template <value_type pattern>
117 template <value_type pattern>
120 data |= (pattern & MASK);
128 data |= (pattern & MASK);
136 value ? data |= (pattern & MASK) : data &= static_cast<value_type>(~pattern & MASK);
152 template <value_type pattern>
155 data &=
static_cast<value_type
>(~pattern);
173 data =
static_cast<value_type
>(~data & MASK);
179 template <value_type pattern>
182 data ^= pattern & MASK;
190 data ^= pattern & MASK;
198 ETL_CONSTEXPR
bool all() const ETL_NOEXCEPT
204 template <value_type pattern>
205 ETL_CONSTEXPR
bool all_of() const ETL_NOEXCEPT
207 return (data & (pattern & MASK)) == (pattern & MASK);
211 ETL_CONSTEXPR
bool all_of(value_type pattern)
const ETL_NOEXCEPT
213 return (data & (pattern & MASK)) == (pattern & MASK);
219 ETL_CONSTEXPR
bool none() const ETL_NOEXCEPT
221 return (data & MASK) == ALL_CLEAR;
225 template <value_type pattern>
226 ETL_CONSTEXPR
bool none_of() const ETL_NOEXCEPT
232 ETL_CONSTEXPR
bool none_of(value_type pattern)
const ETL_NOEXCEPT
234 return !any_of(pattern);
240 ETL_CONSTEXPR
bool any() const ETL_NOEXCEPT
242 return (data & MASK) != value_type(0);
246 template <value_type pattern>
247 ETL_CONSTEXPR
bool any_of() const ETL_NOEXCEPT
253 ETL_CONSTEXPR
bool any_of(value_type pattern)
const
255 return (data & (pattern & MASK)) != value_type(0);
261 ETL_CONSTEXPR value_type
value() const ETL_NOEXCEPT
271 data = pattern & MASK;
279 ETL_CONSTEXPR
operator value_type() const ETL_NOEXCEPT
299 data |= (pattern & MASK);
309 data ^= (pattern & MASK);
329 data = (pattern & MASK);
339 using ETL_OR_STD::swap;
340 swap(data, other.data);
348 template <
typename T, T MASK>
349 ETL_CONSTANT
typename flags<T, MASK>::value_type flags<T, MASK>::ALL_SET;
351 template <
typename T, T MASK>
352 ETL_CONSTANT
typename flags<T, MASK>::value_type flags<T, MASK>::ALL_CLEAR;
354 template <
typename T, T MASK>
355 ETL_CONSTANT
size_t flags<T, MASK>::NBITS;
360 template <
typename T, T MASK>
363 return lhs.value() == rhs.value();
369 template <
typename T, T MASK>
372 return !(lhs == rhs);
378 template <
typename T, T MASK>
ETL_CONSTEXPR14 flags< T, MASK > & operator=(value_type pattern) ETL_NOEXCEPT
operator =
Definition flags.h:327
ETL_CONSTEXPR14 flags< T, MASK > & set() ETL_NOEXCEPT
Set the bits.
Definition flags.h:100
ETL_CONSTEXPR14 flags< T, MASK > & operator^=(value_type pattern) ETL_NOEXCEPT
operator ^=
Definition flags.h:307
ETL_CONSTEXPR14 flags< T, MASK > & operator|=(value_type pattern) ETL_NOEXCEPT
operator |=
Definition flags.h:297
ETL_CONSTEXPR flags() ETL_NOEXCEPT
Constructor.
Definition flags.h:66
ETL_CONSTEXPR14 flags< T, MASK > & flip() ETL_NOEXCEPT
Flip bits.
Definition flags.h:171
ETL_CONSTEXPR14 flags< T, MASK > & reset() ETL_NOEXCEPT
Reset the bit at the pattern.
Definition flags.h:153
ETL_CONSTEXPR14 flags< T, MASK > & value(value_type pattern) ETL_NOEXCEPT
Set the value of the flags.
Definition flags.h:269
ETL_CONSTEXPR14 flags< T, MASK > & operator&=(value_type pattern) ETL_NOEXCEPT
operator &=
Definition flags.h:287
ETL_CONSTEXPR bool none() const ETL_NOEXCEPT
Are none of the bits set?
Definition flags.h:219
ETL_CONSTEXPR bool any() const ETL_NOEXCEPT
Are any of the bits set?
Definition flags.h:240
void swap(flags< T, MASK > &other) ETL_NOEXCEPT
swap
Definition flags.h:337
ETL_CONSTEXPR bool test() const ETL_NOEXCEPT
Tests bits.
Definition flags.h:85
ETL_CONSTEXPR value_type value() const ETL_NOEXCEPT
Return the value of the flags.
Definition flags.h:261
ETL_CONSTEXPR14 flags< T, MASK > & operator=(flags< T, MASK > other) ETL_NOEXCEPT
operator =
Definition flags.h:317
ETL_NODISCARD ETL_CONSTEXPR14 bool any_of(TIterator begin, TIterator end, TUnaryPredicate predicate)
Definition algorithm.h:2210
ETL_NODISCARD ETL_CONSTEXPR14 bool none_of(TIterator begin, TIterator end, TUnaryPredicate predicate)
Definition algorithm.h:2221
Definition integral_limits.h:517
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:1078
ETL_CONSTEXPR TContainer::pointer data(TContainer &container)
Definition iterator.h:1470
ETL_CONSTEXPR14 bool operator!=(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition array.h:1090