|
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...
|
|
|
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) |
|
|
Any bitwise operation with a flag returns a Bits_t .
|
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...
|
|
|
The operations use the first operand as the starting point for the result. The binary operations in this group are:
- bit-wise OR (equivalent to
combineWithMask() )
- bit-wise AND (equivalent to
intersectWithMask() )
- addition: the flags of the right operand that are defined are copied into the result
- subtraction: the flags of the right operand that are set are unset in the result
The unary operations are:
- bitwise negation (equivalent to
negateMask() )
- unary plus sign: no operation (bit it converts the operand to
Mask_t )
- unary minus sign is not defined
|
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...
|
|
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: