StormByte C++ Library 1.2.0
StormByte is a comprehensive, cross-platform C++ library aimed at easing system programming, configuration management, logging, and database handling tasks. This library provides a unified API that abstracts away the complexities and inconsistencies of different platforms (Windows, Linux).
Loading...
Searching...
No Matches
Public Member Functions | Protected Attributes | List of all members
StormByte::Bitmask< Derived, E > Class Template Reference

CRTP wrapper that stores an unsigned enum as a flag set. More...

#include <StormByte/bitmask.hxx>

Collaboration diagram for StormByte::Bitmask< Derived, E >:
Collaboration graph
[legend]

Public Member Functions

constexpr Bitmask () noexcept
 Empty mask (static_cast<E>(0)).
 
constexpr Bitmask (E value) noexcept
 Mask from a single enumerator (or already combined value).
 
constexpr Bitmask (const Bitmask &other) noexcept=default
 Copy constructor.
 
constexpr Bitmask (Bitmask &&other) noexcept=default
 Move constructor.
 
virtual constexpr ~Bitmask () noexcept=default
 Destructor.
 
constexpr Bitmaskoperator= (const Bitmask &other) noexcept=default
 Copy assignment.
 
constexpr Bitmaskoperator= (Bitmask &&other) noexcept=default
 Move assignment.
 
constexpr bool operator== (const Bitmask &other) const noexcept
 Equality.
 
constexpr bool operator!= (const Bitmask &other) const noexcept
 Inequality.
 
constexpr Derived operator| (const Bitmask &other) const noexcept
 Bitwise OR; returns Derived.
 
constexpr Derived operator& (const Bitmask &other) const noexcept
 Bitwise AND; returns Derived.
 
constexpr Derived operator^ (const Bitmask &other) const noexcept
 Bitwise XOR; returns Derived.
 
constexpr Derived operator~ () const noexcept
 Bitwise NOT; returns Derived.
 
constexpr Bitmaskoperator|= (const Bitmask &other) noexcept
 OR-assign.
 
constexpr Bitmaskoperator&= (const Bitmask &other) noexcept
 AND-assign.
 
constexpr Bitmaskoperator^= (const Bitmask &other) noexcept
 XOR-assign.
 
constexpr void Add (E value) noexcept
 Sets every bit in value.
 
constexpr void Remove (E value) noexcept
 Clears every bit in value.
 
constexpr E Value () const noexcept
 Stored enumerators.
 
constexpr bool Has (E value) const noexcept
 true when every bit in value is set.
 
constexpr bool Has (const Bitmask &other) const noexcept
 true when every bit in other is set.
 
constexpr bool HasAny (E value) const noexcept
 true when any bit in value is set.
 
constexpr bool HasAny (const Bitmask &other) const noexcept
 true when any bit in other is set.
 
constexpr bool HasNone (E value) const noexcept
 true when no bit in value is set.
 
constexpr bool HasNone (const Bitmask &other) const noexcept
 true when no bit in other is set.
 

Protected Attributes

m_value
 Packed flags.
 

Detailed Description

template<typename Derived, Type::UnsignedEnum E>
class StormByte::Bitmask< Derived, E >

CRTP wrapper that stores an unsigned enum as a flag set.

Template Parameters
DerivedConcrete bitmask type.
EFlag enumeration (Type::UnsignedEnum).
enum class MyFlags : uint8_t { FlagA = 0x01, FlagB = 0x02 };
class MyBitmask : public Bitmask<MyBitmask, MyFlags> {
public:
using Bitmask<MyBitmask, MyFlags>::Bitmask;
};
MyBitmask mask(MyFlags::FlagA);
mask |= MyBitmask(MyFlags::FlagB);
CRTP wrapper that stores an unsigned enum as a flag set.
Definition bitmask.hxx:95

Constructor & Destructor Documentation

◆ Bitmask() [1/4]

template<typename Derived , Type::UnsignedEnum E>
constexpr StormByte::Bitmask< Derived, E >::Bitmask ( )
inlineconstexprnoexcept

Empty mask (static_cast<E>(0)).

◆ Bitmask() [2/4]

template<typename Derived , Type::UnsignedEnum E>
constexpr StormByte::Bitmask< Derived, E >::Bitmask ( value)
inlineconstexprnoexcept

Mask from a single enumerator (or already combined value).

Parameters
valueInitial flags.

◆ Bitmask() [3/4]

template<typename Derived , Type::UnsignedEnum E>
constexpr StormByte::Bitmask< Derived, E >::Bitmask ( const Bitmask< Derived, E > &  other)
constexprdefaultnoexcept

Copy constructor.

Parameters
otherSource mask.

◆ Bitmask() [4/4]

template<typename Derived , Type::UnsignedEnum E>
constexpr StormByte::Bitmask< Derived, E >::Bitmask ( Bitmask< Derived, E > &&  other)
constexprdefaultnoexcept

Move constructor.

Parameters
otherSource mask.

◆ ~Bitmask()

template<typename Derived , Type::UnsignedEnum E>
virtual constexpr StormByte::Bitmask< Derived, E >::~Bitmask ( )
constexprvirtualdefaultnoexcept

Destructor.

Member Function Documentation

◆ Add()

template<typename Derived , Type::UnsignedEnum E>
constexpr void StormByte::Bitmask< Derived, E >::Add ( value)
constexprnoexcept

Sets every bit in value.

Parameters
valueFlags to add.

◆ Has() [1/2]

template<typename Derived , Type::UnsignedEnum E>
constexpr bool StormByte::Bitmask< Derived, E >::Has ( const Bitmask< Derived, E > &  other) const
constexprnoexcept

true when every bit in other is set.

Parameters
otherOther mask.

◆ Has() [2/2]

template<typename Derived , Type::UnsignedEnum E>
constexpr bool StormByte::Bitmask< Derived, E >::Has ( value) const
constexprnoexcept

true when every bit in value is set.

Parameters
valueFlags to test.

◆ HasAny() [1/2]

template<typename Derived , Type::UnsignedEnum E>
constexpr bool StormByte::Bitmask< Derived, E >::HasAny ( const Bitmask< Derived, E > &  other) const
constexprnoexcept

true when any bit in other is set.

Parameters
otherOther mask.

◆ HasAny() [2/2]

template<typename Derived , Type::UnsignedEnum E>
constexpr bool StormByte::Bitmask< Derived, E >::HasAny ( value) const
constexprnoexcept

true when any bit in value is set.

Parameters
valueFlags to test.

◆ HasNone() [1/2]

template<typename Derived , Type::UnsignedEnum E>
constexpr bool StormByte::Bitmask< Derived, E >::HasNone ( const Bitmask< Derived, E > &  other) const
constexprnoexcept

true when no bit in other is set.

Parameters
otherOther mask.

◆ HasNone() [2/2]

template<typename Derived , Type::UnsignedEnum E>
constexpr bool StormByte::Bitmask< Derived, E >::HasNone ( value) const
constexprnoexcept

true when no bit in value is set.

Parameters
valueFlags to test.

◆ operator!=()

template<typename Derived , Type::UnsignedEnum E>
constexpr bool StormByte::Bitmask< Derived, E >::operator!= ( const Bitmask< Derived, E > &  other) const
constexprnoexcept

Inequality.

Parameters
otherOther mask.
Returns
true when the stored E differs.

◆ operator&()

template<typename Derived , Type::UnsignedEnum E>
constexpr Derived StormByte::Bitmask< Derived, E >::operator& ( const Bitmask< Derived, E > &  other) const
constexprnoexcept

Bitwise AND; returns Derived.

Parameters
otherOther mask.
Returns
New Derived with intersection of flags.

◆ operator&=()

template<typename Derived , Type::UnsignedEnum E>
constexpr Bitmask & StormByte::Bitmask< Derived, E >::operator&= ( const Bitmask< Derived, E > &  other)
constexprnoexcept

AND-assign.

Parameters
otherOther mask.
Returns
*this.

◆ operator=() [1/2]

template<typename Derived , Type::UnsignedEnum E>
constexpr Bitmask & StormByte::Bitmask< Derived, E >::operator= ( Bitmask< Derived, E > &&  other)
constexprdefaultnoexcept

Move assignment.

Parameters
otherSource mask.
Returns
*this.

◆ operator=() [2/2]

template<typename Derived , Type::UnsignedEnum E>
constexpr Bitmask & StormByte::Bitmask< Derived, E >::operator= ( const Bitmask< Derived, E > &  other)
constexprdefaultnoexcept

Copy assignment.

Parameters
otherSource mask.
Returns
*this.

◆ operator==()

template<typename Derived , Type::UnsignedEnum E>
constexpr bool StormByte::Bitmask< Derived, E >::operator== ( const Bitmask< Derived, E > &  other) const
constexprnoexcept

Equality.

Parameters
otherOther mask.
Returns
true when both store the same E.

◆ operator^()

template<typename Derived , Type::UnsignedEnum E>
constexpr Derived StormByte::Bitmask< Derived, E >::operator^ ( const Bitmask< Derived, E > &  other) const
constexprnoexcept

Bitwise XOR; returns Derived.

Parameters
otherOther mask.
Returns
New Derived with toggled flags.

◆ operator^=()

template<typename Derived , Type::UnsignedEnum E>
constexpr Bitmask & StormByte::Bitmask< Derived, E >::operator^= ( const Bitmask< Derived, E > &  other)
constexprnoexcept

XOR-assign.

Parameters
otherOther mask.
Returns
*this.

◆ operator|()

template<typename Derived , Type::UnsignedEnum E>
constexpr Derived StormByte::Bitmask< Derived, E >::operator| ( const Bitmask< Derived, E > &  other) const
constexprnoexcept

Bitwise OR; returns Derived.

Parameters
otherOther mask.
Returns
New Derived with union of flags.

◆ operator|=()

template<typename Derived , Type::UnsignedEnum E>
constexpr Bitmask & StormByte::Bitmask< Derived, E >::operator|= ( const Bitmask< Derived, E > &  other)
constexprnoexcept

OR-assign.

Parameters
otherOther mask.
Returns
*this.

◆ operator~()

template<typename Derived , Type::UnsignedEnum E>
constexpr Derived StormByte::Bitmask< Derived, E >::operator~ ( ) const
constexprnoexcept

Bitwise NOT; returns Derived.

Returns
New Derived with inverted flags.

◆ Remove()

template<typename Derived , Type::UnsignedEnum E>
constexpr void StormByte::Bitmask< Derived, E >::Remove ( value)
constexprnoexcept

Clears every bit in value.

Parameters
valueFlags to remove.

◆ Value()

template<typename Derived , Type::UnsignedEnum E>
constexpr E StormByte::Bitmask< Derived, E >::Value ( ) const
constexprnoexcept

Stored enumerators.

Returns
Current E.

Member Data Documentation

◆ m_value

template<typename Derived , Type::UnsignedEnum E>
E StormByte::Bitmask< Derived, E >::m_value
protected

Packed flags.


The documentation for this class was generated from the following file: