Classes and functions to manage bit masks and flags. More...
Namespaces | |
details | |
errors | |
Namespace enclosing BitMask exceptions. | |
Classes | |
struct | Flag_t |
Type identifying a flag. Operations are implemented as free functions. More... | |
struct | Bits_t |
Type identifying a set of bits. More... | |
struct | BitMaskFromValuesTag |
Type for constructor tag from values. More... | |
class | BitMask |
A class containing a set of flags. More... | |
class | FlagSet |
A class containing a set of flags. More... | |
Typedefs | |
using | Index_t = unsigned int |
Type to denote the index of the flag. More... | |
Functions | |
template<typename Storage > | |
std::ostream & | operator<< (std::ostream &out, Flag_t< Storage > flag) |
Output of a flag into a stream (prints its index). More... | |
template<typename Storage > | |
std::string | to_string (Flag_t< Storage > const flag) |
Convert a flag into a stream (shows its index). More... | |
template<typename Stream , typename Storage > | |
Stream & | operator<< (Stream &&out, BitMask< Storage > const &mask) |
Output of a bit mask into a stream. More... | |
template<typename Storage > | |
constexpr BitMask< Storage > | makeMask (Bits_t< Storage > bits) |
Constructs a mask from bits. More... | |
template<unsigned int NBits, typename Storage > | |
std::ostream & | operator<< (std::ostream &out, FlagSet< NBits, Storage > const &flags) |
Output of a flag set into a stream. More... | |
Comparison operators for flags (based on the index) | |
template<typename Storage > | |
constexpr bool | operator== (Index_t left, Flag_t< Storage > right) |
template<typename Storage > | |
constexpr bool | operator== (Flag_t< Storage > left, Index_t right) |
template<typename Storage > | |
constexpr bool | operator!= (Index_t left, Flag_t< Storage > right) |
template<typename Storage > | |
constexpr bool | operator!= (Flag_t< Storage > left, Index_t right) |
template<typename Storage > | |
constexpr bool | operator< (Index_t left, Flag_t< Storage > right) |
template<typename Storage > | |
constexpr bool | operator< (Flag_t< Storage > left, Index_t right) |
template<typename Storage > | |
constexpr bool | operator> (Index_t left, Flag_t< Storage > right) |
template<typename Storage > | |
constexpr bool | operator> (Flag_t< Storage > left, Index_t right) |
template<typename Storage > | |
constexpr bool | operator<= (Index_t left, Flag_t< Storage > right) |
template<typename Storage > | |
constexpr bool | operator<= (Flag_t< Storage > left, Index_t right) |
template<typename Storage > | |
constexpr bool | operator>= (Index_t left, Flag_t< Storage > right) |
template<typename Storage > | |
constexpr bool | operator>= (Flag_t< Storage > left, Index_t right) |
Flag and bit operations. | |
Any bitwise operation with a flag returns a | |
template<typename Storage > | |
constexpr Bits_t< Storage > | operator| (Bits_t< Storage > left, Bits_t< Storage > right) |
Returns a new Bits_t with all the bits from both arguments set. More... | |
template<typename Storage > | |
constexpr Bits_t< Storage > | operator| (Bits_t< Storage > left, typename Bits_t< Storage >::Flag_t right) |
Returns a new Bits_t with all the bits from both arguments set. More... | |
template<typename Storage > | |
constexpr Bits_t< Storage > | operator| (typename Bits_t< Storage >::Flag_t left, Bits_t< Storage > right) |
Returns a new Bits_t with all the bits from both arguments set. More... | |
template<typename Storage > | |
constexpr Bits_t< Storage > | operator| (Flag_t< Storage > left, Flag_t< Storage > right) |
Returns a new Bits_t with all the bits from both arguments set. More... | |
template<typename Storage > | |
constexpr Bits_t< Storage > | operator+ (Bits_t< Storage > left, Bits_t< Storage > right) |
Returns a new Bits_t with all the bits from both arguments set. More... | |
template<typename Storage > | |
constexpr Bits_t< Storage > | operator+ (Bits_t< Storage > left, typename Bits_t< Storage >::Flag_t right) |
Returns a new Bits_t with all the bits from both arguments set. More... | |
template<typename Storage > | |
constexpr Bits_t< Storage > | operator+ (typename Bits_t< Storage >::Flag_t left, Bits_t< Storage > right) |
Returns a new Bits_t with all the bits from both arguments set. More... | |
template<typename Storage > | |
constexpr Bits_t< Storage > | operator+ (Flag_t< Storage > left, Flag_t< Storage > right) |
Returns a new Bits_t with all the bits from both arguments set. More... | |
Flag and mask management | |
The operations use the first operand as the starting point for the result. The binary operations in this group are:
The unary operations are:
| |
template<typename Storage > | |
constexpr BitMask< Storage > | operator| (BitMask< Storage > left, BitMask< Storage > right) |
template<typename Storage > | |
constexpr BitMask< Storage > | operator| (BitMask< Storage > left, typename BitMask< Storage >::Bits_t right) |
template<typename Storage > | |
constexpr BitMask< Storage > | operator| (typename BitMask< Storage >::Bits_t left, BitMask< Storage > right) |
template<typename Storage > | |
constexpr BitMask< Storage > | operator& (BitMask< Storage > left, BitMask< Storage > right) |
template<typename Storage > | |
constexpr BitMask< Storage > | operator& (BitMask< Storage > left, typename BitMask< Storage >::Bits_t right) |
template<typename Storage > | |
constexpr BitMask< Storage > | operator& (typename BitMask< Storage >::Bits_t left, BitMask< Storage > right) |
template<typename Storage > | |
constexpr BitMask< Storage > | operator& (Bits_t< Storage > left, Bits_t< Storage > right) |
template<typename Storage > | |
constexpr BitMask< Storage > | operator+ (BitMask< Storage > baseMask, BitMask< Storage > mask) |
template<typename Storage > | |
constexpr BitMask< Storage > | operator+ (BitMask< Storage > baseMask, typename BitMask< Storage >::Bits_t bits) |
template<typename Storage > | |
constexpr BitMask< Storage > | operator+ (typename BitMask< Storage >::Bits_t baseBits, BitMask< Storage > mask) |
template<typename Storage > | |
constexpr BitMask< Storage > | operator- (BitMask< Storage > baseMask, BitMask< Storage > mask) |
template<typename Storage > | |
constexpr BitMask< Storage > | operator- (BitMask< Storage > baseMask, typename BitMask< Storage >::Bits_t bits) |
template<typename Storage > | |
constexpr BitMask< Storage > | operator- (typename BitMask< Storage >::Bits_t baseBits, BitMask< Storage > mask) |
template<typename Storage > | |
constexpr BitMask< Storage > | operator- (Bits_t< Storage > baseBits, Bits_t< Storage > bits) |
template<typename Storage > | |
constexpr BitMask< Storage > | operator+ (BitMask< Storage > mask) |
Returns a copy of the mask. More... | |
template<typename Storage > | |
constexpr BitMask< Storage > | operator+ (Bits_t< Storage > bits) |
Returns a mask with the specified bits set. More... | |
template<typename Storage > | |
constexpr BitMask< Storage > | operator- (Bits_t< Storage > bits) |
Returns a mask M = -B so that A + M is equivalent to A - B . More... | |
template<typename Storage > | |
constexpr BitMask< Storage > | operator- (Flag_t< Storage > flag) |
Returns a mask M = -B so that A + M is equivalent to A - B . More... | |
template<typename Storage > | |
constexpr BitMask< Storage > | operator~ (BitMask< Storage > mask) |
Returns a bit set which unsets the specified bits. More... | |
template<typename Storage > | |
constexpr BitMask< Storage > | Set (Flag_t< Storage > flag) |
Returns a bit mask which sets the specified flag. More... | |
template<typename Storage > | |
constexpr BitMask< Storage > | Unset (Flag_t< Storage > flag) |
Returns a bit mask which unsets the specified flag. More... | |
Variables | |
constexpr BitMaskFromValuesTag | maskFromValues {} |
Value useful for BitMask constructors from value. More... | |
Classes and functions to manage bit masks and flags.
In this namespace a "hierarchy" of classes are defined:
Flag_t
: a single bit; it can be initialized with the bit index, but it is stored as a bit mask. A flag has two states: set and unset.Bits_t
: a set of flags (represented as a bit mask).BitMask
: a set of flags which can have one of three states each: set, unset or undefined.FlagSet
: a set of flags (like BitMask
), with the knowledge of a total number of supported flags.The first three classes manage exactly how many bits they have storage for. FlagSet
instead has also the notion of how many flags are actually supported. A number of flag-wise operations are defined. The result of an operation between two classes might be a class of a superior level in the hierarchy. In this sense, the lower objects should be intended as shortcut representations of Bits_t
. More specifically:
Bits_t
can be created out of a Flag_t
BitMask
can be created out of a Bits_t
(or a Flag_t
)~Flag_t
is not definedBits_t | Bits_t
and Bits_t + Bits_t
are still Bits_t
(and they are equivalent)Bits_t & Bits_t
and Bits_t - Bits_t
are BitMask
, to preserve the information of bits that are defined and unset~Bits_t
is a BitMask
as well using util::flags::Index_t = typedef unsigned int |
constexpr BitMask<Storage> util::flags::makeMask | ( | Bits_t< Storage > | bits | ) |
Constructs a mask from bits.
constexpr bool util::flags::operator!= | ( | Index_t | left, |
Flag_t< Storage > | right | ||
) |
constexpr bool util::flags::operator!= | ( | Flag_t< Storage > | left, |
Index_t | right | ||
) |
constexpr BitMask<Storage> util::flags::operator& | ( | BitMask< Storage > | left, |
BitMask< Storage > | right | ||
) |
Returns a mask which intersects two of them.
BitMask<Storage>::intersectWithMask()
constexpr BitMask<Storage> util::flags::operator& | ( | BitMask< Storage > | left, |
typename BitMask< Storage >::Bits_t | right | ||
) |
Returns a mask which intersects two of them.
BitMask<Storage>::intersectWithMask()
constexpr BitMask<Storage> util::flags::operator& | ( | typename BitMask< Storage >::Bits_t | left, |
BitMask< Storage > | right | ||
) |
Returns a mask which intersects two of them.
BitMask<Storage>::intersectWithMask()
constexpr BitMask<Storage> util::flags::operator& | ( | Bits_t< Storage > | left, |
Bits_t< Storage > | right | ||
) |
Returns a mask which intersects two of them.
BitMask<Storage>::intersectWithMask()
constexpr Bits_t<Storage> util::flags::operator+ | ( | Bits_t< Storage > | left, |
Bits_t< Storage > | right | ||
) |
Returns a new Bits_t with all the bits from both arguments set.
constexpr Bits_t<Storage> util::flags::operator+ | ( | Bits_t< Storage > | left, |
typename Bits_t< Storage >::Flag_t | right | ||
) |
Returns a new Bits_t with all the bits from both arguments set.
constexpr Bits_t<Storage> util::flags::operator+ | ( | typename Bits_t< Storage >::Flag_t | left, |
Bits_t< Storage > | right | ||
) |
Returns a new Bits_t with all the bits from both arguments set.
constexpr Bits_t<Storage> util::flags::operator+ | ( | Flag_t< Storage > | left, |
Flag_t< Storage > | right | ||
) |
Returns a new Bits_t with all the bits from both arguments set.
constexpr BitMask<Storage> util::flags::operator+ | ( | BitMask< Storage > | baseMask, |
BitMask< Storage > | mask | ||
) |
Returns a mask which merges two of them.
BitMask<Storage>::mergeIntoMask()
constexpr BitMask<Storage> util::flags::operator+ | ( | BitMask< Storage > | baseMask, |
typename BitMask< Storage >::Bits_t | bits | ||
) |
Returns a mask which merges two of them
BitMask<Storage>::mergeIntoMask()
constexpr BitMask<Storage> util::flags::operator+ | ( | typename BitMask< Storage >::Bits_t | baseBits, |
BitMask< Storage > | mask | ||
) |
Returns a mask which merges two of them
BitMask<Storage>::mergeIntoMask()
constexpr BitMask<Storage> util::flags::operator+ | ( | BitMask< Storage > | mask | ) |
Returns a copy of the mask.
constexpr BitMask<Storage> util::flags::operator+ | ( | Bits_t< Storage > | bits | ) |
Returns a mask with the specified bits set.
constexpr BitMask<Storage> util::flags::operator- | ( | BitMask< Storage > | baseMask, |
BitMask< Storage > | mask | ||
) |
Returns a mask set which defines and unsets the bits set in the mask.
BitMask<Storage>::unsetMask()
constexpr BitMask<Storage> util::flags::operator- | ( | BitMask< Storage > | baseMask, |
typename BitMask< Storage >::Bits_t | bits | ||
) |
Returns a mask set which defines and unsets the specified bits.
BitMask<Storage>::unsetMask()
constexpr BitMask<Storage> util::flags::operator- | ( | typename BitMask< Storage >::Bits_t | baseBits, |
BitMask< Storage > | mask | ||
) |
Returns a mask set which defines and unsets the bits set in the mask.
BitMask<Storage>::unsetMask()
constexpr BitMask<Storage> util::flags::operator- | ( | Bits_t< Storage > | baseBits, |
Bits_t< Storage > | bits | ||
) |
Returns a mask which defines and unsets the specified bits.
BitMask<Storage>::unsetMask()
constexpr BitMask<Storage> util::flags::operator- | ( | Bits_t< Storage > | bits | ) |
Returns a mask M = -B
so that A + M
is equivalent to A - B
.
constexpr BitMask<Storage> util::flags::operator- | ( | Flag_t< Storage > | flag | ) |
Returns a mask M = -B
so that A + M
is equivalent to A - B
.
constexpr bool util::flags::operator< | ( | Index_t | left, |
Flag_t< Storage > | right | ||
) |
constexpr bool util::flags::operator< | ( | Flag_t< Storage > | left, |
Index_t | right | ||
) |
std::ostream& util::flags::operator<< | ( | std::ostream & | out, |
Flag_t< Storage > | flag | ||
) |
std::ostream& util::flags::operator<< | ( | std::ostream & | out, |
FlagSet< NBits, Storage > const & | flags | ||
) |
Stream& util::flags::operator<< | ( | Stream && | out, |
BitMask< Storage > const & | mask | ||
) |
constexpr bool util::flags::operator<= | ( | Index_t | left, |
Flag_t< Storage > | right | ||
) |
constexpr bool util::flags::operator<= | ( | Flag_t< Storage > | left, |
Index_t | right | ||
) |
constexpr bool util::flags::operator== | ( | Index_t | left, |
Flag_t< Storage > | right | ||
) |
constexpr bool util::flags::operator== | ( | Flag_t< Storage > | left, |
Index_t | right | ||
) |
constexpr bool util::flags::operator> | ( | Index_t | left, |
Flag_t< Storage > | right | ||
) |
constexpr bool util::flags::operator> | ( | Flag_t< Storage > | left, |
Index_t | right | ||
) |
constexpr bool util::flags::operator>= | ( | Index_t | left, |
Flag_t< Storage > | right | ||
) |
constexpr bool util::flags::operator>= | ( | Flag_t< Storage > | left, |
Index_t | right | ||
) |
constexpr Bits_t<Storage> util::flags::operator| | ( | Bits_t< Storage > | left, |
Bits_t< Storage > | right | ||
) |
Returns a new Bits_t with all the bits from both arguments set.
constexpr Bits_t<Storage> util::flags::operator| | ( | Bits_t< Storage > | left, |
typename Bits_t< Storage >::Flag_t | right | ||
) |
Returns a new Bits_t with all the bits from both arguments set.
constexpr Bits_t<Storage> util::flags::operator| | ( | typename Bits_t< Storage >::Flag_t | left, |
Bits_t< Storage > | right | ||
) |
Returns a new Bits_t with all the bits from both arguments set.
constexpr Bits_t<Storage> util::flags::operator| | ( | Flag_t< Storage > | left, |
Flag_t< Storage > | right | ||
) |
Returns a new Bits_t with all the bits from both arguments set.
constexpr BitMask<Storage> util::flags::operator| | ( | BitMask< Storage > | left, |
BitMask< Storage > | right | ||
) |
Returns a mask which combines two of them.
BitMask<Storage>::combineWithMask()
constexpr BitMask<Storage> util::flags::operator| | ( | BitMask< Storage > | left, |
typename BitMask< Storage >::Bits_t | right | ||
) |
Returns a mask which merges two of them.
BitMask<Storage>::combineWithMask()
constexpr BitMask<Storage> util::flags::operator| | ( | typename BitMask< Storage >::Bits_t | left, |
BitMask< Storage > | right | ||
) |
Returns a mask which merges two of them.
BitMask<Storage>::combineWithMask()
constexpr BitMask<Storage> util::flags::operator~ | ( | BitMask< Storage > | mask | ) |
Returns a bit set which unsets the specified bits.
constexpr BitMask<Storage> util::flags::Set | ( | Flag_t< Storage > | flag | ) |
Returns a bit mask which sets the specified flag.
std::string util::flags::to_string | ( | Flag_t< Storage > const | flag | ) |
Convert a flag into a stream (shows its index).
Definition at line 187 of file BitMask.h.
constexpr BitMask<Storage> util::flags::Unset | ( | Flag_t< Storage > | flag | ) |
Returns a bit mask which unsets the specified flag.
constexpr BitMaskFromValuesTag util::flags::maskFromValues {} |