All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Namespaces | Classes | Typedefs | Functions | Variables
util::flags Namespace Reference

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 >
Streamoperator<< (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 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...
 
Flag and mask management

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...
 

Variables

constexpr BitMaskFromValuesTag maskFromValues {}
 Value useful for BitMask constructors from value. More...
 

Detailed Description

Classes and functions to manage bit masks and flags.

In this namespace a "hierarchy" of classes are defined:

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:

Typedef Documentation

using util::flags::Index_t = typedef unsigned int

Type to denote the index of the flag.

Definition at line 60 of file BitMask.h.

Function Documentation

template<typename Storage >
constexpr BitMask<Storage> util::flags::makeMask ( Bits_t< Storage >  bits)

Constructs a mask from bits.

template<typename Storage >
constexpr bool util::flags::operator!= ( Index_t  left,
Flag_t< Storage >  right 
)

Definition at line 144 of file BitMask.h.

145  { return left != right.index(); }
walls no right
Definition: selectors.fcl:105
walls no left
Definition: selectors.fcl:105
template<typename Storage >
constexpr bool util::flags::operator!= ( Flag_t< Storage >  left,
Index_t  right 
)

Definition at line 147 of file BitMask.h.

148  { return left.index() != right; }
walls no right
Definition: selectors.fcl:105
walls no left
Definition: selectors.fcl:105
template<typename Storage >
constexpr BitMask<Storage> util::flags::operator& ( BitMask< Storage >  left,
BitMask< Storage >  right 
)

Returns a mask which intersects two of them.

See Also
BitMask<Storage>::intersectWithMask()
template<typename Storage >
constexpr BitMask<Storage> util::flags::operator& ( BitMask< Storage >  left,
typename BitMask< Storage >::Bits_t  right 
)

Returns a mask which intersects two of them.

See Also
BitMask<Storage>::intersectWithMask()
template<typename Storage >
constexpr BitMask<Storage> util::flags::operator& ( typename BitMask< Storage >::Bits_t  left,
BitMask< Storage >  right 
)

Returns a mask which intersects two of them.

See Also
BitMask<Storage>::intersectWithMask()
template<typename Storage >
constexpr BitMask<Storage> util::flags::operator& ( Bits_t< Storage >  left,
Bits_t< Storage >  right 
)

Returns a mask which intersects two of them.

See Also
BitMask<Storage>::intersectWithMask()
template<typename Storage >
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.

template<typename Storage >
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.

template<typename Storage >
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.

template<typename Storage >
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.

template<typename Storage >
constexpr BitMask<Storage> util::flags::operator+ ( BitMask< Storage >  baseMask,
BitMask< Storage >  mask 
)

Returns a mask which merges two of them.

See Also
BitMask<Storage>::mergeIntoMask()
template<typename Storage >
constexpr BitMask<Storage> util::flags::operator+ ( BitMask< Storage >  baseMask,
typename BitMask< Storage >::Bits_t  bits 
)

Returns a mask which merges two of them

See Also
BitMask<Storage>::mergeIntoMask()
template<typename Storage >
constexpr BitMask<Storage> util::flags::operator+ ( typename BitMask< Storage >::Bits_t  baseBits,
BitMask< Storage >  mask 
)

Returns a mask which merges two of them

See Also
BitMask<Storage>::mergeIntoMask()
template<typename Storage >
constexpr BitMask<Storage> util::flags::operator+ ( BitMask< Storage >  mask)

Returns a copy of the mask.

template<typename Storage >
constexpr BitMask<Storage> util::flags::operator+ ( Bits_t< Storage >  bits)

Returns a mask with the specified bits set.

template<typename Storage >
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.

See Also
BitMask<Storage>::unsetMask()
template<typename Storage >
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.

See Also
BitMask<Storage>::unsetMask()
template<typename Storage >
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.

See Also
BitMask<Storage>::unsetMask()
template<typename Storage >
constexpr BitMask<Storage> util::flags::operator- ( Bits_t< Storage >  baseBits,
Bits_t< Storage >  bits 
)

Returns a mask which defines and unsets the specified bits.

See Also
BitMask<Storage>::unsetMask()
template<typename Storage >
constexpr BitMask<Storage> util::flags::operator- ( Bits_t< Storage >  bits)

Returns a mask M = -B so that A + M is equivalent to A - B.

template<typename Storage >
constexpr BitMask<Storage> util::flags::operator- ( Flag_t< Storage >  flag)

Returns a mask M = -B so that A + M is equivalent to A - B.

template<typename Storage >
constexpr bool util::flags::operator< ( Index_t  left,
Flag_t< Storage >  right 
)

Definition at line 151 of file BitMask.h.

152  { return left < right.index(); }
walls no right
Definition: selectors.fcl:105
walls no left
Definition: selectors.fcl:105
template<typename Storage >
constexpr bool util::flags::operator< ( Flag_t< Storage >  left,
Index_t  right 
)

Definition at line 154 of file BitMask.h.

155  { return left.index() < right; }
walls no right
Definition: selectors.fcl:105
walls no left
Definition: selectors.fcl:105
template<typename Storage >
std::ostream& util::flags::operator<< ( std::ostream &  out,
Flag_t< Storage >  flag 
)

Output of a flag into a stream (prints its index).

Definition at line 182 of file BitMask.h.

183  { out << '[' << flag.index() << ']'; return out; }
then echo unknown compiler flag
template<unsigned int NBits, typename Storage >
std::ostream& util::flags::operator<< ( std::ostream &  out,
FlagSet< NBits, Storage > const &  flags 
)

Output of a flag set into a stream.

Definition at line 196 of file FlagSet.h.

197  { flags.dump(out); return out; }
template<typename Stream , typename Storage >
Stream& util::flags::operator<< ( Stream &&  out,
BitMask< Storage > const &  mask 
)

Output of a bit mask into a stream.

Definition at line 1203 of file BitMask.h.

1204  { mask.dump(std::forward<Stream>(out)); return out; }
constexpr mask_t< EnumType > mask(EnumType bit, OtherBits...otherBits)
Returns a mask with all specified bits set.
template<typename Storage >
constexpr bool util::flags::operator<= ( Index_t  left,
Flag_t< Storage >  right 
)

Definition at line 165 of file BitMask.h.

166  { return left <= right.index(); }
walls no right
Definition: selectors.fcl:105
walls no left
Definition: selectors.fcl:105
template<typename Storage >
constexpr bool util::flags::operator<= ( Flag_t< Storage >  left,
Index_t  right 
)

Definition at line 168 of file BitMask.h.

169  { return left.index() <= right; }
walls no right
Definition: selectors.fcl:105
walls no left
Definition: selectors.fcl:105
template<typename Storage >
constexpr bool util::flags::operator== ( Index_t  left,
Flag_t< Storage >  right 
)

Definition at line 137 of file BitMask.h.

138  { return left == right.index(); }
walls no right
Definition: selectors.fcl:105
walls no left
Definition: selectors.fcl:105
template<typename Storage >
constexpr bool util::flags::operator== ( Flag_t< Storage >  left,
Index_t  right 
)

Definition at line 140 of file BitMask.h.

141  { return left.index() == right; }
walls no right
Definition: selectors.fcl:105
walls no left
Definition: selectors.fcl:105
template<typename Storage >
constexpr bool util::flags::operator> ( Index_t  left,
Flag_t< Storage >  right 
)

Definition at line 158 of file BitMask.h.

159  { return left > right.index(); }
walls no right
Definition: selectors.fcl:105
walls no left
Definition: selectors.fcl:105
template<typename Storage >
constexpr bool util::flags::operator> ( Flag_t< Storage >  left,
Index_t  right 
)

Definition at line 161 of file BitMask.h.

162  { return left.index() > right; }
walls no right
Definition: selectors.fcl:105
walls no left
Definition: selectors.fcl:105
template<typename Storage >
constexpr bool util::flags::operator>= ( Index_t  left,
Flag_t< Storage >  right 
)

Definition at line 172 of file BitMask.h.

173  { return left >= right.index(); }
walls no right
Definition: selectors.fcl:105
walls no left
Definition: selectors.fcl:105
template<typename Storage >
constexpr bool util::flags::operator>= ( Flag_t< Storage >  left,
Index_t  right 
)

Definition at line 175 of file BitMask.h.

176  { return left.index() >= right; }
walls no right
Definition: selectors.fcl:105
walls no left
Definition: selectors.fcl:105
template<typename Storage >
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.

template<typename Storage >
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.

template<typename Storage >
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.

template<typename Storage >
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.

template<typename Storage >
constexpr BitMask<Storage> util::flags::operator| ( BitMask< Storage >  left,
BitMask< Storage >  right 
)

Returns a mask which combines two of them.

See Also
BitMask<Storage>::combineWithMask()
template<typename Storage >
constexpr BitMask<Storage> util::flags::operator| ( BitMask< Storage >  left,
typename BitMask< Storage >::Bits_t  right 
)

Returns a mask which merges two of them.

See Also
BitMask<Storage>::combineWithMask()
template<typename Storage >
constexpr BitMask<Storage> util::flags::operator| ( typename BitMask< Storage >::Bits_t  left,
BitMask< Storage >  right 
)

Returns a mask which merges two of them.

See Also
BitMask<Storage>::combineWithMask()
template<typename Storage >
constexpr BitMask<Storage> util::flags::operator~ ( BitMask< Storage >  mask)

Returns a bit set which unsets the specified bits.

template<typename Storage >
constexpr BitMask<Storage> util::flags::Set ( Flag_t< Storage >  flag)

Returns a bit mask which sets the specified flag.

template<typename Storage >
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.

188  { return std::to_string(flag.index()); }
then echo unknown compiler flag
std::string to_string(WindowPattern const &pattern)
template<typename Storage >
constexpr BitMask<Storage> util::flags::Unset ( Flag_t< Storage >  flag)

Returns a bit mask which unsets the specified flag.

Variable Documentation

constexpr BitMaskFromValuesTag util::flags::maskFromValues {}

Value useful for BitMask constructors from value.

Definition at line 404 of file BitMask.h.