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>
61 static ETL_CONSTANT value_type ALL_CLEAR = 0;
68 ETL_CONSTEXPR
flags() ETL_NOEXCEPT
73 ETL_CONSTEXPR
flags(value_type pattern) ETL_NOEXCEPT
74 : data(pattern & MASK)
78 ETL_CONSTEXPR
flags(
const flags<T, MASK>& pattern) ETL_NOEXCEPT
79 : data(pattern.value())
86 template <value_type pattern>
87 ETL_CONSTEXPR
bool test() const ETL_NOEXCEPT
89 return (data & pattern) != value_type(0);
93 ETL_CONSTEXPR
bool test(value_type pattern)
const ETL_NOEXCEPT
95 return (data & pattern) != value_type(0);
101 template <value_type pattern,
bool value>
104 value ? data |= (pattern & MASK) : data &= (~pattern & MASK);
110 template <value_type pattern>
113 value ? data |= (pattern & MASK) : data &= (~pattern & MASK);
119 template <value_type pattern>
120 ETL_CONSTEXPR14 flags<T, MASK>&
set() ETL_NOEXCEPT
122 data |= (pattern & MASK);
128 ETL_CONSTEXPR14 flags<T, MASK>&
set(value_type pattern) ETL_NOEXCEPT
130 data |= (pattern & MASK);
136 ETL_CONSTEXPR14 flags<T, MASK>&
set(value_type pattern,
bool value) ETL_NOEXCEPT
138 value ? data |= (pattern & MASK) : data &= (~pattern & MASK);
156 template <value_type pattern>
177 data = (~data & MASK);
183 template <value_type pattern>
186 data ^= pattern & MASK;
192 ETL_CONSTEXPR14 flags<T, MASK>&
flip(value_type pattern) ETL_NOEXCEPT
194 data ^= pattern & MASK;
202 ETL_CONSTEXPR
bool all() const ETL_NOEXCEPT
208 template <value_type pattern>
209 ETL_CONSTEXPR
bool all_of() const ETL_NOEXCEPT
211 return (data & (pattern & MASK)) == (pattern & MASK);
215 ETL_CONSTEXPR
bool all_of(value_type pattern)
const ETL_NOEXCEPT
217 return (data & (pattern & MASK)) == (pattern & MASK);
223 ETL_CONSTEXPR
bool none() const ETL_NOEXCEPT
225 return (data & MASK) == ALL_CLEAR;
229 template <value_type pattern>
230 ETL_CONSTEXPR
bool none_of() const ETL_NOEXCEPT
232 return !any_of(pattern);
236 ETL_CONSTEXPR
bool none_of(value_type pattern)
const ETL_NOEXCEPT
238 return !any_of(pattern);
244 ETL_CONSTEXPR
bool any() const ETL_NOEXCEPT
246 return (data & MASK) != value_type(0);
250 template <value_type pattern>
251 ETL_CONSTEXPR
bool any_of() const ETL_NOEXCEPT
253 return (data & (pattern & MASK)) != value_type(0);
257 ETL_CONSTEXPR
bool any_of(value_type pattern)
const
259 return (data & (pattern & MASK)) != value_type(0);
265 ETL_CONSTEXPR value_type
value() const ETL_NOEXCEPT
275 data = pattern & MASK;
283 ETL_CONSTEXPR
operator value_type() const ETL_NOEXCEPT
303 data |= (pattern & MASK);
313 data ^= (pattern & MASK);
333 data = (pattern & MASK);
344 swap(data, other.data);
352 template <
typename T, T MASK>
353 ETL_CONSTANT
typename flags<T, MASK>::value_type flags<T, MASK>::ALL_SET;
355 template <
typename T, T MASK>
356 ETL_CONSTANT
typename flags<T, MASK>::value_type flags<T, MASK>::ALL_CLEAR;
358 template <
typename T, T MASK>
359 ETL_CONSTANT
size_t flags<T, MASK>::NBITS;
364 template <
typename T, T MASK>
367 return lhs.value() == rhs.value();
373 template <
typename T, T MASK>
376 return !(lhs == rhs);
382 template <
typename T, T MASK>
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:311
ETL_CONSTEXPR14 flags< T, MASK > & clear() ETL_NOEXCEPT
Clear all of the flags.
Definition: flags.h:146
ETL_CONSTEXPR14 flags< T, MASK > & operator|=(value_type pattern) ETL_NOEXCEPT
operator |=
Definition: flags.h:301
ETL_CONSTEXPR flags() ETL_NOEXCEPT
Constructor.
Definition: flags.h:68
ETL_CONSTEXPR14 flags< T, MASK > & flip() ETL_NOEXCEPT
Flip bits.
Definition: flags.h:175
ETL_CONSTEXPR14 flags< T, MASK > & reset() ETL_NOEXCEPT
Reset the bit at the pattern.
Definition: flags.h:157
ETL_CONSTEXPR14 flags< T, MASK > & operator&=(value_type pattern) ETL_NOEXCEPT
operator &=
Definition: flags.h:291
ETL_CONSTEXPR bool none() const ETL_NOEXCEPT
Are none of the bits set?
Definition: flags.h:223
ETL_CONSTEXPR bool any() const ETL_NOEXCEPT
Are any of the bits set?
Definition: flags.h:244
void swap(flags< T, MASK > &other) ETL_NOEXCEPT
swap
Definition: flags.h:341
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:265
ETL_CONSTEXPR14 flags< T, MASK > & operator=(flags< T, MASK > other) ETL_NOEXCEPT
operator =
Definition: flags.h:321
Definition: integral_limits.h:468
is_integral
Definition: type_traits_generator.h:1001
is_unsigned
Definition: type_traits_generator.h:1021
bitset_ext
Definition: absolute.h:38
bool operator!=(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition: array.h:645
void swap(etl::array< T, SIZE > &lhs, etl::array< T, SIZE > &rhs)
Template deduction guides.
Definition: array.h:621
void swap(etl::flags< T, MASK > &lhs, etl::flags< T, MASK > &rhs) ETL_NOEXCEPT
swap
Definition: flags.h:383
bool operator==(const etl::array< T, SIZE > &lhs, const etl::array< T, SIZE > &rhs)
Definition: array.h:633