NAIA
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups
Classes | Macros | Functions
bitmask.h File Reference
#include <bitset>
#include <string>
#include <type_traits>

Go to the source code of this file.

Classes

struct  EnableBitMaskOperators< Enum >
 

Macros

#define ENABLE_BITMASK_OPERATORS(x)   template <> struct EnableBitMaskOperators<x> { static const bool enable = true; };
 Type safe implementation of a bitmask enum. More...
 

Functions

template<typename Enum >
std::enable_if
< EnableBitMaskOperators< Enum >
::enable, Enum >::type 
operator| (const Enum lhs, const Enum rhs)
 
template<typename Enum >
std::enable_if
< EnableBitMaskOperators< Enum >
::enable, Enum >::type 
operator& (const Enum lhs, const Enum rhs)
 
template<typename Enum >
std::enable_if
< EnableBitMaskOperators< Enum >
::enable, Enum >::type 
operator^ (const Enum lhs, const Enum rhs)
 
template<typename Enum >
std::enable_if
< EnableBitMaskOperators< Enum >
::enable, Enum >::type 
operator~ (const Enum rhs)
 
template<typename Enum >
std::enable_if
< EnableBitMaskOperators< Enum >
::enable, Enum >::type 
operator!= (const Enum lhs, const Enum rhs)
 
template<typename Enum >
std::enable_if
< EnableBitMaskOperators< Enum >
::enable, Enum >::type 
operator|= (Enum &lhs, const Enum rhs)
 
template<typename Enum >
std::enable_if
< EnableBitMaskOperators< Enum >
::enable, Enum >::type 
operator&= (Enum &lhs, const Enum rhs)
 
template<typename Enum >
std::enable_if
< EnableBitMaskOperators< Enum >
::enable, Enum >::type 
operator^= (Enum &lhs, const Enum rhs)
 
template<typename Enum >
std::enable_if
< EnableBitMaskOperators< Enum >
::enable, bool >::type 
MatchAnyBit (const Enum test, const Enum ones, const Enum zeroes=static_cast< Enum >(0))
 
template<typename Enum >
std::enable_if
< EnableBitMaskOperators< Enum >
::enable, bool >::type 
MatchAllBits (const Enum test, const Enum ones, const Enum zeroes=static_cast< Enum >(0))
 
template<int N, typename Enum >
std::enable_if
< EnableBitMaskOperators< Enum >
::enable, std::string >::type 
to_string_binary (const Enum rhs)
 

Macro Definition Documentation

#define ENABLE_BITMASK_OPERATORS (   x)    template <> struct EnableBitMaskOperators<x> { static const bool enable = true; };

Type safe implementation of a bitmask enum.

Adapted form https://wiggling-bits.net/using-enum-classes-as-type-safe-bitmasks/

Definition at line 21 of file bitmask.h.

Function Documentation

template<typename Enum >
std::enable_if<EnableBitMaskOperators<Enum>::enable, bool>::type MatchAllBits ( const Enum  test,
const Enum  ones,
const Enum  zeroes = static_cast<Enum>(0) 
)
template<typename Enum >
std::enable_if<EnableBitMaskOperators<Enum>::enable, bool>::type MatchAnyBit ( const Enum  test,
const Enum  ones,
const Enum  zeroes = static_cast<Enum>(0) 
)

Definition at line 80 of file bitmask.h.

template<typename Enum >
std::enable_if<EnableBitMaskOperators<Enum>::enable, Enum>::type operator!= ( const Enum  lhs,
const Enum  rhs 
)

Definition at line 51 of file bitmask.h.

template<typename Enum >
std::enable_if<EnableBitMaskOperators<Enum>::enable, Enum>::type operator& ( const Enum  lhs,
const Enum  rhs 
)

Definition at line 33 of file bitmask.h.

template<typename Enum >
std::enable_if<EnableBitMaskOperators<Enum>::enable, Enum>::type operator&= ( Enum &  lhs,
const Enum  rhs 
)

Definition at line 64 of file bitmask.h.

template<typename Enum >
std::enable_if<EnableBitMaskOperators<Enum>::enable, Enum>::type operator^ ( const Enum  lhs,
const Enum  rhs 
)

Definition at line 39 of file bitmask.h.

template<typename Enum >
std::enable_if<EnableBitMaskOperators<Enum>::enable, Enum>::type operator^= ( Enum &  lhs,
const Enum  rhs 
)

Definition at line 71 of file bitmask.h.

template<typename Enum >
std::enable_if<EnableBitMaskOperators<Enum>::enable, Enum>::type operator| ( const Enum  lhs,
const Enum  rhs 
)

Definition at line 27 of file bitmask.h.

template<typename Enum >
std::enable_if<EnableBitMaskOperators<Enum>::enable, Enum>::type operator|= ( Enum &  lhs,
const Enum  rhs 
)

Definition at line 57 of file bitmask.h.

template<typename Enum >
std::enable_if<EnableBitMaskOperators<Enum>::enable, Enum>::type operator~ ( const Enum  rhs)

Definition at line 45 of file bitmask.h.

template<int N, typename Enum >
std::enable_if<EnableBitMaskOperators<Enum>::enable, std::string>::type to_string_binary ( const Enum  rhs)

Definition at line 93 of file bitmask.h.