IOLink  IOL_v1.1.0_release
iolink::FlagSet< EnumType > Class Template Reference

Template class to handle a flags system from an enum. More...

#include <iolink/FlagSet.h>

Public Member Functions

 FlagSet ()
 Initialize with no flags set.
 
 FlagSet (uint64_t value)
 Initialize from a value.
 
 FlagSet (EnumType flags)
 Initialize from a value from the wrapped enum type.
 
 FlagSet (const FlagSet &other)=default
 
FlagSetoperator= (const FlagSet &other)=default
 
 FlagSet (FlagSet &&other) noexcept=default
 
FlagSetoperator= (FlagSet &&other) noexcept=default
 
uint64_t value () const
 Return the internal value.
 
bool has (FlagSet flags) const
 Check if a given set of flags is true.
 
void add (FlagSet flags)
 Set the given set of flags to true.
 
void remove (FlagSet flags)
 Set the given set of flags to false.
 
bool operator== (FlagSet flags) const
 
bool operator!= (FlagSet flags) const
 
FlagSetoperator|= (FlagSet flags)
 
FlagSetoperator&= (FlagSet flags)
 
FlagSetoperator^= (FlagSet flags)
 
FlagSet operator| (FlagSet flags)
 
FlagSet operator& (FlagSet flags)
 
FlagSet operator^ (FlagSet flags)
 

Detailed Description

template<typename EnumType>
class iolink::FlagSet< EnumType >

Template class to handle a flags system from an enum.

The wrapped enum must have the values set to follow a flags logic, flags values must be multiples of two. The enum can also have shorcut values that combines multiple basic values.

Setup:

// our enum to wrap
enum class TestEnum
{
Value1 = 0x1, // basic value: 001
Value2 = 0x2, // basic value: 010
Value3 = 0x4, // basic value: 100
// Value1 and Value2
Combo1 = 0x3, // shortcut value: 011
// Value1 and Value3
Combo2 = 0x5, // shortcut value: 101
};
// defines bitwise operators on enum
IOLINK_DEFINE_ENUM_BITWISE_OPERATORS(TestEnum)
// alias on template type
using TestFlagSet = FlagSet<EnumType>;
Template Parameters
EnumTypeThe enum to wrap.

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