Diligent Engine  v.2.4.g
Macros | Typedefs
FlagEnum.h File Reference
#include "BasicTypes.h"

Go to the source code of this file.

Macros

#define DEFINE_FLAG_ENUM_OPERATORS(ENUMTYPE)
 

Typedefs

template<typename EnumType >
using _UNDERLYING_ENUM_T = typename std::underlying_type< EnumType >::type
 

Macro Definition Documentation

◆ DEFINE_FLAG_ENUM_OPERATORS

#define DEFINE_FLAG_ENUM_OPERATORS (   ENUMTYPE)
Value:
extern "C++" \
{ \
inline ENUMTYPE& operator|=(ENUMTYPE& a, ENUMTYPE b) throw() { return reinterpret_cast<ENUMTYPE&>(reinterpret_cast<_UNDERLYING_ENUM_T<ENUMTYPE>&>(a) |= static_cast<_UNDERLYING_ENUM_T<ENUMTYPE>>(b)); } \
inline ENUMTYPE& operator&=(ENUMTYPE& a, ENUMTYPE b) throw() { return reinterpret_cast<ENUMTYPE&>(reinterpret_cast<_UNDERLYING_ENUM_T<ENUMTYPE>&>(a) &= static_cast<_UNDERLYING_ENUM_T<ENUMTYPE>>(b)); } \
inline ENUMTYPE& operator^=(ENUMTYPE& a, ENUMTYPE b) throw() { return reinterpret_cast<ENUMTYPE&>(reinterpret_cast<_UNDERLYING_ENUM_T<ENUMTYPE>&>(a) ^= static_cast<_UNDERLYING_ENUM_T<ENUMTYPE>>(b)); } \
inline constexpr ENUMTYPE operator|(ENUMTYPE a, ENUMTYPE b) throw() { return static_cast<ENUMTYPE>(static_cast<_UNDERLYING_ENUM_T<ENUMTYPE>>(a) | static_cast<_UNDERLYING_ENUM_T<ENUMTYPE>>(b)); } \
inline constexpr ENUMTYPE operator&(ENUMTYPE a, ENUMTYPE b) throw() { return static_cast<ENUMTYPE>(static_cast<_UNDERLYING_ENUM_T<ENUMTYPE>>(a) & static_cast<_UNDERLYING_ENUM_T<ENUMTYPE>>(b)); } \
inline constexpr ENUMTYPE operator^(ENUMTYPE a, ENUMTYPE b) throw() { return static_cast<ENUMTYPE>(static_cast<_UNDERLYING_ENUM_T<ENUMTYPE>>(a) ^ static_cast<_UNDERLYING_ENUM_T<ENUMTYPE>>(b)); } \
inline constexpr ENUMTYPE operator~(ENUMTYPE a) throw() { return static_cast<ENUMTYPE>(~static_cast<_UNDERLYING_ENUM_T<ENUMTYPE>>(a)); } \
}

Typedef Documentation

◆ _UNDERLYING_ENUM_T

template<typename EnumType >
using _UNDERLYING_ENUM_T = typename std::underlying_type<EnumType>::type
_UNDERLYING_ENUM_T
typename std::underlying_type< EnumType >::type _UNDERLYING_ENUM_T
Definition: FlagEnum.h:39